DiffPoseTalk:利用扩散模型进行语音驱动的风格化 3D 面部动画和头部姿势生成

2023-10-19 15:20:40 浏览数 (1)

论文题目:DiffPoseTalk: Speech-Driven Stylistic 3D Facial Animation and Head Pose Generation via Diffusion Models 作者:Zhiyao Sun 等 来源:Arxiv 论文链接:https://arxiv.org/abs/2310.00434 内容整理:王怡闻 通过语音驱动的风格化3D面部动画生成需要学习语音、风格和相应的面部运动之间的多对多映射关系。然而,现有方法要么使用确定性模型进行从语音到运动的映射,要么使用一种独热编码方案来编码风格。独热编码方法无法捕捉风格的复杂性,从而限制了泛化能力。在本文中,我们提出了 DiffPoseTalk,这是一个基于扩散模型的生成框架,结合了一个风格编码器,从参考视频中提取风格嵌入。此外,我们将这一方法扩展到了头部姿势的生成,从而提高了用户的感知体验。大量实验证明,我们的方法优于现有的最先进方法。

引言

语音驱动的3D面部动画从任意语音信号生成与嘴唇同步的面部表情,需要学习语音、风格和相应的面部运动之间的多对多映射关系。大多数现有的语音驱动的3D面部动画方法依赖于确定性模型,这些模型通常无法充分捕捉复杂的多对多关系,而且面部动作过于平滑。此外,这些方法通常在训练过程中使用独热编码来表示风格特征,因此限制了它们适应新的风格的能力。为了解决上述限制和挑战,我们提出了DiffPoseTalk。与现有方法相比,DiffPoseTalk的主要改进可概括如下。我们使用基于注意力的架构将面部动作与语音对齐,并训练一个扩散模型来预测面部表情信号;除了表情之外,我们还预测了说话者的头部姿势,并设计相应的损失函数以获得更自然的动画。此外,我们利用Wav2Vec来编码输入的语音,以提高泛化能力和稳健性。最后,我们开发了一个风格编码器,从风格视频剪辑中获取潜在的风格代码。最后,我们构建了一个包含多种说话风格的语音驱动的面部动画数据集。

图 1

我们的贡献总结如下:

  • 我们提出了一种基于扩散模型的方法,用于生成来自语音的多样化和富有风格的3D面部动作和头部姿势,充分捕捉了语音、风格和动作之间的多对多映射关系。
  • 我们开发了一个风格编码器,用于从参考视频中提取个性化的说话风格,并在推理时以classifier-free的方式指导模型生成。
  • 我们建立了一个高质量的音频-视觉数据集,包含多种身份和头部姿势。

方法

问题公式化

我们的方法以语音特征

A_{0:T}

,模板面部形状参数

β

和说话风格向量

s

作为输入,然后生成一个基于3DMM的 3D 面部动画,表示为一系列3DMM表情和姿势参数

X_{0:T}

。风格向量

s

可以使用我们的说话风格编码器从一个短参考视频中提取出来。

输入语音处理

Wav2Vec2 具备生成强大和上下文丰富的音频特征的能力,优于传统的特征提取方法,如 MFCC。因此,我们采用 Wav2Vec2 作为我们的语音编码器。Wav2Vec2 由一个时域卷积音频特征提取器和一个多层 Transformer 编码器组成。为了将音频特征与面部动作对齐,我们在时域卷积之后引入了一个 resample 层。

3D人脸表征

我们利用 FLAME 模型来重建人脸。基于 FLAME 模型的人脸几何形状可以用参数

{β, ψ, θ}

来表示,其中

β

是形状参数,

ψ

是表情参数,

θ

是姿势参数。给定一组 FLAME 参数,可以使用

M(β, θ, ψ) = W(TP(β, θ, ψ), J(β), θ, W) quad (1)

来获得 3D 面部网格。对于面部动画,我们预测表情参数

ψ

以及姿势参数

θ

中的下巴和全局旋转分量。为了简化符号表示,我们将

ψ

θ

记为“运动参数”

x

,并将网格构建函数重写为

M(β, x)

面部动画生成扩散模型

图 2

通常来说,去噪网络被训练来预测噪声或干净的样本

X_{0}

。在这个方法中我们选择后者,因为这使我们能够将几何损失考虑在内,这些损失提供了对面部动作更精确的约束。

结构

我们的基于 Transformer 的去噪网络,如图2所示,由两个组件组成:

  • 预训练的Wav2Vec2编码器,用于提取语音特征A。
  • Transformer解码器,用于以迭代的方式从加噪数据
X_{n}

中采样预测的动作

X^{0}

我们还设计了编码器和解码器之间的对齐掩码,它确保了语音和动作模态的正确对齐。具体来说,

t

处的动作特征仅与

t

处的语音特征相关联;初始标记由扩散时间步n和其他条件组成,它与所有语音特征相关联。我们允许Wav2Vec2语音编码器的Transformer部分可以进行训练,这使Wav2Vec2能够更好地直接从语音中捕获动作信息。

去噪网络的输入处理如下:对于给定长度为

T

的语音特征序列,我们将其分成长度为

T_{w}

的窗口(如果音频不够长,会添加填充)。为了确保连续窗口之间的平稳过渡,我们将上一个窗口的最后

T_{p}

帧语音特征

A_{−Tp:0}

和运动参数

X_{−Tp:0}

作为条件输入包含在内。对于第一个窗口,语音特征和运动参数被替换为可学习的起始特征

A_{start}

X_{start}

。网络接收先前和当前的语音特征

A_{−Tp:Tw}

,运动参数

X0_{−Tp:0}

,以及加噪的运动参数

X_{0: nTw}

。然后,去噪网络输出干净样本。

损失函数

我们使用简单损失函数来评估预测样本:

mathcal{L}_{text{simple}} = left|hat{boldsymbol{X}}_{-T_p: T_w}^0 - boldsymbol{X}_{-T_p: T_w}^0right|^2. quad (2)

为了更好地约束生成的面部动作,我们将FLAME参数转换为零头部姿态的3D网格序列

boldsymbol{M}_{-T_p: T_w}=M_0left(boldsymbol{beta}, boldsymbol{X}_{-T_p: T_w}^0right) quad (3)

hat{M}_{-T_p: T_w}=M_0left(boldsymbol{beta}, hat{boldsymbol{X}}_{-T_p: T_w}^0right)quad (4)

然后,我们在3D空间中应用以下几何损失:顶点损失

mathcal{L}_{text{vert}}

用于网格顶点的位置,速度损失

mathcal{L}_{text{vel}}

用于更好的时间一致性,以及平滑损失

mathcal{L}_{text{smooth}}

用于惩罚预测顶点的大加速度:

begin{aligned} mathcal{L}_{text{vert}} &= left|M_{-T_p: T_w} - hat{M}_{-T_p: T_w}right|^2, \ mathcal{L}_{text{vel}} &= left|left(M_{-T_p 1: T_w} - M_{-T_p: T_w-1}right) - left(hat{M}_{-T_p 1: T_w} - hat{M}_{-T_p: T_w-1}right)right|^2, \ mathcal{L}_{text{smooth}} &= left|hat{M}_{-T_p 2: T_w} - 2hat{M}_{-T_p 1: T_w-1} hat{M}_{-T_p: T_w-2}right|^2. end{aligned} quad (5)

类似地,我们以类似的方式对头部运动应用几何损失

mathcal{L}_{text{head}}

总之,我们的总损失定义为:

mathcal{L} = mathcal{L}_{text{simple}} lambda_{text{vert}}mathcal{L}_{text{vert}} lambda_{text{vel}}mathcal{L}_{text{vel}} lambda_{text{smooth}}mathcal{L}_{text{smooth}} mathcal{L}_{text{head}} quad (6)

其中,

lambda_{text{vert}}

lambda_{text{vel}}

lambda_{text{smooth}}

是权衡各项损失的超参数。

风格控制设计

风格编码器

我们引入了一个设计用于捕捉给定演讲者的独特演讲风格的说话风格编码器。演讲风格是一个多方面的属性,表现在诸如嘴巴开合的大小、面部表情动态和头部运动模式等各个方面。鉴于描述演讲风格的复杂性和难度,我们选择通过对比学习的隐式学习方法。我们基于这样一种假设,即同一个人在两个接近的时间点的短期演讲风格应该是相似的。

说话风格编码器使用一个Transformer提取风格特征,编码器的特征

h{i}

通过平均池化得到风格嵌入

s

中。

我们使用NT-Xent损失进行对比学习。每个训练小批次由长度为

2T

的语音特征和动作参数的

N_s

个样本组成。我们将样本长度分成两半,以获得

N_s

对正样本。对于给定的正样本对,其他

2(N_s-1)

个样本被视为负样本。我们使用余弦相似性作为相似性函数。正样本对

(i, j)

的损失函数定义如下:

mathcal{L}_{i, j} = -log frac{exp left(cos _operatorname{sim}left(boldsymbol{s}_i, boldsymbol{s}_jright) / tauright)}{sum_{k=1}^{2 N_s} mathbf{1}_{k neq i} exp left(cos _operatorname{sim}left(boldsymbol{s}_i, boldsymbol{s}_kright) / tauright)} quad (7)

其中

mathbf{1}_{k neq i}

是一个指示函数,

tau

代表温度参数。

训练策略

我们的网络面临两种不同的情景:(a) 生成初始窗口,其中前一个窗口的条件是可学习的起始特征,以及 (b) 生成后续窗口,其中条件是前一个窗口的语音特征和运动参数。网络还需要在这两种情况下都有一个形状参数

boldsymbol{beta}

和一个说话风格特征

s

。因此,我们提出了一种新的训练策略来满足这一需求。具体来说,每个训练样本包括一个形状参数

boldsymbol{beta}

的帧,一个语音剪辑(将由Wav2Vec2编码器编码为语音特征

boldsymbol{A}_{0: 2T_w}

),以及相应的运动参数序列

boldsymbol{X}_{0: 2T_w}^0

。我们将样本分成两个窗口,并使用说话风格编码器为每个窗口派生风格特征,得到

left(boldsymbol{s}_a, boldsymbol{s}_bright)

。元组

left(boldsymbol{A}_{0: T_w}, boldsymbol{X}_{0: T_w}^0, boldsymbol{s}_bright)

用于训练第一个窗口,而

left(boldsymbol{A}_{T_w: 2T_w}, boldsymbol{X}_{T_w: 2T_w}^0, boldsymbol{s}_aright)

与前一个窗口的条件

left(boldsymbol{A}_{T_w-T_p: T_w}, boldsymbol{X}_{T_w-T_p: T_w}^0right)

一起用于训练第二个窗口。考虑到在生成过程中实际的语音长度可能不会完全占据整个窗口,我们在训练过程中引入了样本的随机截断。这种方法确保了模型对语音长度的变化具有鲁棒性。

用classifier-free指导推理

在生成过程中,我们以迭代的方式对条件

(boldsymbol{A}, boldsymbol{s}, boldsymbol{beta})

进行采样结果

boldsymbol{X}^0

。具体来说,我们将干净的样本估计为

hat{boldsymbol{X}}^0=Dleft(boldsymbol{X}^n, boldsymbol{A}, boldsymbol{s}, boldsymbol{beta}, nright)

,然后重新引入噪音以获得

boldsymbol{X}^{n-1}

此外,我们应用无分类器的引导。其中

begin{aligned} hat{boldsymbol{X}}^0 &= Dleft(boldsymbol{X}^n, emptyset, emptyset, boldsymbol{beta}, nright) w_aleft[Dleft(boldsymbol{X}^n, boldsymbol{A}, emptyset, boldsymbol{beta}, nright) - Dleft(boldsymbol{X}^n, emptyset, emptyset, boldsymbol{beta}, nright)right] \ & w_sleft[Dleft(boldsymbol{X}^n, boldsymbol{A}, boldsymbol{s}, boldsymbol{beta}, nright) - Dleft(boldsymbol{X}^n, boldsymbol{A}, emptyset, boldsymbol{beta}, nright)right]. end{aligned} quad (8)

这里

w_a

w_s

分别是音频和风格的引导尺度。在训练过程中,我们随机将风格条件设置为

emptyset

的概率为0.45,同时将音频和风格条件都设置为

emptyset

的概率为0.1。

实验

数据集

在这项工作中,我们使用了两个数据集的组合。首先,我们整合了高清对话面部(HDTF)数据集,这是一个高质量的音频-视觉集合,包括从YouTube获取的720P-1080P分辨率的视频。通过使用作者提供的下载脚本,我们成功获取了348个视频,涵盖了246名主题,总共约16小时的素材。然而,这些视频主要来自三个政治周刊节目的收集,因此数据集偏向正式演讲风格,面部表情和头部运动有限。为了解决这个限制,我们引入了一个额外的数据集——具有头部姿势的对话面部(TFHP),包括342名受试者的704个视频,总共10.5小时。我们的TFHP数据集在内容上更加多样化,包括讲座、在线课程、采访和新闻节目的视频片段,因此捕捉到更广泛的演讲风格和头部运动。我们按演讲者划分了合并数据集,结果为460个用于训练,64个用于验证,64个用于测试。所有视频都转换为25帧。采用一种具有精确重建唇部运动的最先进的3D面部重建方法,将2D视频数据集转换为3DMM参数。

对比

我们采用了两个已建立的度量标准——唇顶点误差(LVE)和上半脸动态偏差(FDD)来定量评估生成的面部表情。为了评估头部运动,我们使用了节拍对齐(BA),计算了检测到的头部运动节拍在预测和实际结果之间的同步性。由于嘴巴的开合大小也可以表明演讲风格,我们引入了一个新的度量标准,称为嘴巴开合差异(MOD),它测量了预测和实际数据之间嘴巴开合大小的平均差异。

图 3

图4

消融实验

我们进行消融实验来评估我们提出的方法中关键组件和技术的影响: 1)无SSE:我们移除了说话风格编码器。 2)无

L_{geo}

:移除了所有几何损失,包括与面部顶点和头部运动相关的损失。 3)无AM:移除了编码器和解码器之间的对齐掩码。 4)无CFG:我们没有使用无分类器指导。 可以看到,移除说话风格编码器导致在所有度量标准上的性能下降,因为我们的方法不再能够生成适合个体说话风格的动画。移除所有几何损失导致我们的方法无法产生精确的面部动画。移除对齐掩码会导致严重的不同步问题。不使用无分类器指导也会影响结果的质量。

总结

在本文中,我们提出了DiffPoseTalk,这是一种基于扩散模型的新方法,用于从语音生成多样化和富有风格的3D面部动画和头部姿势。我们充分利用了扩散模型的能力,有效地复制多种形式的分布,从而解决了多对多映射的挑战。此外,我们解决了当前扩散模型的局限性,这些局限性阻碍了其直接应用于语音驱动的表情动画。借助扩散模型和说话风格编码器的强大功能,我们的方法在捕捉语音、风格和动作之间的多对多关系方面表现出色。我们还提供了一个高质量的音视频数据集,包含704个视频,涵盖了不同的说话风格,具有丰富的头部运动,并根据它来训练我们的模型。实验结果表明,我们的方法在捕捉说话风格方面非常有效,而且在唇同步、头部姿势拍子对齐和自然性方面优于先前的最先进方法。在未来的工作中,我们将考虑加速生成过程。

0 人点赞