论文: 《SadTalker: Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation》
github: https://github.com/Winfredy/SadTalker
摘要 Abstract
通过人脸图像和一段语音音频生成TalkingHead Generation仍然包含许多挑战:不自然的头部运动、扭曲的表情和身份变化。 作者认为这些问题主要是因为从耦合的 2D 运动场中学习。 另一方面,使用 3D 信息也存在表情僵硬和视频不连贯的问题。
因此作者提出SadTalker,生成3DMM的三维(头部姿势、表情)系数,利用三维面部渲染器进行视频生成。为了学习逼真的运动场系数,作者建模音频与不同类别运动场系数之间联系。作者提出ExpNet,蒸馏运动场系数与三维渲染人脸学习准确面部表情。对于头部姿势,作者设计PoseVAE生成不同风格头部动画。最终生成的3DMM系数映射至面部渲染器的三维关键点空间进行生成视频。
1. 介绍 Introduction
我这里列出几个我看论文时觉得有趣和重要的点
- 作者观察到,3D面部模型包含高度解耦的表示,可用于来单独学习每种姿势的运动
- SadTalker全称实际是:Stylized Audio-Driven Talking-head video generation system through
implicit 3D coefficient modulation,作者希望通过3D模型中解耦出来每种姿势的运动来进行学习,这里面就用到了3DMM的运动系数。
- 作者希望在音频audio中生成逼真的运动系数(例如:头部姿势,嘴唇运动和眨眼),并且单独学习每个运动,这样可以减少不确定性,所以建模音频和运动场系数的关系
- 对于表情系数的提取,提出一个音频到表情系数网络ExpNet,希望从Wavlip的唇形运动系数和重建渲染的 3D 面部上的感知损失(唇形同步损失、面部关键点损失)中提取系数 。
- 对于特定姿态的头部姿势来说,提出了PoseVAE,用条件VAE来学习给定姿势的残差来模拟多样性和逼真的头部运动。
- 在生成了逼真的3DMM运动系数后,再通过一个3D感知面部渲染器来驱动源图像,这个方法借鉴了facevid2vid的想法,建模了3DMM运动系数和面部渲染器的三位关键带你空间之间的关系。
主要的贡献是作者提出了SadTalker,利用ExpNet从音频中蒸馏和提取出真实3DMM的运动系数,利用PoseVAE可以学习特定的头部姿势,最后受facevid2vid的启发,建模了3DMM系数与3D感知面部渲染器中的三维关键点之间的关系,最后可以从源图像生成逼真的视频。
2. 方法 method
Figure 2. Main pipeline. Our method uses the coefficients of 3DMM as intermediate motion representation. To this end, we first generate realistic 3D motion coefficients (facial expression β, head pose ρ) from audio, then these coefficients are used to implicitly modulate the 3D-aware face render for final video generation.
整个方法如图2所示,整个系统利用3DMM系数作为中间表示。首先从原始图像中提取出系数,然后从音频中提取出真实的3DMM的系数(面部表情系数β, 头部姿势ρ),最后通过3D感知面部渲染器生成得到最后的视频。
3.1. Preliminary of 3D Face Model
在3DMM中,人脸的shape S 可以被解耦为以下公式
其中 S ‾ 表示3D人脸平均shape, 表示形状正交基,U e x p U_{exp}U
exp
表示表达正交基,α、β为相关系数,其中分别描述的是人的身份和表情。为保留姿态变化,系数r、t分别表示头部旋转及变换;为了使得参数与人体解耦,作者利用音频仅建模参数{β, r, t},其中头部姿势参数ρ = [ r , t ] ρ=[r,t]ρ=[r,t],这些参数用于调制面部渲染器生成最终视频。
3.2. Motion Coefficients Generation through Audio
**3D运动系数包含头部姿势和表情,其中头部姿势是全局运动,而表情相对是局部的,所以如果一起学习的不确定性会提高。又因为音频与头部姿态弱相关而与嘴唇变换强相关。**因此作者使用PoseVAE生成头部姿态相关系数,ExpNet生成表情相关系数。
ExpNet
通过音频生成准确表情相关参数有两个难点:
- 不同人体音频到表情有不同表现,这不是一个一对一的任务;
- 表情中有些与音频无关动作,这影响预测准确性;
所以说ExpNet用于降低这些不确定性,而对于个人身份ID问题,可以通过第一帧的表情系数的 β 0 建立表情和特定人的身份进行关联;为了减少在说话时其他面部成分的表情的权重,就利用预训练的Wav2lip生成的嘴唇运动系数作为target,除此之外,其他的微表情通过额外的关键点损失来约束。
如图3,对于一段音频,首先生成t帧表情系数,其中每个帧的音频特征就是0.2s的梅尔频谱。训练时,利用一个基于ResNet的音频编码器 Φ A 映射到一个隐空间,然后线性层作为一个映射网络Φ M 解码表情系数,并且还引入参考表情β 0用于保持个人特征,在训练时仅仅使用唇部区域作为真值,因此作者还引入了眨眼控制的信号z b l i n k z_{blink}
来形成可控的眨眼,以及对应的眼部关键点的损失用于控制眨眼。
PoseVAE
如图4,一个基于VAE的模型PoseVAE用于学习逼真的有个人风格的头部运动ρ∈R6,PoseVAE是一个编码器解码器结构。在训练时,在固定的n帧进行训练,编码器与解码器输入包括连续的t帧头部姿势,embed为高斯分布,解码器网络根据采样到的分布学习生成t帧姿态。
PoseVAE没有直接生成姿势,而是学习与第一帧姿势 ρ0 之间的残差,这使本方法能够在测试阶段中基于第一帧条件下的生成更长、稳定和连续的头部运动。
此外,根据CVAE的想法,还添加了相应的音频特征a { 1 , … , t }
和风格z style
作为条件,使得模型更关注节奏及个人风格。其中L KL
用来衡量生成运动的分布,L mse 和L GAN
确保生成的质量。
3.3. 3D-aware Face Render
这一部分是从face-vid2vid得到的灵感,可以隐式地从单个图像中学习 3D 信息,不过face-vid2vid需要真实视频作为驱动信号,而作者提出的面部渲染器利用3DMM参数进行驱动,如图5,作者利用映射网络学习3DMM运动系数与无监督3D关键点之间关系。
这个mappingNet是通过几个一维卷积层构建的,并且中间还利用了PIRenderer进行平滑,但是在后面的消融实验中发现,利用PIRenderer的对齐运动系数会影响到生成视频的运动自然度,只使用表情系数和头部姿势系数会得到更好的结果。
训练主要分为两部分:
以自监督的方式训练face-vid2vid
冻结frozen外观编码器、关键点估计、图像生成模块参数进行finetuning,而后通过重构的方式训练映射网络,在关键点空间使用lossL 1loss约束。
4. Experiments
与SOTA实验相比
如表1可以看到,与其他实验相比,生成的视频质量更高,并且具有头部姿势多样性。
Table 1. Comparison with the state-of-the-art method on HDTF dataset. We evaluate Wav2Lip [28] and PC-AVS [48] in the one-shot settings. Wav2Lip* achieves the best video quality since it only animates the lip region while other regions are the same as the original frame. PC-AVS** is evaluated using the fixed reference pose and fails in some samples.
下图就是上述的一些展示结果,可以看到与其他方法相比,Wav2Lip 产生模糊半脸。 PC-AVS 和 Audio2Head 没能保持身份ID,Audio2Head 只能生成前面说话的脸。此外,MakeItTalk和 Audio2Head 由于 2D 变形而生成扭曲的面部视频,并且SadTalker生成的视频也更加高清。
Figure 6. We compare our method with several state-of-the-art methods for single image audio-driven talking head generation. Our method produces much higher quality results in terms of lip synchronization, identity preservation, head motion and image quality. We give the target image above for both lip shape and identity reference. Please refer our supplementary video for better comparison.
User Studies
这里做了一个很有趣的实验,就是让用户来评估一下视频的质量和结果,结果发现用户比较多认为SadTalker生成的视频比较好,作者说可能认为大部分更注重整体的质量和结果,而上述表1所示的结果可能更注重细节了。
nfluence their opinions. User study.
消融实验
ExpNet
从表3可以看出,学习所有系数很难得到很好的结果,初始表情β 0
和唇部读取损L read 都是比较重要的,特别是唇部系数,更加重要。从下图7也可以看出,利用SadTalker的方法,增加了表情多样性和头部姿势的多样性。
PoseVAE
这是PoseVAE做的消融实验,可以发现比baseline是好很多的,几乎每一种方法都比baseline的多样性更高。
Face Render
作者做了两方面的消融实验的研究:
- 第一行作者比较了一下PIRender生成的结果(也是利用3DMM系数作为中间表示),可以看出得到了更好的表情重建效果。
- 第二行作者发现如果使用PIRender使用的面部对齐系数,会生成不真实的头部对齐视频,而本文生成的视频的结果更像真实视频中的轨迹图。
Limitation
现在SadTalker可以从单张图像和音频生成逼真的视频,但还存在一些限制。由于3DMMs没有眼睛和牙齿的变化,所以Face Render也会在某些情况下无法合成逼真的牙齿,这里面就用GFPGAN来改善这个问题。
除此之外,本文作者仅关注嘴唇及眼睛部分表情,对于情感及视线方向不关心,生成的视频也是固定的Style,从而降低逼真度,他也认为这是未来的工作之一。
5. 结论
作者利用3DMM运动系数作为中间表征,学习其与视频之间关系。利用ExpNet、PoseVAE学习逼真表情及多样头部姿势,3D面部渲染器用于建模3DMM系数与真实视频之间关系,从而可以生成比较逼真的Talking Head Generation的视频。
本文所提方法也可用于其他方向:个性化二维视觉配音,二维卡通动画、三维面部动画、基于NeRF的四维讲话头部生成。