机器之心原创 作者:蛋酱 那些年关于变身圣斗士的梦想,如今能在腾讯微视App就能实现。 年轻的青铜圣斗士少年们啊,为了大地上的爱与和平,我们将逝去,献上全部的生命和灵魂,融为一体。就在此刻,燃烧吧,黄金的小宇宙!雅典娜啊,请赐予这黑暗的世界一线光明! 就是这段话,没错,是我们小时候倒背如流的十二黄金圣斗士语录了。很多人也曾暗中想象,自己能成为这群黄金圣斗士的成员之一。现在,变身的机会来了! 在腾讯微视App,黄金圣斗士铠甲的特效挂件已经正式上线。这是静态照片变身后的样子: 变身的操作方法也非常简单:用户只需要在腾讯微视App的拍摄页面选择全身换装圣斗士特效,再提供一张无遮挡正面照,即可进行黄金圣斗士铠甲换装。也可以点击本文末的链接,一键体验黄金圣斗士变身! 或者在拍摄页面选择圣斗士相关特效,按照指示做出相应动作,也能召唤出多个星座的圣斗士: 除了黄金射手座,还有双子座撒加、处女座沙加、白羊座穆、天秤座童虎哪个是你心目中最厉害的圣斗士? 双子座圣斗士。 处女座圣斗士。 也许会有人思考:在动态视频背景下,如何给画面主体披上全身的黄金铠甲呢?其实,在这一酷炫特效的背后,隐藏着一套复杂的技术方案。微视团队又是如何解决种种挑战并将这一技术落地的呢? 第一步:运动捕捉 听到运动捕捉这四个字,很多人也许不太熟悉,但这项技术已经广泛应用于人们熟悉的领域,比如好莱坞大片制作中的那些惊艳特效,比如体育赛事中的运动员动作分析,再比如身体损伤患者的康复评估等,都有这项技术的帮助。 目前,依赖于惯性、光学传感器的动作捕捉技术已经比较成熟,可以重建出非常精确的人体三维模型信息。但这种动作捕捉解决方案的成本较高,除了需要在捕捉对象的身体上安装造价不菲的传感器,还需要高性能的计算设备对采集到的数据在定制的软件中进行处理,才能得到最终的结果。 在智能手机早已普及的今天,使用手机端特效增强拍摄效果是短视频应用中的常见玩法。按照应用类型划分,这些靠手机RGB单目摄像头进行动作捕捉相关技术可分为:人脸2D关键点检测(人脸美颜平面贴纸)、人体2D关键点检测(大长腿瘦腰)、人脸头3DMesh重建(人脸立体贴纸头套)、人体3D关键点检测等。但在人体3DMesh重建这方面,业界此前少有成熟的手机端应用,原因主要归于几个难点:缺少大规模高质量的3D数据。人体3DMesh数据的采集成本非常高,同时由于设备的限制,很难采集到大规模贴合用户手机拍摄场景的数据。人脸近似于刚体,有固定的尺寸,不需要考虑形变等因素。而人体属于非刚体,不同的姿态会引起很大的形变,这对视觉技术来说是很大的挑战。人脸有相对固定的特征点,如眉梢、嘴角等部位,但人体缺乏这样稳定的特征点,并且拍摄时衣着的变化很大。人体的深度信息会因为姿态不同发生很大的变化,从二维图像恢复出三维空间信息本身有很多组解,很大程度上依赖于先验信息才能推测出合理的解,而更多的变化就意味着更难去得到有效的先验信息。不同人的体型变化很大,加上穿着不同厚度和材质的衣服,又让体型估计增加了难度。重建出人体Mesh需要同时实现人体检测、人体2D3D关节点检测、人体体型检测、人体姿态和关节旋转检测以及相机投影矩阵回归等多个任务。在手机端计算资源极其有限的情况下,同时完成上述多个任务比较困难。 但得益于近年来手机处理能力的提升,再加上短视频领域的火爆,这些都大大推动了相关技术的进步,特别是手机端的特效推理引擎技术,轻量化模型技术、移动端的渲染技术等。作为国内顶尖的短视频平台,人体检测技术也是微视团队一直以来深耕的方向。 相比于其他更简单玩法的挂件,黄金圣斗士在特效复杂程度、效果质量方面都有着更高的要求,微视团队所投入的研发精力也更多。尽管短视频应用中也出现过全身特效的挂件,但一般是贴合度要求较低的蓬松服装或盔甲,而黄金圣斗士铠甲需要更修身、更贴合。 为了打造黄金圣斗士铠甲特效,腾讯微视发布器技术团队探索出了一套成熟的解决方案。不仅可以打造完美贴合人体的换装,还能在手机上实时运行。在中高端手机上,人体3D重建部分可以达到~90FPS的处理速度。 制作高质量的3D人体Mesh数据集 变身黄金圣斗士,首先需要获取到高质量的3D人体Mesh重建数据,微视团队搭建了一套动作捕捉系统,并基于这套系统开发了相应的Mesh重建算法。 在硬件层面,微视团队采用了一种相对较低成本的搭建方案:3台AzureKinect传感器,3个三脚架,再加上数据同步线、USB延长线和一台Windows电脑即可。 随后进行简单的标定,只需要抱着一个棋盘格箱子,在场景中转一圈,就可以计算出3台相机之间的相对位置和姿态,仅耗时1分钟。这一步的目的是便于后续的数据融合。 接下来开始原始数据的采集与处理。首先借助AzureKinect提供的协同(Collaboration)功能将三台相机的视频流做同步处理,然后采集RGBD、深度人体Mask、人体3D关键点信息并保存下来。 第三步是对每一台深度摄像机生成对应的点云数据,根据相机标定的结果,将三台相机的点云数据进行合成,最终得到统一坐标系下的3D点云数据。 最后,将获取到的原始数据合成为训练模型所需要的Mesh参数。这一步主要基于Fitting优化的方法,通过对人体的Pose、Shape等参数进行调整迭代,尽量降低重建后人体与3D点云数据之间的误差。微视团队采用3D点位之间的欧式距离(MPJPE)衡量重建效果,整体控制在20mm内。 最后,微视团队共采集了上万个贴近手机端用户拍摄内容的视频数据,从中抽取了几十万张视频帧图片。其中既有生活中的常见姿态,也包括高抬腿、弯腰、快速蹦跳等高难度动作,以保证数据的丰富性。 3D人体Mesh如何重建? 数据准备阶段结束后,微视团队着手重建人体3DMesh。在将视频拆分成一帧帧的图片之后,从每张图片中找到人体所在的区域,然后计算出人体的2D关键点信息,接着结合前后帧的时序信息估计出关键点的深度,即得到人体的3D关键点坐标,然后结合2D3D以及图像信息估计出人的体型和3D姿态,从而获得人体在模型坐标系下的3DMesh和相机的投影矩阵。 如下图所示是2D3D姿态检测部分的效果: 获得了2D3D关键点信息后,如果要恢复出人体的Mesh,还要估计两个重要的信息:人的体型以及关节的3D旋转。人的体型可以理解为人的高矮胖瘦,虽然关键点能提供一部分的身材信息,但仅依靠关键点很难准确恢复出身材,特别是胖瘦;3D关键点虽然包含了部分的关节夹角信息,但关节还需要包含更多的自由度,特别是旋转。 当前,人体3DMesh重建的方案主要分成Fitting和DeepLearning两种。 基于Fitting的方法一般基于已有的人体模型,如SMPLMANO等,通过最小化人体模型投影到图像上的点与已知人体关键点的误差,得到每张图片的最优模型参数。这种方法的优势在于能够得到高精度的人体Mesh,一些公开数据集(比如3DPW)都采用这种方法构建数据。 但这种方法的弱点也很明显:首先是速度太慢,每张图片都需要迭代至少几十到上百次,一张图片的处理往往需要一分钟到几分钟的时间。此外,考虑到体型问题,一些方案直接采用3D扫描仪事先扫描出人体,大大提升了数据采集的成本。 基于DeepLearning的多数方法同样需要依赖于人体模型,通过神经网络估计出人体模型的参数,代表性工作是VIBE,这类算法通常称为modelbased的方法。 这类方法有两方面的问题,首先可获取到的数据很少而且拍摄环境局现于实验室中,虽然一些工作如Surreal,Human3。6使用CG制作虚拟的inwild场景,但这样的数据跟真实的数据仍然有比较大的差距。第二,前面提到关节的3D旋转很难通过图像去估计。 相比于modelbased方案,modelfree方案提供了另外一种思路,这种方法是直接回归人体mesh上的密集3D点坐标,并通过在loss中增加人体shape、pose等先验信息进行约束。相关的工作主要依赖于图神经网络来建模人体不同关节点之间的拓扑结构,这方面的代表工作包括Pose2Mesh(https:arxiv。orgabs2008。09047)。 最终,微视团队使用7000多个顶点和1。5万的面片重建出图像坐标系下的人体3DMesh,从图像中重建出的Mesh需要经过滤波处理去掉抖动,这样就得到了视频中的人体Mesh。效果展示如下图所示: 后续,渲染引擎将在此人体Mesh信息的基础上给视频中的人物穿上盔甲。 让黄金铠甲成为手机端特效 接下来,微视团队在移动端运行了人体检测跟踪、2D关键点检测、3D姿态估计、相机投影矩阵估计、3DMesh重建整套技术的流程,但他们发现,实现单帧图像15ms以内的处理速度非常困难。这意味着,在移动端的实现和优化上,还需要思考更好的解决方案。 微视团队从三个方面进行了改进: 1。网络Backbone结构的设计与优化。结合HRNet、MobileNet系列网络等不同结构的优势,在大规模的数据上进行了不同结构设计的探索和调参,针对不同计算能力的手机做针对性的设计,保证对不同的机型在速度和效果上达到最佳的平衡。 2。算法流程改进。对整个的算法串行的流程进行优化,整个人体检测、2D关键点、3D关键点、人体Mesh、相机姿态估计全部调整为并行实现,极大提升了算法整体的效率。 3。移动端工程优化。基于腾讯优图团队提供的TNN移动端深度推理框架,实现了移动端模型的高效推理。对于特定的算子和矩阵运算,微视团队与优图TNN团队合作进行了针对性的底层优化,保证算法的高效运行。同时,对于模型的后处理也进行了算法层面的优化,在保证不使用影响体验的精度损失上获得了更极致的运行效率。 针对不同的拍摄光照、人体的姿态、不同的体型、衣着、拍摄距离、拍摄角度以及不同拍摄背景中发现的BadCase,微视团队从训练方式、参数调整、Loss函数设计、数据更新与优化等方面进行了更多深度的研究,解决了贴合度、检测稳定性等多方面拍摄中的常见问题。同时,进一步压缩了模型计算开销,将单帧的总体处理时长从15ms优化到了当前的11ms。 经过上述一系列的优化工作后,微视团队基于重建的人体3DMesh,为其量身定制了一套AttachToBody的渲染方案,目标有两个:能够保证服装模型在三维世界和二维图像上位置和旋转正确,贴合人体表面;能够提供PBR(基于物理的渲染)每个环节需要的正确信息,确保高质量的渲染效果。 同时为了项目需要,技术团队在原有引擎基础上开发了自定义材质系统,为玩法提供了更自由灵活的材质与光照解决方案。借助于强大的流程控制和脚本系统,技术团队很好地将人体重建、服饰真实感渲染、骨骼动画、转场特效等要素串联在一起,提供了完整流畅的视效表达。 此外,部分机型上启用了IBL、SSAO等技术,以提升整体的光影效果。为了提升在低端机型上的整体效果覆盖率,微视团队采取了MaterialCapture材质捕捉技术方案,用较小的计算成本拟合出近似PBR的真实感效果。同时在一些高频且量大的矩阵计算中启用了NEON加速方案,整体降低了数学计算耗时。 基于上述所有工作,微视的设计团队与技术团队深入协作。首先明确直观的预期效果,明确优化方向,给出优化建议;此外辅助优化引擎渲染能力,使最终效果更接近设计师预期。 在细节打磨和工具支持方面,依托LightStudio对3D场景强大的编辑和可视化能力,以编辑器组件的方式提供给设计同学完整的工具链支持,包括对衣服SRT数据的精准调整,对环境光衣服材质主要参数的可视调整等。 黄金圣斗士铠甲特效的研发历时10个月,最初沟通的预期效果如下图: 通过设计团队、算法团队和特效团队多轮的效果打磨,衣服贴合度与跟随性,身体比例协调性,衣服视效等方面均达到了理想水平。引擎实现效果如下图: 未来,微视发布器技术团队将持续围绕三维人体重建来进行创意特效设计与研发。在算法方面会继续在3D重建的精度上持续性的提升,解决更多拍摄场景的需求。业务方面,会结合相关图形图像技术,在人体形变,人体驱动虚拟角色等方面有进一步的突破,为用户提供更酷炫好玩的特效新体验。 一键体验黄金圣斗士变身:https:h5。weishi。qq。comweishiaccountlogin?rurlhttps3A2F2Fisee。weishi。qq。com2Fiseev22F12FwZm2wHfO02Findex。html3Fwwv3D409626h5materialid3Dshengdoushih526h5materialcategory3Dh5activity3Fchid3D40100300126attach3Dcpreserves3404001000126uploadfrom3D2770