DREAM-Talk:基于扩散的逼真情感音频驱动的单张图像说话人脸生成方法。
code:没开源
出处:字节,2023.12
Summary
DREAM-Talk,一种基于扩散的两阶段音频驱动框架。语音驱动一张图片,可同时实现准确的口型同步和自然的情感表达。
1. 介绍
情绪说话头生成的难点:
- 难以同时实现情感表达和准确的口型同步。MEAD[33]:情绪表达体现在眉毛、眨眼和嘴巴。但视频不够长,不能训练精确的唇同步模型。因此,SPACE[10]补充了两个无情感数据集:VoxCeleb2[5]和RAVDESS[20],加上MEAD来训练。然而,无情感和情感数据集一起训练会导致合成情感,缺乏表现力。EAMM[14]通过整合两个模块来解决这个问题:一个学习无情感音频驱动的人脸合成,另一个专门捕捉表情变化。为了防止情感位移扭曲口型,它通过模糊说话者的嘴部区域来增强训练数据。但这样会降低口型的表现力。
- 难以对情感的变化进行建模。现有方法[10,13,14,21]通常利用LSTM或CNN网络作为生成器将音频转换为面部表示。描绘情感不够自然。
因此作者设计了两阶段pipeline:
- 第一阶段:EmoDiff Module,捕捉动态且自然的面部表情。作者设计了一个情绪条件扩散模型,将输入的音频转化成面部表情。
- 第二阶段:Lip Refinement,来确保嘴唇和语音的同步性。会根据音频信号和特定的情感风格重新优化嘴部的动作参数。与传统的面部模型不同,传统模型通常将嘴巴的动作参数和其他面部表情参数混合在一起,使用3D ARKit模型能够让我们明确地只优化嘴唇的动作。这样做可以确保其他面部表情的强度不会受到影响。我们在嘴唇精细化网络中做出的这个设计选择,保证了在提高嘴唇同步性的同时,不会牺牲情感的表达力。这提供了一种更有针对性、更有效的方法,用于创建富有情感的面部动画。
贡献可总结如下:
- 一个新的两阶段生成框架DREAM-Talk,通过音频同步的唇动实现了富有表现力的情感交谈面部。
- 扩散模块EmoDiff,能够根据音频和参考的情绪风格生成各种高动态的情绪表情和头部姿势。
- 情感ARKit数据集,可从其他面部属性中精确分离嘴巴参数,专门细化嘴唇运动。
图2,pipeline。首先,从输入音频、初始状态和情绪风格作为条件开始,用 EmoDiff 进行学习,通过基于 Transformer 架构的序列建模来去噪 3D 表情随时间变化。初始状态对应于第一帧中的表情,情绪风格由随机选择的表情剪辑定义,与输入音频无关。然后,利用条件化的音频和情绪表达,唇部细化模型进一步优化嘴部,而不改变情绪的强度。随后,生成相应的 3D 渲染面孔在混合形状调整装置上。最后,我们使用经过微调的 Face-Vid2Vid 模型[34] 生成情绪对话视频。
2. 方法
2D landmark方法易受头部姿态变化的影响;3D建模提供了形状不变的信息,生成更真实。传统的三维模型,如3DMM或FLAME,利用主成分分析(PCA)来封装人脸特征。但在隔离特定的面部属性方面表现不足,如眨眼或嘴唇运动。
为增强嘴巴区域,同时保留其他面部特征的表现力,作者选择ARKit blendshapes。该技术将嘴部相关参数与其他面部元素明显分开,从而实现针对性优化。ARKit面部模型包含52个不同的参数,每个参数代表独特的面部特征。它利用基于面部动作编码系统(FACS)的blendshapes,允许每个面部表情独立激活特定的面部区域(如嘴区、眼睛、眉毛)。这种方法提供了对各种面部属性的精确控制和优化。
然后,对MEAD情感数据集中每一帧的ARKit参数进行分析,提取相应的参数。
2.2 EmoDiff Module
目标是从音频中生成3D情感表达。
前向:
反向:
为模型提供了附加条件c,包括音频、初始状态和情感风格。条件反向扩散过程概述如图3所示。
图3。每个序列N帧的时间位置感知条件嵌入。初始状态对应音频的第一帧,中间三帧对应情感风格。另一个比特用于表示有效信息。最后,将初始状态和情感风格条件逐帧与音频特征进行融合。
训练目标:
xt可以作为模型的输入,在时间步长t处预测高斯噪声ε而不是µ。
θϵ是一个函数近似器,旨在从xt预测。用以下目标优化θ,通过忽略[12]中引入的加权项,效果更好:
无分类器引导:
通过设置c = ϕ,条件c会周期性地随机丢弃。引导推理表示为无条件生成样本和条件生成样本的加权和。w是缩放参数,用于权衡无条件和有条件生成的样本。无分类器引导可以在质量和多样性之间取得很好的平衡。
网络架构的选择。主要考虑两个问题:
- 如何融合不同的模态数据,如音频和3D表情
- 如何生成不同于图像的n帧3D人脸表情序列。
如图2所示,选择使用transformer结构,该结构融合了不同模态的表示,并通过交叉注意机制捕获长期依赖性[42]。
时间感知的位置嵌入。具有时间连续性的人脸表情生成需要考虑两个问题:
1. 训练数据集只包含T frame输入数据。然而测试时需要更长的音频,因此需要考虑生成序列之间的连续性。针对这个问题,将生成序列的第一帧作为输入特征条件,加入到网络中,对生成序列的初始状态进行约束。
2. 还需要引导网络捕捉情感表达的风格。为了实现这一点,使用三个表情框架作为情感风格的表示。为了防止风格代表音频信息,在训练过程中随机采样三帧表情。为了将初始状态条件和风格信息纳入网络,使用一种时间位置感知的方法,如图3所示。具体来说,首先创建一个与音频帧相同长度的矩阵,并将矩阵的第一列设置为初始状态值,这是一个50维向量,最后一个元素设置为1。对于样式信息,我们选择矩阵中间的三个位置并将它们设置为样式值,最后一个元素也设置为1。在训练过程中,将该矩阵与音频特征逐帧结合,完成条件的设置。
长期动态采样。测试时,首先从数据集中选择一个字符的情感片段,例如“M003 Angry clip001”,以及输入音频。
如Algorithm. 1,为了保证序列之间的连续性,随机选择一帧作为初始状态,随后使用前一序列的最后一帧作为下一序列的初始状态,这确保了长序列的连续性。
为了在每次序列生成中引入多样性,每次随机选择3帧作为风格,这允许在整个序列中生成动态面部表情。
Trained diffusion model M, Input audio A, Emotion Style S, Frame length N.
输入参数包括经过训练的扩散模型 M、输入音频 A、情绪风格 S 和帧长度 N。LA = length(A)
计算输入音频 A 的长度。Lexp = length(S[0])
计算情绪风格 S 中第一个元素的长度。Output o = zeros(L, Lexp)
初始化输出 o 为大小为 L × Lexp 的零矩阵。Condition c = zeros(N, Nexp + 1)
初始化条件 c 为大小为 N × (Nexp + 1) 的零矩阵。c[:, 0, : −1] = S[random(1), :]
将情绪风格 S 中随机选择的第一个元素赋给条件 c 的第一列。c[:, N/2 − 1 : N/2 + 2, : −1] = S[random(3), :]
将情绪风格 S 中随机选择的第三个元素赋给条件 c 的中间列。c[:, 0, −1] = 1
将条件 c 的第一列的最后一个元素设置为 1。c[:, N/2 − 1 : N/2 + 2, −1] = 1
将条件 c 的中间列的最后一个元素设置为 1。for i = 0 :: N − 1 :: LA do
- temp=M.sampling(cat[c, A[i : i + N]]) 利用扩散模型 M 对合并后的 c 和 A[i : i + N] 进行采样,得到临时结果 temp。
- c[:, 0, : −1] = temp[−1] 更新条件 c 的第一列。
- c[:, N/2 − 1 : N/2 + 2, : −1] = S[random(3), :] 随机选择情绪风格 S 的第三个元素并更新条件 c 的中间列。
- o[i : i + N] = temp 将临时结果 temp 赋给输出 o 的相应位置。
11. end for 结束循环。
12. return o 返回输出 o。
这个算法的主要目的是根据输入音频、情绪风格和帧长度,在训练好的扩散模型上进行长期动态采样,以生成相应的输出序列。算法中的条件设置和采样过程有助于保持输出的一致性和连续性。
2.3 Lip Refinement
从扩散模型中获得动态情感表达x0后,发现音频和口型之间出现明显失调。可能是由于扩散网络倾向于生成逼真的序列,反过来减少了音频的影响。
为纠正这个问题,本文提出一个唇同步细化网络,利用相同的音频和情感数据重新校准和生成细化的嘴部参数。包含一个LSTM结构作为音频编码器,一个CNN结构作为情感编码器。专门生成与输入音频和情感参考风格密切相关的嘴部参数。
利用面部参数和生成的头部姿态,来动画化3D混合形状的It。随后用 video-to-video 的方法为任意角色生成说话面部视频。消融研究表明,在实施唇形细化后,嘴部运动和音频之间的同步有显著改善。
表1。在MEAD和HDTF数据集上与最先进方法的比较。MakeitTalk和SadTalker在不考虑情感的情况下保持口型和图像质量。然而,添加情感会使假唱和渲染变得复杂。我们的方法既实现了情感表达,又保持了对口型和图像质量。
2.4 Face Neural Rendering
使用 GPU 渲染器获取合成图像之后,作者采用的是运动转移技术来实现不同主体的真实说话头部效果,即 Face-Vid2Vid方法[34] 作为基础的神经渲染管线 R。
此外,为了提高清晰度,作者使用高分辨率表情丰富的说话视频数据集 TalkHead1HK [34]对模型进行了微调,能够提高表情的丰富性和渲染质量。除了微调,作者还使用文献[1]中概述的面部超分辨率方法将最终图像分辨率提升到 512x512。
为了确保整个过程中有效地保留身份,还使用了 Siarohin等人[25]开发的 FOMM 进行神经运动转移。首先渲染一个带有神经表情的参考帧 In,然后将相对运动 MIn→It(即说话帧与神经帧之间的变换)应用到源图像 T 上,最终得到了渲染输出 R(T, MIn→It)。
- Reference Frame (参考帧) In:一个带有神经表达的渲染帧,可以理解为基准图像,它包含了某个时刻的面部表情或者姿态。
- Relative Motion (相对运动) MIn→It :代表了从一个说话的帧(talking frame)到神经帧(neural frame)之间的变化或转换。简言之,它是一个描述如何从参考帧 In 移动到另一个特定帧 It 的运动信息。
- Source Image (源图像) T:要被转换表情或动作的原始图像,可以理解为目标人物的静态图像。
- Ultimate Rendered Outputs (最终渲染输出) R ( T , MIn→It ) : 最终的输出结果,通过将相对运动应用于源图像T来生成。换句话说,它是源图像T在经过参考帧In的表情或动作变化后的最终渲染图像。
3. 实验
Adam优化器,单个V100 GPU。训练数据集的帧率设置为25 FPS。
EmoDiff模块训练数据集:MEAD,HDTF。生成的每个序列由固定长度的32帧组成。训练了1000个epoch,批大小64,学习率0.0004。
Lip细化模型:用大小为T = 8的滑动窗口来提取音频特征的训练样本。训练50个epoch, batch size为32,学习率0.0001。
表2。比较。SadTalker和MakeItTalk不会产生情绪化的演讲。EAMM制作情感视频,但失去了身份和动态的面部表情。EVP是一种基于视频的方法,可以生成情感语言,但缺乏情感动态。相比之下,DreamTalk提供动态的情感表达,产生眨眼和身份保护。
图4。最先进的模型与我们的方法的比较:在前两次比较中,分别对MEAD和HDTF数据集进行了评估。对于第三个比较,使用一个aigc生成的人脸。
图6。评估右侧眉毛向下的控制参数。生成的序列之间会有一个大的跳跃,比如红框中的结果。采用自回归反馈生成长序列,保证了生成结果的连续性。
4. 结论
本文提出DREAM-Talk,一种创新框架,旨在生成具有情感表现力的说话人脸,并进行精确的唇形同步。所提出的两阶段方法,包括EmoDiff模块和嘴唇细化网络,有效捕捉情感细微差别,并确保准确的唇部对齐。实验结果表明,在保持高视频质量的同时,改善了面部情感表达。
参考:【数字人】11、DERAM-TALK | 使用扩散模型实现 audio+单张图的带表情驱动(字节跳动)_emo音视频扩散模型-CSDN博客