共计 4627 个字符,预计需要花费 12 分钟才能阅读完成。
一、AI“卷”进实时互动
2021 年,元宇宙概念席卷寰球,国内各大厂减速赛道布局,通过元宇宙为不同的利用场景的相干内容生态进行赋能。针对“身份”、“沉迷感”、“低提早”、“随时随地”这四个元宇宙外围根底,ZEGO 即构科技基于互动智能的业务逻辑,提出并落地了 ZegoAvatar 解决方案,将 AI 视觉技术利用至虚构形象,实现了业务和技术的无缝连接。
图 1:Avatar 产品 AI 能力矩阵
ZegoAvatar 根底能力包含:面部表情随动、语音驱动表情、AI 人脸特色辨认(AI 捏脸)、骨骼捏脸等,波及的 AI 技术点包含人脸检测、人脸跟踪、人脸关键点检测、头部姿势检测、3D 人脸重建、AI 特色辨认等。
本文将重点针对 ZegoAvatar 中面部表情随动这一技术点进行解读。
二、ZegoAvatar 面部表情随动成果展现
在技术分享前首先让咱们通过一组具体的数字和视频来看下 ZegoAvatar 的面部表情随动成果,咱们别离在配置从低到高四种不同安卓设施上进行理论推理开销测试,取 1000 次推理后果求均匀:
图 2:测试数据
从上述的数据中能够看到,ZegoAvatar 在不同机型上均以极低的提早实现了实时推理的成果,在保障表情精准稳固的同时,为用户带来了晦涩极致的应用体验。可点击下方⬇️视频查看成果:
https://mp.weixin.qq.com/s/Et…
ZegoAvatar 面部表情随动成果视频展现
三、面部表情随动技术计划解析
面部表情捕获(Facial Expression Capture)广泛应用于电影、游戏、动漫制作等畛域,而目前的面部动作捕获依靠于相机或激光扫描仪将人脸转换为一系列参数数据,而后用于生成计算机图形、电影、游戏或实时化身的计算机动画。
与捕获由关节点形成、较为稳固的人体动作相比,面部表情更为轻微简单,因而对数据精度的要求也更高。当初支流的 3D 面部表情捕获次要有基于相机阵列和基于构造光两种办法,存在拍摄难度大,设施老本高的问题。
图 3:表情捕获示意图
图 4:欧拉角示意图
ZegoAvatar 技术计划中的挪动端面部表情随动是指通过挪动端摄像头进行人脸检测以及跟踪,通过人脸地位、关键点信息定位出人脸在屏幕上的地位,并实时输入蕴含面部、舌头、眼球在内的 52 种根底面部表情维度的线性组合以及头部姿势的三个欧拉角,最初导入虚构形象进行实时渲染驱动。
目前 ZegoAvatar 面部表情随动在不同性能的硬件设施上均实现了低提早的落地成果,通过实时的虚实交互,为用户带来沉迷式的体验。本文将向大家具体解读 ZegoAvatar 的面部表情随动的算法整体架构以及如何在落地过程中做到面部表情随动成果的准确与天然。
ZegoAvatar 的挪动端面部表情随动的技术计划分为模型训练和部署推理两局部。
在训练过程,咱们设计了一个轻量化的全卷积神经网络,包含网络骨干(BackBone)和三个不同的工作分支(如图 3)。Backbone 是由规范卷积 + MobileNetV2 Block + MobileViT Block 组成(如图 4);多个输入分支别离为:3D 面部特色点定位、面部表情辨认、头部欧拉角姿势预计,其中不同的分支负责不同的工作。咱们通过多任务学习的思维和迁徙学习的技巧,给模型送入人脸特色和表情以及欧拉角标签,输入稳固的相干的映射关系。
图 5:网络结构示意图
图 6:网络骨干(Backbone)示意图
图 7:训练和推理流程示意图
1、训练模块
依据数据采集模块失去表情数据,并通过数据改正和加强后训练失去 AI 表情模型,具体分为以下几个局部:
- 数据采集:针对业务需要,咱们开发了一套可用于捕获人脸和动作的数据采集软件,用于获取表情和欧拉角以及 3D 特色点地位数据。
- 数据改正:对采集的图片顺次进行人脸检测,面部特色点对齐,通过仿射变换失去改正后的图片;
- 数据加强:针对落地场景,设计了定制化的数据加强流程,丰盛了训练数据的模式;
- 模型训练:基于多任务学习和迁徙学习的思维,咱们尝试了多种轻量级的网络结构和训练策略,设计不同的工作分支如特色点定位和头部姿势预计以及面部表情检测,利用工作之间的相关性辅助指标工作学习。
对模型进行训练,模型分为三个分支,损失函数组成如下:
其中 为总的损失函数,示意表情工作损失函数,示意 3D 特色点定位损失函数,示意头部姿势预计损失函数,和示意损失加权系数。其中损失函数采纳咱们依据训练过程设计的自适应加权回归损失,能够达到强调重点部位表情和弱化无关表情的成果,使整个模型更贴近业务的需要。
2、推理模块
推理模块依据输出数据进行推理,具体分为以下几个局部:
数据输出和改正:用户应用时解析输出视频流,对图片中的人脸进行检测、跟踪以及面部特色点定位,而后计算出人脸地位与规范人脸之间的仿射矩阵,从而通过仿射变换失去改正后的图像;
模型推理:对训练好的 AI 模型,进行剪枝和量化,在 FP16 半精度下,在挪动端进行推理减速部署,最初将改正后的图像送入模型,推理失去表情向量和欧拉角向量;
表情驱动和渲染:将表情向量和欧拉角向量送入驱动渲染模块解析,实时驱动虚构人物形象。
四、“准确而天然”的成果难点攻克
本技术旨在解决互动智能畛域挪动端虚构人物表情实时驱动问题,在研发过程中须要解决以下问题:
- 挪动端推理的实时性
- 面部表情和头部姿势的稳定性
- 不同用户在不同应用场景的鲁棒性
- 各个表情的协调性
这四个维度层层递进,而如何做到同时兼顾,是贯通整个我的项目周期的重难点。
首先,受限于挪动端的计算资源,不同设施的用户要失常体验,必须要做到各种机型上的低提早,因而落地须要做到极致的轻量化,这对模型设计和部署有较高要求。
其次,理论体验过程中,用户的应用形式、用户场景光照、用户镜头脏污或遮挡都会影响模型的体现,如何在这些因素的综合作用下,让模型又快又稳的输入面部表情和头部姿势,是 ZegoAvatar 走向商业化不可回避的难题。
最初,思考到不同的表情之间既有独立性又相互影响,如何让虚构形象的表情更加拟人化,让用户的应用更有沉迷感,既是一个有挑战性的技术难题,也是一个有价值的业务问题。
针对以上难题,咱们设计了以下技术计划:
1、推理的实时性
一方面设计模型时遵循轻量化的准则,比方应用深度可拆散卷积(Depthwise separable convolution)以及更少的卷积层数和通道数,能够缩小模型的参数量,从而升高推理的计算开销。
这里补充一下个别的卷积和深度可拆散卷积的示意图,并对计算量优化进行简略剖析:
图 8
深度可拆散卷积将个别的卷积过程分为了 depthwise convolution(逐深度卷积)和 pointwise convolution(逐点卷积),略就义精度的状况下,计算量大幅降落,速度更快,模型更小。
对于个别卷积,如果用示意卷积核的尺寸,示意输出 feature map 的尺寸,示意输出通道数,示意输入通道数,那么在且有的状况下,总的计算量为:。
对于深度可拆散卷积,逐深度卷积和逐点卷积的计算量别离为 \(D_k\cdot D_k\cdot M \cdot N \cdot D_F \cdot D_F \)
depthwise convolution 的计算量为 \(D_F \cdot D_F \cdot D_k \cdot D_k \cdot M \)
pointwise convolution 的计算量为 \(D_F \cdot D_F \cdot M \cdot N \)
因而深度可拆散卷积和个别卷积的计算量比拟关系为:
\(\frac{D_F \cdot D_F \cdot D_k \cdot D_k \cdot M + D_F \cdot D_F \cdot M \cdot N}{D_k\cdot D_k\cdot M \cdot N \cdot D_F \cdot D_F}=\frac{1}{N} + \frac{1}{D_k^{2}} \)
由此可见,深度可拆散卷积能够显著缩小个别卷积的计算量。
另一方面落地时,咱们基于挪动端推理引擎进行模型转换和部署,次要分为算子转换和推理优化两个局部。
a. 算子转换:次要通过算子交融、算子代替、模型压缩、布局调整等形式对模型中的图进行根本的优化操作;
b. 优化推理:次要进行算子级的优化包含:卷积和反卷积中利用 Winograd 算法、在矩阵乘法中利用 Strassen 算法、低精度计算、手写汇编、多线程优化、内存复用等。
此外咱们通过分析模型在不同网络层的的计算量散布,对模型存在计算瓶颈的卷积层进一步剪枝,在 FP16 半浮点数精度下,进行模型转换,在保障模型体现的同时,显著的升高了推理开销,并缩小了模型的尺寸。
2、模型精确性和鲁棒性
首先是数据采集阶段,基于 ZEGO 本身业务,自主开发了一套数据采集软件,并通过脚本对每一批数据进行可视化查看,确保原始数据的正确性。
在模型训练阶段,尝试了多种模型构造和训练策略,包含不同的输出模式和分支组成。最初采纳 3D 面部特色点分支和面部表情分支与头部欧拉角分支联合的形式,利用多任务学习思维和迁徙学习的训练技巧,通过特色点信息辅助表情和欧拉角输入,失去准确的模型体现。
在最初落地时,因为用户和场景的不同,咱们遇到了模型泛化性(Generalization)问题,这也是简直所有计算机视觉工作落地时都会遇到的问题。
图 9:泛化性、欠拟合(underfitting)、过拟合(overfitting)示意图
泛化性指模型经过训练后,利用到新数据并做出精确预测的能力。一个模型在训练数据上如果被训练得太好往往会导致过拟合,以至泛化性升高。
针对此问题,一方面从网络结构和训练策略登程,减少必要的组件,比方肯定强度的 DropOut,损失函数正则项,设计 EarlyStopping 机制,另一方面咱们针对呈现的场景问题,比方“眼镜反光”,“阴阳脸”,“镜头含糊脏污”等,进行多轮测试后去追溯和定位问题,而后设计了针对性的数据加强计划,通过齐备性的融化试验(ablation experiment),确定了最优的流程和相应超参数,在训练过程中引入相应的数据模式,极大的晋升了模型的精确性和鲁棒性,从而解决了这一难题。
3、表情的协调性
如何让虚构形象不同的表情之间天然的联动,这是整个团队合作解决的问题。
一方面算法在网络 BackBone 的设计考量上,咱们引入了 MobileViT 模块,因为只管 CNN 网络在视觉工作上具备参数少成果好以及空间感知的劣势,然而这种空间感知是部分的,全局感知能够通过注意力机制和 transformer 实现, 然而一般的 transformer 无奈部署在挪动端,MobileViT 能够将 ViT 与 MobileNetV2 的联合起来, 兼顾全局信息和轻量化的需要,让模型的推理成果又快又准。
另一方面,开发和设计同学继续的解决虚构形象的各种材质渲染难题,最初才有了当初 ZegoAvatar 粗劣而天然的随动成果。
五、总结
ZegoAvatar 面部表情随动是 ZEGO 基于已有业务,通过 AI 联合元宇宙赛道的一次胜利的尝试和冲破。咱们从数据采集计划到模型架构设计再到训练策略整个算法闭环,以及虚构形象和相干组件的开发实现了齐全的自研,在理论的落地成果上,咱们做到了行业领先水平。
对于落地遇到的各种问题,咱们从问题实质登程,设计针对性的计划进行解决,整个我的项目用较少的数据,获得了很好的成果。基于 ZegoAvatar,不同业务切入点的新的算法开发也在进行中,后续会有更多新的我的项目孵化,Zego 科技也将进一步在互动智能畛域一直实现技术革新与冲破,在元宇宙浪潮中扬帆起航!