论文: 《SadTalker: Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation》
github: https://github.com/Winfredy/SadTalker
演示效果: https://www.bilibili.com/video/BV1fX4y1675W
摘要
利用一张面部图片及一段音频让其变为一段讲话的视频仍然存在许多挑战:头部运动不自然、表情混乱、人物外表发生变化。作者认为这主要是由于耦合2D运动场导致,但是使用3D信息有的方法也会出现表达混乱、视频不连贯问题。
因此作者提出SadTalker,生成3DMM的三维(头部姿势、表情)系数,利用三维面部渲染器进行视频生成。为了学习逼真的运动场系数,作者建模音频与不同类别运动场系数之间联系。作者提出ExpNet,蒸馏运动场系数与三维渲染人脸学习准确面部表情。对于头部姿势,作者设计PoseVAE生成不同风格头部动画。最终生成的三维运动场系数映射至面部渲染器的三维关键点空间进行生成视频。
算法
如图2,作者使用3D运动系数作为中间结果用于头部讲话视频生成。首先从原始图片提取相关系数,利用ExpNet及PoseVAE分别生成3DMM运动系数,最后利用三维面部渲染器生成视频。
3.1. Preliminary of 3D Face Model 3D
在3DMM中,三维面部shape S可解耦为式1,
其中
S
‾
\overline S
S表示3D人脸平均shape,
U
i
d
U_{id}
Uid表示形状正交基,
U
e
x
p
U_{exp}
Uexp表示表达正交基,α、β为相关系数。为保留姿态变化,系数r、t分别表示头部旋转及变换;为了使得参数与人体解耦,作者利用音频仅建模参数
β
,
r
,
t
{β, r, t}
β,r,t,其中头部姿势参数
ρ
=
[
r
,
t
]
ρ = [r, t]
ρ=[r,t],这些参数用于调制面部渲染器生成最终视频。
3.2. Motion Coefficients Generation through Audio
**头部姿势是全局姿态而表情是局部相关,因此一起学习将导致巨大不确定,音频与头部姿态弱相关而与嘴唇变换强相关,**因此作者使用PoseVAE生成头部姿态相关系数,ExpNet生成表情相关系数。
ExpNet
通过音频生成准确表情相关参数有两个难点:
1、不同人体音频到表情有不同表现;
2、表情中有些与音频无关动作,这影响预测准确性;
ExpNet用于降低这些不确定性,对于个人特性问题,通过第一帧表情系数
β
0
β_0
β0建立表情与特定人体关联;为了减少其他面部表情权重,作者使用Wav2Lip生成的嘴唇运动系数作为target,其他微表情通过额外关键点损失约束。
如图3,对于一段音频,生成t帧表情系数,每一帧音频为0.2s梅尔频谱。训练时基于ResNet的音频编码器
Φ
A
Φ_A
ΦA将其映射到隐空间,线性层作为映射网络
Φ
M
Φ_M
ΦM解码表情系数,其引入参考表情
β
0
β_0
β0用于减少个人特征不确定性,训练时仅使用唇部作为真值,因此作者引入眨眼控制信号
Z
b
l
i
n
k
Z_{blink}
Zblink及对应眼部关键点损失用于控制生成眨眼,如式2,
对于损失函数,首先使用
L
d
i
s
t
i
l
l
L_{distill}
Ldistill评估唇部表情系数
R
e
(
W
a
v
2
L
i
p
(
I
0
,
a
{
1
,
.
.
.
,
t
}
)
)
R_e(Wav2Lip(I_0, a_{\{1,...,t\}}))
Re(Wav2Lip(I0,a{1,...,t}))与生成的
β
{
1
,
.
.
.
,
t
}
β_{\{1,...,t\}}
β{1,...,t}之间差异,Wav2Lip使用第一帧生成唇部同步视频,这降低了姿态变量及唇部以外面部表情影响,除此之外,作者使用可微的3D面部渲染器
R
d
R_d
Rd计算额外的感知损失,如图3,计算关键点损失
L
l
k
s
L_{lks}
Llks用于衡量眨眼范围及整个表情准确率,实时唇部读取损失
L
r
e
a
d
L_{read}
Lread使用预训练的唇部读取网络
Φ
r
e
a
d
e
r
Φ_{reader}
Φreader,用于保证唇部质量。
PoseVAE
如图4,一个基于VAE的模型PoseVAE用于学习逼真的有个人风格的头部运动
ρ
∈
R
6
ρ ∈ R^6
ρ∈R6,PoseVAE基于n帧训练,编码器与解码器输入包括t帧头部姿势,embed为高斯分布,解码器网络根据采样到的分布学习生成t帧姿态。作者没有直接生成姿势,而是学习与第一帧姿势
ρ
0
ρ_0
ρ0之间残差,这使得本方法在测试阶段基于首帧可以生成更长、更稳定、更连续头部运动。依据CVAE,增加对应音频特征
a
{
1
,
.
.
.
,
t
}
a_{\{1,...,t\} }
a{1,...,t}及风格
Z
s
t
y
l
e
Z_{style}
Zstyle作为条件,使得模型关注节奏及个人风格。
L
k
l
L_{kl}
Lkl用于衡量生成运动的分布,
L
m
s
e
L_{mse}
Lmse及
L
G
A
N
L_{GAN}
LGAN用于确保生成质量。
3.3. 3D-aware Face Render
face-vid2vid需要真实视频作为驱动信号,本文提出的面部渲染器利用3DMM参数进行驱动,如图5,作者利用映射网络学习3DMM运动系数与无监督3D关键点之间关系。
训练过程分两步:第一步自监督训练face-vid2vid;第二步frozen外观编码器、关键点估计、图像生成模块参数进行finetuning,而后通过重构的方式训练映射网络,在关键点空间使用
L
1
l
o
s
s
L_1 loss
L1loss约束。
实验
SOTA实验
如表1,本文提出方法与其他方法相比具有更高视频质量以及头部姿势多样性。
图6作者展示可视化结果,作者提出方法与原始视频视觉上非常相似,同时正如所期望的具有不用的头部姿势。Wav2Lip产生模糊半脸,PC-AVS和Audio2Head没能保留个体特性,MakeItTalk和Audio2Head由于使用二维warp,因此生成扭曲的面部视频。
作者生成20段不同年龄、姿势、表情视频,20个用户选择质量最佳视频,结果如表2,38%用户认为本文所提方法在唇部同步方面效果最佳;
消融实验
ExpNet
如表3、图7表明学习所有运动系数难以生成逼真视频,初始表情
β
0
β_0
β0,唇部读取损失
L
r
e
a
d
L_{read}
Lread,仅使用唇部系数非常重要,如图8所示;
PoseVAE
如表4,基线Speech2Gesture效果比较差。
Face Render
如图9,第一行作者提出面部渲染器展示更好的表情重建质量,第二行使用面部对齐系数将生成不逼真头部对齐视频。
限制
3DMM无法建模眼睛及牙齿,映射网络难以合成逼真牙齿,这可以通过面部重构网络改进,如图10;
同时作者仅关注嘴唇及眼睛部分表情,对于情感及视线方向不关心,从而降低逼真度.文章来源:https://www.toymoban.com/news/detail-417458.html
结论
作者利用3DMM运动系数作为中间表征,学习其与视频之间关系。利用ExpNet、PoseVAE学习逼真表情及多样头部姿势,3D面部渲染器用于建模3DMM系数与真实视频之间关系。本文所提方法也可用于其他方向:个性化二维视觉配音,二维卡通动画、三维面部动画、基于NeRF的四维讲话头部生成。文章来源地址https://www.toymoban.com/news/detail-417458.html
到了这里,关于SadTalker(CVPR2023)-音频驱动视频生成的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!