文章目录
SadTalker原文翻译
SadTalker:学习风格化音频驱动单幅图像说话人脸动画的真实 3D 运动系数
项目主页:https://sadtalker.github.io/
paper:https://arxiv.org/abs/2211.12194
github:https://github.com/OpenTalker/SadTalker/tree/main
Abstract
通过人脸图像生成说话的头部视频,一段语音音频仍然包含许多挑战,即不自然的头部运动、扭曲的表达和身份修改。我们认为这些问题主要是由于从耦合的 2D 运动场中学习。另一方面,明确使用 3D 信息也存在表达僵硬和不连贯视频的问题。我们提出了 SadTalker,它从音频中生成 3DMM 的 3D 运动系数(头部姿势、表情),并隐式调制一种新颖的 3D 感知人脸渲染,用于说话头生成。为了学习真实的运动系数,我们分别显式地对音频和不同类型的运动系数之间的联系进行建模。准确地说,我们提出了ExpNet,通过提取系数和3D渲染的人脸来从音频中学习准确的面部表情。至于头部姿势,我们通过条件 VAE 设计 PoseVAE 以合成不同风格的头部运动。最后,将生成的 3D 运动系数映射到所提出的人脸渲染的无监督 3D 关键点空间,并合成最终视频。我们进行了大量的实验来证明我们的方法在运动和视频质量方面的优势。
1. Introduction
用语音音频动画静态人像图像是一项具有挑战性的任务,在数字人类创作、视频会议等领域有着广泛的应用。以前的工作主要集中在生成嘴唇运动[2,3,30,31,51],因为它与语音有很强的联系。最近的工作还旨在生成一个逼真的说话人脸视频,其中包含其他相关动作,例如头部姿势。他们的方法主要通过地标[52]和潜在翘曲[39,40]引入二维运动场。然而,生成的视频的质量仍然不自然,受到偏好姿势[17,51]、模糊[30]、身份修改[39,40]和扭曲人脸[39,40,49]的限制。
生成看起来自然的说话头视频包含许多挑战,因为音频和不同动作之间的联系是不同的。即嘴唇运动与音频的联系最强,但音频可以通过不同的头部姿势和眨眼来说话。因此,以往的基于人脸地标的方法[2,52]和基于二维流的音频表达网络[39,40]可能会产生失真的人脸,因为头部运动和表情在其表示中没有被完全分离。另一种流行的方法是基于潜在的面部动画 [3, 17, 30, 51]。他们的方法主要集中在说话人脸动画中特定类型的动作,难以合成高质量的视频。我们的观察是 3D 面部模型包含一个高度解耦的表示,可用于单独学习每种类型的运动。尽管在[49]中讨论了类似的观察结果,但它们的方法也产生了不准确的表达和不自然的运动序列。
从上面的观察中,我们提出了 SadTalker,这是一种通过隐式 3D 系数调制的程式化音频驱动说话头视频生成系统。为了实现这一目标,我们将3DMM的运动系数视为中间表示,并将我们的任务分为两个主要组件。一方面,我们的目标是从音频中生成真实的运动系数(如头部姿势、嘴唇运动和眨眼),并分别学习每个运动以减少不确定性。对于表达式,我们通过仅从[30]的唇动系数和重构的渲染3d人脸[5]上的感知损失(唇读损失[1],面部地标损失)中提取系数,设计了一种新的音频到表情系数网络。对于程式化的头部姿态,利用条件VAE[6]通过学习给定姿态的残差来建模多样性和类似生命的头部运动。在生成逼真的 3DMM 系数后,我们通过一种新颖的 3D 感知人脸渲染驱动源图像。受face-vid2vid[42]的启发,我们学习了显式3DMM系数和无监督3D关键点域之间的映射。然后,通过源和驾驶的无监督3D关键点生成翘曲场,并对参考图像进行扭曲,生成最终的视频。我们分别训练表达式生成、头部姿势生成和人脸渲染器的每个子网络,我们的系统可以以端到端方式推断。至于实验,几个指标显示了我们的方法在视频和运动方法方面的优势。
本文的主要贡献可以概括为:
• 我们提出了 SadTalker,这是一种使用生成的真实 3D 运动系数进行风格化的音频驱动单幅图像说话人脸动画的新系统。
• 为了从音频中学习 3DMM 模型的真实 3D 运动系数,分别提出了 ExpNet 和 PoseVAE。
• 提出了一种新的语义解缠和 3D 感知人脸渲染来生成逼真的说话头视频。
• 实验表明,我们的方法在运动同步和视频质量方面实现了最先进的性能。
2. Related Work
音频驱动的单幅图像说话人脸生成。早期的工作 [3, 30, 31] 主要关注使用感知鉴别器生成准确的嘴唇运动。由于真实视频包含许多不同的运动,ATVGnet[2]使用人脸地标作为中间表示来生成视频帧。MakeItTalk[52]提出了一种类似的方法,不同的是,它将内容和说话人信息从输入音频信号中分离出来。由于面部标志仍然是一个高度耦合的空间,因此在解纠缠空间中生成说话头最近也很流行。PC-AVS [51] 使用隐式潜在代码解开头部姿势和表达。然而,它只能产生低分辨率图像,需要来自另一个视频的控制信号。Audio2Head[39]和Wang等人[40]从视频驱动方法[36]中获得灵感,生成说话头脸。然而,这些头部运动仍然不生动,并产生身份不准确的失真人脸。虽然之前有一些工作[33,49]使用3DMMs作为中间表示,但他们的方法仍然面临着表达式不准确的问题[33]和明显的伪影[49]。
音频驱动的视频肖像。我们的任务也与视觉配音有关,其目的是通过音频编辑肖像视频。与音频驱动的单幅图像说话人脸生成不同,该任务通常需要在特定视频上进行训练和编辑。继之前关于深度视频肖像[19]的工作之后,这些方法利用3DMM信息进行人脸重建和动画。AudioDVVP [45], NVP [38], AD-NeRF [11] 学习重演表达式以编辑嘴形。除了嘴唇运动,即头部运动[23,48]、情感说话人脸[18]也受到关注。基于3DMM的方法在这些任务中扮演着重要的角色,因为从视频剪辑中拟合3DMM参数是可行的。虽然这些方法在个性化视频中取得了令人满意的结果,但它们的方法不能应用于任意照片和野外音频。
视频驱动的单幅图像说话人脸生成。该任务也称为人脸重演或面部动画,旨在将源图像的运动转移到目标人。最近,它得到了广泛的探索[14,29,33,36,37,41,42,44,47,50]。以前的工作还从源图像和目标中学习共享的中间运动表示,大致可分为地标[41]和基于无监督地标的方法[14,36,42,50]、基于3DMM的方法[7,33,47]。该任务比我们的任务容易得多,因为它包含同一域中的运动。我们的人脸渲染也受到基于无监督地标的方法[42]和基于3DMM的方法[33]的启发,将学习到的系数映射到生成真实视频。然而,它们并不专注于生成逼真的运动系数。
3. Method
如图2所示,我们的系统使用三维运动系数作为说话头生成的中间表示。我们首先从原始图像中提取系数。然后分别利用ExpNet和PoseVAE生成真实的3DMM运动系数。最后,提出了一种3d感知人脸渲染的方法来生成会说话的头部视频。下面,我们将简要介绍3.1节中的3D人脸模型,以及3.2节和3.3节中设计的音频驱动运动系数生成和系数驱动图像动画器。
图 2. 主要管道。我们的方法使用3DMM的系数作为中间运动表示。为此,我们首先从音频生成逼真的 3D 运动系数(面部表情 β、头部姿势 ρ),然后使用这些系数隐式调制 3D 感知人脸渲染以进行最终视频生成。
3.1. Preliminary of 3D Face Model
3D信息对于提高生成视频的真实性至关重要,因为真实视频是在 3D 环境中捕获的。然而,以前的工作[30,51,52]很少在3D空间中考虑,因为很难从单个图像获得准确的3D系数,并且高质量的人脸渲染也很难设计。受最近的单幅图像深度三维重建方法[5]的启发,我们将预测的3D变形模型(3DMMs)的空间视为我们的中间表示。在3DMM中,3D人脸形状S可以解耦为:
其中
S
ˉ
\bar S
Sˉ是 3D 人脸的平均形状,Uid 和 Uexp 是 LSFM 可变形模型 [1] 的身份和表情的正交基。系数
α
∈
R
80
α ∈ R^{80}
α∈R80 和
β
∈
R
64
β ∈ R^{64}
β∈R64 分别描述了人的身份和表情。为了保持姿态方差,系数r∈SO(3)和t∈R3表示头部旋转和平移。为了实现身份无关系数生成[33],我们只将运动的参数建模为{β,r,t}。我们像前面介绍的那样从驾驶音频中单独学习头部姿势 ρ = [r, t] 和表情系数 β。然后,这些运动系数用于隐式调制我们的人脸渲染以进行最终的视频合成。
3.2. Motion Coefficients Generation through Audio
如上所述,3D运动系数既包含头部姿势,也包含表情,其中头部姿势是全局运动,表情是相对局部的。为此,完全学习一切将导致网络的巨大不确定性,因为头部姿势与音频的关系相对较弱,而嘴唇运动高度连接。我们分别使用下面介绍的建议 PoseVAE 和 ExpNet 生成头部姿势和表情的运动。
ExpNet 学习一个通用的模型,从音频中产生准确的表情系数是非常困难的,原因有两个:1)音频到表情不是不同身份的一对一映射任务。2)表达式系数存在一些与音频无关的运动,会影响预测的准确性。我们的 ExpNet 旨在减少这些不确定性。至于身份问题,我们通过第一帧的表情系数β0将表情运动与特定人连接起来。为了减少自然谈话中其他面部成分的运动权重,我们使用唇动系数作为系数目标,通过Wav2Lip[30]和深度3D重建[5]。然后,可以通过渲染图像上的附加地标损失来利用其他小的面部动作(例如眨眼)。
图3。我们的ExpNet的结构。我们涉及单目 3D 人脸重建模型 [5] (
R
e
R_{e}
Re and
R
d
R_{d}
Rd) 来学习真实的表情系数。其中
R
e
R_{e}
Re 是预训练的 3DMM 系数估计器,
R
d
R_{d}
Rd是没有可学习参数的可微分 3D 人脸渲染。我们使用参考表达式
β
0
β_{0 }
β0来减少来自预训练 Wav2Lip [30] 的身份和生成的帧的不确定性,第一帧作为目标表达系数,因为它只包含与唇相关的运动。
如图 3 所示,我们从音频窗口
a
{
1
,
.
.
,
t
}
a_{\{1,..,t\}}
a{1,..,t}生成 t 帧表达式系数,其中每帧的音频特征是 0.2s 梅尔谱图。为了训练,我们首先设计了一个基于 ResNet 的音频编码器
Φ
A
Φ_{A}
ΦA [12, 30] 将音频特征嵌入到潜在空间中。然后,将线性层作为映射网络
Φ
M
Φ_{M}
ΦM来解码表达式系数。在这里,我们还添加了参考图像的参考表达式 β0 以减少如上所述的身份不确定性。由于我们在训练期间使用仅唇系数作为基本事实,我们显式地添加了一个闪烁控制信号
z
b
l
i
n
k
z_{blink }
zblink∈ [0, 1] 和相应的眼睛地标损失来生成可控的眨眼。形式上,网络可以写成:
至于损失函数,我们首先使用
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 的第一帧 I0 来生成唇形同步视频,这减少了姿势变体和其他面部表情的影响,除了嘴唇运动。此外,我们还涉及可微 3D 人脸渲染
R
d
R_{d}
Rd 来计算显式面部动作空间中的附加感知损失。如图 3 所示,我们计算地标损失
L
l
k
s
L_{lks}
Llks 来衡量眨眼的范围和整体表达准确度。预训练的唇读网络
Φ
r
e
a
d
e
r
Φ_{reader }
Φreader 也被用作时间唇读损失
L
r
e
a
d
L_{read }
Lread 以保持感知唇品质 [9, 30]。我们在补充材料中提供了更多的训练细节。
PoseVAE 如图 4 所示,设计了一个基于 VAE [21] 的模型来学习真实说话视频的逼真和身份感知的风格化头部运动 ρ ∈
R
6
R^{6}
R6。在训练期间,姿势 VAE 使用基于编码器解码器的结构在固定 n 帧上进行训练。编码器和解码器都是两层 MLP,其中输入包含顺序 tframe 头部姿势,我们将其嵌入到高斯分布中。在解码器中,学习网络从采样分布中采样分布生成 t 帧姿势。我们的PoseVAE不是直接生成姿势,而是学习第一帧的条件姿势ρ0的残差,这使得我们的方法能够在第一帧的条件下在测试中生成更长、稳定和连续的头部运动。此外,根据 CVAE [6],我们添加了相应的音频特征
a
{
1
,
,
.
.
.
,
t
}
a_{\{1,,...,t\}}
a{1,,...,t}和风格身份
Z
s
t
y
l
e
Z_{style }
Zstyle 作为节奏感知和身份风格的条件。KL 散度
L
K
L
L_{KL}
LKL 用于衡量生成运动的分布。均方损失
L
M
S
E
L_{MSE }
LMSE和对抗性损失
L
G
A
N
L_{GAN}
LGAN 用于确保生成的质量。我们提供了有关补充材料中损失函数的更多详细信息。
图 4. 提出的 PoseVAE 的管道。我们通过条件 VAE 结构学习输入头部姿势
ρ
0
ρ_{0 }
ρ0 的残差。给定条件:第一帧
ρ
0
ρ_{0 }
ρ0 、样式标识
Z
s
t
y
l
e
Z_{style }
Zstyle 和音频剪辑
a
{
1
,
,
.
.
.
,
t
}
a_{\{1,,...,t\}}
a{1,,...,t},我们的方法学习剩余头部姿势
∆
ρ
=
ρ
{
1
,
,
.
.
.
,
t
}
−
ρ
0
∆ρ=ρ_{\{1,,...,t\}}−ρ_{0 }
∆ρ=ρ{1,,...,t}−ρ0的分布。经过训练后,我们可以通过姿态解码器和条件(cond.)只生成程式化的结果。
3.3. 3D-aware Face Render
在生成逼真的 3D 运动系数后,我们通过精心设计的 3D 感知图像动画器渲染最终视频。我们从最近的图像动画方法face-vid2vid[42]中获得灵感,因为它隐式地从单个图像中学习3D信息。然而,在他们的方法中,需要一个真实的视频作为运动驱动信号。我们的人脸渲染使其可以通过3DMM系数驱动。如图5所示,我们提出了mapNet来学习显式3DMM运动系数(头部姿势和表情)与隐式未定位的3D关键点之间的关系。我们的mapNet是通过几个一维卷积层构建的。我们使用来自时间窗口的时间系数作为 PIRenderer [33] 进行平滑。不同的是,我们发现PIRenderer中的人脸对齐运动系数将极大地影响音频驱动视频生成的运动自然度,并在第4.4节中提供了一个实验。我们只使用表情和头部姿势的系数。
图5。提出的FaceRender与facevid2vid[42]的比较。给定源图像Is和驱动图像Id,facevid2vid在Xc、Xs和Xd的无监督3D关键点空间中生成运动。然后,可以通过外观A0和关键点生成图像。由于我们没有驾驶图像,我们使用显式解纠缠的3DMM系数作为代理,并将其映射到无监督的3D关键点空间
至于训练,我们的方法包括两个步骤。首先,我们以自监督的方式训练人脸vid2vid[42],如原始论文中所示。在第二步中,我们冻结外观编码器、规范关键点估计器和图像生成器的所有参数进行调优。然后,我们以重建风格在地面实况视频的 3DMM 系数上训练映射网络。我们使用 L1 损失和最终生成的视频按照原始实现在无监督关键点领域进行监督。更多细节可以在补充材料中找到。
4. Experiments
4.1. Implementation Details and Metrics
数据集 我们使用 VoxCeleb [26] 数据集进行训练,该数据集包含 1251 个主题的超过 100k 个视频。我们根据之前的图像动画方法[36]裁剪原始视频,并将视频的大小调整为256×256。经过预处理后,数据用于训练我们的FaceRender。由于VoxCeleb中没有对齐一些视频和音频,我们选择了46名受试者的1890个对齐视频和音频来训练我们的PoseVAE和ExpNet。输入音频下采样到 16kHz,并转换为与 Wav2lip [30] 相同的设置的梅尔谱图。为了测试我们的方法,我们使用来自 HDTF 数据集 [49] 的 346 个视频的前 8 秒视频(总共大约 70k 帧),因为它包含高分辨率和野外说话头视频。这些视频也在[36]之后裁剪和处理,并调整为256×256进行评估。我们使用每个视频的第一帧作为参考图像来生成视频。
实现细节 ExpNet、PoseVAE 和 FaceRender 都是单独训练的,我们在所有实验中都使用 Adam 优化器 [20]。训练后,我们的方法可以以端到端的方式推断,无需任何人工干预。所有3DMM参数都是通过预先训练的深度3D人脸重建方法[5]提取的。我们在 8 个 A100 GPU 上执行所有实验。ExpNet、PoseVAE 和 FaceRender 分别以 2e-5、1e-4 和 2e-4 的学习率进行训练。至于时间考虑,ExpNet 使用连续的 5 帧来学习。PoseVAE 是通过连续的 32 帧学习的。FaceRender 中的帧逐帧生成,系数为 5 个连续帧以保持稳定性。
评估指标我们证明了我们的方法在多个指标上的优越性,这些指标在之前的研究中被广泛使用。我们使用Frechet Inception Distance (FID)[13,35]和累积概率模糊检测(CPBD)[27]来评估图像的质量,其中FID为生成帧的真实性,CPBD为生成帧的清晰度。为了评估身份保存,我们计算了源图像和生成帧之间的身份嵌入的余弦相似度(CSIM),其中我们使用ArcFace[4]来提取图像的身份嵌入。为了评估嘴唇同步和嘴巴形状,我们评估了 Wav2Lip [30] 中嘴形的感知差异,包括距离分数 (LSE-D) 和置信度分数 (LSE-C)。我们还进行了一些指标来评估生成的帧的头部运动。对于生成的头部运动的多样性,计算使用Hopenet[28]从生成的帧中提取的头部运动特征嵌入的标准差。对于音频和生成的头部运动的对齐,我们计算 Beat Align 分数,如 Balando [22] 所示。
4.2. Compare with other state-of-the-art methods
我们比较了几种最先进的说话头视频生成方法(MakeItTalk [52], Audio2Head[39]和Wang et al.[40] 1)和音频到表情生成(Wav2Lip [30], PC-AVS[51])。评估直接对其公开可用的检查点执行。如表 1 所示,所提出的方法在唇同步指标方面表现出更好的整体视频质量和头部姿势多样性,并且还显示出与其他完全说话头生成方法相当的性能。我们认为,这些嘴唇同步指标对不自然的嘴唇运动可能获得更好的分数的音频过于敏感。然而,我们的方法实现了与真实视频相似的分数,这证明了我们的优势。我们还在图 6 中说明了不同方法的视觉结果。在这里,我们给出了唇参考来可视化我们方法的唇同步。从图中,我们的方法与原始目标视频的视觉质量非常相似,头部姿势不同,正如我们预期的那样。与其他方法相比,Wav2Lip[30]产生模糊的半面。PC-AVS [51] 和 Audio2Head [39] 正在努力保持身份。Audio2Head 只能生成正面说话的脸。此外,MakeItTalk [52] 和 Audio2Head [39] 由于 2D 扭曲而生成扭曲的人脸视频。我们在 supp 中给出了视频比较。以显示更清晰的比较。
表1。与HDTF数据集上最先进的方法的比较。我们在一次性设置中评估 Wav2Lip [30] 和 PC-AVS [51]。Wav2Lip* 实现了最佳的视频质量,因为它只对嘴唇区域进行动画处理,而其他区域与原始帧相同。PC-AVS** 使用固定的参考姿势进行评估,并且在某些样本中失败。
图6。我们将我们的方法与几种最先进的单幅图像音频驱动说话头生成方法进行了比较。我们的方法在唇同步、身份保存、头部运动和图像质量方面产生了更高质量的结果。我们给出上面的目标图像用于唇形和身份参考。有关更好的比较,请参阅我们的补充视频。
4.3. User Studies
我们进行用户研究以评估所有方法的性能。我们生成总共 20 个视频作为我们的测试。这些样本包含几乎相同的性别,具有不同的年龄、姿势和表情,以显示我们方法的稳健性。我们反转 20 名参与者,并让他们在视频清晰度、嘴唇同步、头部运动的多样性和自然度以及整体质量方面选择最佳方法。结果如表2所示,其中像我们的方法这样的参与者主要是由于视频和运动质量。我们还发现 38% 的参与者认为我们的方法比其他方法表现出更好的唇同步,这与表 1 不一致。我们认为这可能是因为大多数参与者都专注于视频的整体质量,其中模糊和静止的人脸视频 [30, 51] 会影响他们的意见。
表2。用户研究。
4.4. Ablation Studies
ExpNet 对于 ExpNet 的消融,我们主要通过唇同步指标评估每个组件的必要性。由于之前没有解开的方法,我们考虑基线(Speech2Gesture [10],它是关键点生成网络的音频)来共同学习头部姿势和表情系数。如表 3 和图 7 所示,完全学习所有运动系数很难生成具有真值的说话头视频。然后,我们考虑了所提出的ExpNet的变体,即初始表达式β0、唇读损失Lread和仅唇系数的必要性是至关重要的。视觉对比如图8所示,其中我们的方法w/o初始表达式β0显示了预期的巨大的身份变化。此外,如果我们使用真实系数来替换我们使用的仅唇系数,则在唇同步中性能下降了很多。
表 3. ExpNet 消融。初始表达式 β0、唇读损失 Lread 都大大提高了性能。然而,当使用真实系数时,唇同步度量会大幅下降。
图7。我们将我们的方法与基线方法进行比较,该方法在没有任何条件(来自Speech2Gesture[10])的情况下从单个网络学习所有系数。我们的方法显示出明显的头部运动、身份保存和多样化的表达。
图8。ExpNet消融。我们从生成的视频中选择四个帧作为比较。我们的方法在很大程度上减少了音频到表达式生成的不确定性。参考β0用于提供身份信息,而唇系数只生成更好的唇同步。请注意,目标图像作为身份和嘴唇运动参考提供。
PoseVAE我们从运动多样性和音频节拍对齐的角度来评估所提出的PoseVAE。如表4所示,基线的Speech2Gesture[10]在姿态评估方面也表现较差。至于我们的变体,由于我们的方法包含几个身份风格标签,为了更好地评估其他组件,我们首先考虑对我们的完整方法(OurFull, Single fixed style)的固定one-hot风格进行消融研究。我们设置中的每个条件都有利于整体运动质量的多样性和节拍对齐。我们进一步报告了我们的full方法的混合风格的结果,该方法使用随机选择的身份标签作为风格,并且也显示出更好的多样性性能。由于姿势差异很难在图中表现出来,请参考我们的补充资料进行更好的对比。
表 4. 消融所提出的 PoseVAE 的多样性和音频对齐。每个组件或条件都有助于生成逼真的头部运动。
人脸渲染的消融 我们从两个方面对所提出的人脸渲染进行了消融研究。一方面,我们使用PIRenderer[33]展示了我们方法的重建质量,因为这两种方法都使用3DMM作为中间表示。如图9第一行所示,由于稀疏无监督关键点的映射,所提出的人脸渲染表现出更好的表情重建质量。其中准确的表达式映射也是实现唇同步的关键。此外,我们评估了 PIRenderer [33] 中使用的附加对齐系数引起的姿势不自然性。如图9的第二行所示,我们从具有相同头部姿势和表情系数的生成视频中绘制地标的跟踪图。使用固定或学习的作物系数(作为我们姿势VAE中的姿势系数的一部分)将生成人脸对齐的视频,这是很自然的视频。我们删除它,直接使用头部姿势和表情作为调制参数,显示出更真实的结果。
图9。人脸渲染的消融研究。在第一行,我们将我们的方法与用于人脸动画的 PIRenderer [33] 直接比较,我们的方法表现出更好的表情建模。第二行是来自相同运动系数生成的面部标志的跟踪图。使用额外的人脸对齐系数作为运动系数的一部分[33]将产生不切实际的对齐头部视频。
4.5. Limitation
尽管我们的方法从单个图像和音频生成逼真的视频,但我们的系统仍然存在一些局限性。由于3DMMs不模拟眼睛和牙齿的变化,我们的Face Render中的mapNet在某些情况下也很难合成真实的牙齿。这种限制可以通过盲人脸恢复网络[43]进行改进,如图10所示。我们工作的另一个限制是,我们只关注除其他面部表情(如情绪和凝视方向)之外的嘴唇运动和眨眼。因此,生成的视频具有固定的情绪,这也降低了生成内容的真实性。我们将其视为未来的工作。
图 10. 限制。我们的方法在某些示例中可能显示唇部区域中的一些牙齿伪影,可以通过人脸恢复网络(即 GFPGAN [43])进行改进。
5. Conclusion
在本文中,我们提出了一种新的程式化音频驱动的说话头视频生成系统。我们使用3DMM中的运动系数作为中间表示并学习关系。为了从音频生成逼真的 3D 系数,我们提出了 ExpNet 和 PoseVAE,用于逼真的表情和多样化的头部姿势。为了对 3DMM 运动系数和真实视频之间的关系进行建模,我们提出了一种新颖的 3D 感知人脸渲染,灵感来自图像动画方法 [42]。实验证明了我们整个框架的优越性。由于我们预测真实的3D人脸系数,我们的方法也可以直接用于其他模式,即个性化2D视觉配音[45]、2D卡通动画[52]、3D人脸动画[8,46]和基于nerf的4D说话头生成[15]。
代码调试
1 安装环境
git clone https://github.com/OpenTalker/SadTalker.git
cd SadTalker
conda create -n sadtalker python=3.8
conda activate sadtalker
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
conda install ffmpeg
pip install -r requirements.txt
### Coqui TTS is optional for gradio demo.
### pip install TTS
2 下载权重
bash scripts/download_models.sh
3 推断
gradio:
## you need manually install TTS(https://github.com/coqui-ai/TTS) via `pip install tts` in advanced.
python app_sadtalker.py
用默认设置命令推断:
python inference.py --driven_audio <audio.wav> \
--source_image <video.mp4 or picture.png> \
--enhancer gfpgan
用–still使整体身体更自然,–enhancer提高生成质量。
python inference.py --driven_audio <audio.wav> \
--source_image <video.mp4 or picture.png> \
--result_dir <a file to store results> \
--still \
--preprocess full \
--enhancer gfpgan