程序员至死是少年!在公司竟公然变身圣斗士( 二 )


但手机端动作捕捉技术 , 并不好做 。
自研移动端算法 , 筛选7k+顶点
只用一部普通的手机 , 意味着两个难点:计算量受限、坐标深度只能靠预测 。
相机生成的照片 , 通常只有2D信息 。 要想从2D中还原出3D信息 , 需要找到一个能够预测坐标深度的函数 , 使之预测的3D信息尽可能逼近真实值 。
对于真实度要求很高的动作捕捉技术而言 , 这意味着精度和实时性都要受到挑战 。
目前已有的移动端AI技术 , 只能实现实时动作捕捉的一部分功能 , 包括人体/人脸检测、和基于2D/3D骨骼关键点的姿态估计技术 , 也就是我们常见的“火柴人”算法 。
程序员至死是少年!在公司竟公然变身圣斗士
文章图片
但“火柴人”算法显然没有3DMesh贴合度高 , 因此团队决定 , 将3DMesh搬到移动端上 , 自研一套基于3DMesh的移动端姿态估计算法 。
程序员至死是少年!在公司竟公然变身圣斗士
文章图片
这套算法相当于重建人体表面的7000多个特征点 , 以及15000多个三角面片 , 不仅能够还原人体的基本动作 , 还能预测出人体的高矮胖瘦 。
程序员至死是少年!在公司竟公然变身圣斗士
文章图片
除此之外 , 团队还从3个方面 , 对模型进行了整体优化 。
其一 , 从动作捕捉精度和模型大小两方面 , 对自研模型进行调试 。
据微视团队表示 , 移动端已有的基于3D骨骼关键点的驱动阀 , 虽然可以驱动虚拟人体 , 在同一场景下做各种动作 , 但这套算法存在一些不足 , 需要自行调整 。
例如 , 算法偶尔会出现不正常的抖动 , 包括虚拟人物突然“形变”的情况 , 如下图脚掌翻转 。 为此 , 团队还给算法加上了平滑滤波 , 使得人物动作看起来更真实 , 进一步提升模型精度 , 避免像下面这种抖动 。
程序员至死是少年!在公司竟公然变身圣斗士
文章图片
△脚掌不正常的翻转抖动
同时 , 在精度以外 , 团队还要保证在移动端实现3DMesh 。 为了做到这一点 , 除了在其他模型方面尽可能整合压缩以外 , 团队也对模型本身进行了一个简化 。
其二 , 从数据采集来看 , 团队也下了不少功夫 。
由于移动端3DMesh数据需针对性采集 , 微视团队搭建了自动化的数据采集系统 , 帮助快速采集到高质量动捕数据 。
程序员至死是少年!在公司竟公然变身圣斗士
文章图片
虽然Kinect的实时动作捕捉效果一般 , 但用于数据采集还是非常不错的 , 三台结合起来就能获得完整的深度信息 。
程序员至死是少年!在公司竟公然变身圣斗士
文章图片
为了确保模型的泛化性 , 除了尽可能多找18~60岁的不同人物数据进行采集以外 , 程序员们还采用了数据增强和半监督学习来增强模型的泛化能力 。
在数据增强这块 , 为了加强模型辨认人体与周围环境的能力 , 程序员们将获取到人体的mask信息进行提取 , 随机贴到其他背景的图片上 , 创造出更多不同背景信息的图片;同时 , 团队也采用了神经渲染、GAN等技术 , 来生成更多的训练数据 。
在半监督学习上 , 程序员们结合辅助任务 , 对2D关键点模型进行训练、提升模型的泛化能力 。
其三 , 就是团队对实时性和特效渲染做的兼顾 。
模型结构的整体设计和优化都只是“基本操作” , 例如将串联运行的模型改成并联运行等;在推理上 , 团队还基于优图的TNN移动端深度推理框架 , 实现了模型的高效推理 , 最终将模型的推理时间从15ms降低到了11ms 。