TL;DR
- 2024 年微软发表的数字人工作 VASA-1,支持基于单人头像照片和语音音频输入,来实时生成数字人视频。支持在线生成高达 40 FPS 的 512×512 分辨率视频,目前为数不多能做到实时推理且效果很好的 talking face 工作。
Paper name
VASA-1: Lifelike Audio-Driven Talking Faces Generated in Real Time
Paper Reading Note
Paper URL: https://arxiv.org/abs/2404.10667
Project URL: https://www.microsoft.com/en-us/research/project/vasa-1/
Introduction
背景
- 人脸不仅仅是一个面孔,而是一个动态的画布,每一个微妙的动作和表情都能表达情感、传达未言之语,并促进共情联系。
- 人工智能生成的会说话的面孔的出现,为我们打开了一扇窗,让我们看到了一个技术增强人与人之间、人与人工智能互动丰富性的未来。这样的技术有望丰富数字通信,为沟通障碍者增加可及性,通过互动式人工智能辅导转变教育方法,并在医疗保健中提供治疗支持和社交互动。
- 当前的技术主要关系唇部动作,同时生成效率较慢,难以实时处理
本文方案
- VASA:根据单个静态图像和语音音频剪辑生成具有吸引力的视觉情感技能(VAS)的逼真会说话的面孔
- 生成与音频完美同步的唇部动作
- 产生一系列面部细微表情和自然头部动作
- 支持在线生成高达40 FPS的512×512视频,几乎没有启动延迟
Methods
- 采用单张人脸图像、可选的控制信号和语音音频片段来生成逼真的说话人脸视频。不是直接生成视频帧,而是在潜在空间中根据音频和其他信号生成整体面部动态和头部运动。
- 首先构建面部潜在空间并训练面部编码器和解码器。我们设计了一个富有表现力和解耦的面部潜在学习框架,并在真实人脸视频上进行训练。
- 然后我们训练一个简单但功能强大的扩散 transformer(Diffusion Transformer),在测试时根据音频和其他条件对运动分布进行建模并生成运动潜在编码
富有表现力和解耦的面部潜在空间构建
- 给定一个未标记的说话人脸视频集,旨在为人脸建立一个具有高度解耦性和表现力的潜在空间。
- 解耦使得能够在大量视频上对人头和整体面部行为进行有效的生成建模,而不受主体身份的影响。它还实现了输出的解耦因素控制,这在许多应用中都是有用的。
- 另一方面,面部外观和动态运动的表现力确保解码器能够输出具有丰富面部细节的高质量视频,而潜在生成器能够捕捉细微的面部动态。
- 参考 Megaportraits 等工作中的 3D 辅助面部重演框架 (face reenactment framework) 构建模型。与 2D 特征图相比,3D 外观特征体能更好地表征 3D 中的外观细节。显式的 3D 特征扭曲 (warping) 在对 3D 头部和面部运动建模方面也很强大。
- 具体来说,我们将面部图像分解为规范的 3D 外观体积 V a p p V_{app} Vapp、身份代码 z i d z_{id} zid、3D 头部姿势 z p o s e z_{pose} zpose 和面部动态代码 z d y n z_{dyn} zdyn。除了 V a p p V_{app} Vapp 外,其余都是通过独立编码器从面部图像中提取的,而 V a p p V_{app} Vapp 是通过先提取带姿势的 3D 体积,然后进行刚性和非刚性 3D 扭曲到规范体积来构建的,这种方法参考了 Megaportraits。单个解码器 D D D 将这些潜在变量作为输入并重建人脸图像,其中,首先对 V a p p V_{app} Vapp 应用类似的逆方向扭曲场以获得带姿势的外观体积。读者可以参考文献 Megaportraits 以了解该架构的更多细节。
- 为了学习解耦的潜在空间,核心思想是通过在视频中的不同图像之间交换潜在变量来构建图像重建损失。我们的基本损失函数改编自 Megaportraits,但我们发现原始损失在面部动态和头部姿势之间的解耦较差,同时身份与运动之间的解耦也不完善。因此,我们引入了几种额外的损失来实现我们的目标。
- 受文献 Dpe 启发,我们添加了一种成对的头部姿势和面部动态传递损失,以改善它们的解耦。设 I i I_i Ii 和 I j I_j Ij 为从同一视频中随机采样的两个帧。我们使用编码器提取它们的潜在变量,将 I i I_i Ii 的头部姿势传递给 I j I_j Ij 得到 I ^ j , z p o s e i = D ( V a p p j , z i d j , z p o s e i , z d y n j ) \hat{I}_{j,z_{pose}^i} = D(V_{app}^j, z_{id}^j, z_{pose}^i, z_{dyn}^j) I^j,zposei=D(Vappj,zidj,zposei,zdynj),并将 I j I_j Ij 的面部运动传递给 I i I_i Ii 得到 I ^ i , z d y n j = D ( V a p p i , z i d i , z p o s e i , z d y n j ) \hat{I}_{i,z_{dyn}^j} = D(V_{app}^i, z_{id}^i, z_{pose}^i, z_{dyn}^j) I^i,zdynj=D(Vappi,zidi,zposei,zdynj)。然后最小化 I ^ j , z p o s e i \hat{I}_{j,z_{pose}^i} I^j,zposei 和 I ^ i , z d y n j \hat{I}_{i,z_{dyn}^j} I^i,zdynj 之间的一致性损失 l c o n s i s t l_{consist} lconsist。
- 为了强化身份与运动之间的解耦,我们为跨身份姿势和面部运动传递结果添加了面部身份相似性损失 l c r o s s _ i d l_{cross\_id} lcross_id。设 I s I_s Is 和 I d I_d Id 为两个不同主体的视频帧,可以将 I d I_d Id 的运动传递到 I s I_s Is 上,得到 I ^ s , z p o s e d , z d y n d = D ( V a p p s , z i d s , z p o s e d , z d y n d ) \hat{I}_{s,z_{pose}^d,z_{dyn}^d} = D(V_{app}^s, z_{id}^s, z_{pose}^d, z_{dyn}^d) I^s,zposed,zdynd=D(Vapps,zids,zposed,zdynd)。然后对从 I s I_s Is 和 I ^ s , z p o s e d , z d y n d \hat{I}_{s,z_{pose}^d,z_{dyn}^d} I^s,zposed,zdynd 提取的深度面部身份特征 (arcface) 应用余弦相似性损失。正如我们在实验中展示的那样,我们的新损失函数设计对于实现有效的因素解耦以及促进高质量、逼真的说话人脸生成至关重要。
3.2 整体面部动态生成与扩散变换器
-
在构建了人脸潜在空间并训练了编码器后,我们可以从真实的说话人脸视频中提取面部动态和头部动作,并训练生成模型。关键在于我们考虑的是与身份无关的整体面部动态生成(HFDG),其中学习到的潜在代码表示所有面部运动,例如唇部动作、(非唇部的)表情、眼睛的注视和眨眼。这不同于现有方法,它们通常为不同因素应用独立模型,使用交错的回归和生成形式 (比如 Audio2head、Sadtalker 等)。此外,以往方法往往在有限的身份数据上进行训练 (比如 Sadtalker、Codetalker 等),无法涵盖不同人类的广泛运动模式,特别是在存在丰富运动潜在空间的情况下。
-
在本研究中,我们利用扩散模型进行音频条件的 HFDG,并在大量多身份的说话人脸视频上进行训练。我们采用变换器架构 (参考 DiT、Diffposetalk) 来完成序列生成任务。图 2 展示了我们的HFDG框架概览。
-
形式上,从视频片段中提取的运动序列定义为 X = { [ z p o s e i , z d y n i ] } , i = 1 , . . . , W X = \{[z_{pose}^i , z_{dyn}^i ]\}, i = 1, . . . , W X={[zposei,zdyni]},i=1,...,W。给定其对应的音频片段 a a a,我们使用预训练的特征提取器 Wav2Vec2 提取同步的音频特征 A = { f a u d i o i } A = \{f_{audio}^i\} A={faudioi}。
扩散模型公式
扩散模型定义了两个马尔科夫链,正向链逐渐向目标数据添加高斯噪声,反向链则逐步从噪声中恢复原始信号。基于去噪得分匹配目标,我们定义简化的损失函数为:
E t ∼ U [ 1 , T ] , X 0 , C ∼ q ( X 0 , C ) ( ∥ X 0 − H ( X t , t , C ) ∥ 2 ) , \mathbb{E}_{t \sim U[1, T], X_0, C \sim q(X_0, C)}(\|X_0 - H(X_t, t, C)\|^2), Et∼U[1,T],X0,C∼q(X0,C)(∥X0−H(Xt,t,C)∥2),
其中 t t t 表示时间步, X 0 = X X_0 = X X0=X 为原始运动潜在序列, X t X_t Xt 是扩散前向过程 q ( X t ∣ X t − 1 ) = N ( X t ; 1 − β t X t − 1 , β t I ) q(X_t | X_{t-1}) = N(X_t; \sqrt{1 - \beta_t} X_{t-1}, \beta_t I) q(Xt∣Xt−1)=N(Xt;1−βtXt−1,βtI) 生成的噪声输入。 H H H 是我们的 transformer 网络,它直接预测原始信号而非噪声。 C C C 是条件信号,接下来将进行描述。
条件信号
-
在我们的音频驱动的运动生成任务中,主要的条件信号是音频特征序列 A A A。我们还加入了若干额外的信号,不仅让生成建模更加易处理,还增强了生成的可控性。具体来说,我们考虑了主要的注视方向 g g g、头部与摄像机的距离 d d d 以及情感偏移 e e e。
- 主要注视方向 g = ( θ , φ ) g = (θ, φ) g=(θ,φ) 由球坐标中的一个向量定义,用来指定生成的说话人脸的注视方向。我们通过在每帧中使用文献 L2cs-net 的方法,并辅以简单的基于直方图的聚类算法,提取训练视频片段中的 g g g。
- 头部距离 d d d 是一个归一化的标量,控制人脸与虚拟摄像机之间的距离,从而影响生成视频中人脸的大小。我们通过 3D 人脸重建的方法为训练视频获取这一尺度标签。
- 情感偏移 e e e 用于调节说话人脸上显示的情绪。注意,情绪通常内在地与音频相关,且能从音频中大致推断出来;因此, e e e 仅作为一个全局偏移,用于在需要时增强或适度地调整情绪,而非在推理过程中完全改变情绪或产生与输入音频不一致的情绪。在实际操作中,我们使用文献 Hsemotion 提取的平均情绪系数作为情绪信号。
-
为了实现相邻窗口之间的无缝过渡,我们将前一个窗口中音频特征和生成的运动的最后 K K K 帧作为当前窗口的条件。总结而言,我们的输入条件可以表示为 C = [ X pre , A pre ; A , g , d , e ] C = [X_{\text{pre}}, A_{\text{pre}}; A, g, d, e] C=[Xpre,Apre;A,g,d,e]。所有条件在时间维度上与噪声连接后作为 transformer 的输入。
无分类器引导 (CFG)
在训练阶段,我们随机去除每个输入条件。在推理阶段,我们应用:
X ^ 0 = ( 1 + ∑ c ∈ C λ c ) ⋅ H ( X t , t , C ) − ∑ c ∈ C λ c ⋅ H ( X t , t , C ∣ c = ∅ ) \hat{X}_0 = \left(1 + \sum_{c \in C} \lambda_c\right) \cdot H(X_t, t, C) - \sum_{c \in C} \lambda_c \cdot H(X_t, t, C |_{c = ∅}) X^0=(1+c∈C∑λc)⋅H(Xt,t,C)−c∈C∑λc⋅H(Xt,t,C∣c=∅)
其中, λ c \lambda_c λc 是条件 c c c 的CFG比例。 C ∣ c = ∅ C | _{c = ∅} C∣c=∅ 表示将条件 c c c 替换为空集。在训练中,除了 X pre X_{\text{pre}} Xpre 和 A pre A_{\text{pre}} Apre 使用 0.5 的丢弃概率外,其他每个条件的丢弃概率为 0.1。这样可以确保模型能很好地处理没有前置音频和运动的第一个窗口(即设置为空)。我们还随机去除 A A A 的最后几帧,以确保在音频序列短于窗口长度时也能生成稳健的运动。
3.3 说话人脸视频生成
在推理时,给定任意人脸图像和音频片段,我们首先使用训练好的面部编码器提取 3D 外观体积 V a p p V_{app} Vapp 和身份代码 z i d z_{id} zid。接着,提取音频特征,将其分割成长度为 W W W 的片段,并使用训练好的扩散变换器 H H H 以滑动窗口的方式逐段生成头部和面部运动序列 { X = { [ z p o s e i , z d y n i ] } } \{X = \{[z_{pose}^i , z_{dyn}^i ]\}\} {X={[zposei,zdyni]}}。最终的视频可以使用我们训练好的解码器生成。
Experiments
实验配置
- 模型
- 对于运动潜在生成,我们使用一个 8 层的 transformer 编码器,嵌入维度为512,头数为 8,作为我们的扩散网络。
- 数据
- 对于人脸潜在空间的学习:我们使用公开数据集VoxCeleb2,该数据集包含大约 6000 名主体的说话人脸视频。我们重新处理该数据集,并通过 Blind image quality assessment (BIQA) 的方法丢弃包含多个人物的片段以及质量较低的片段
- 对于运动潜在生成:该模型在 VoxCeleb2 和我们收集的另一个高分辨率对话视频数据集上进行训练,后者包含约 3500 名主体。
- 推理配置:
- 在我们的默认设置中,模型使用面向前方的主要注视条件,所有训练视频的平均头部距离,以及空的情感偏移条件。
- CFG 参数设置为 λ A = 0.5 \lambda_A = 0.5 λA=0.5 和 λ g = 1.0 \lambda_g = 1.0 λg=1.0,采样步数为50。
- 训练
- 我们的人脸潜在模型在 4 个 NVIDIA RTX A6000 GPU 工作站上大约需要 7 天的训练时间,而扩散变换器大约需要 3 天。用于训练的总数据量约为 50 万段,每段持续 2 到 10 秒。我们的 3D 辅助人脸潜在模型和扩散变换器模型的参数量分别约为 200M 和 29M。
评估基准
- 我们使用两个数据集来评估我们的方法。
- 第一个是 VoxCeleb2 的一个子集。我们从 VoxCeleb2 的测试集随机选择了46个主体,并为每个主体随机抽取 10 个视频片段,总计 460 个片段。这些视频片段时长约为 5 到 15 秒(80% 小于 10 秒),大部分内容为访谈和新闻报道。
- 为了进一步评估我们的方法在长时语音生成和更广泛声音变化下的表现,我们另外收集了 17 个人的 32 个一分钟视频片段。这些视频主要来自在线辅导课程和教育讲座,其讲话风格比 VoxCeleb2 更为多样化。我们将此数据集称为 OneMin-32。
推理速度
在离线批处理模式下,我们的方法可生成 512×512 大小的视频帧,速度为45fps;在在线流媒体模式下,支持速度最高可达 40fps,前置延迟仅为 170ms,评估是在配备单个 NVIDIA RTX 4090 GPU 的桌面 PC 上进行的。
定量评估
评测指标
我们使用以下指标对生成的唇部运动、头部姿态和整体视频质量进行定量评估,包括一种类似于 CLIP 训练的新数据驱动的音频-姿态同步指标:
- 音频-唇部同步。我们使用一个预训练的音频-唇部同步网络,即 SyncNet,来评估输入音频与生成唇部运动在视频中的对齐情况。具体来说,我们分别计算置信度分数和特征距离,分别表示为 SC 和 SD。通常来说,较高的 SC 和较低的 SD 表明更好的音频-唇部同步质量。
- 音频-姿态对齐。衡量生成的头部姿态与输入音频的对齐并不容易,目前没有成熟的指标。一些最近的研究使用了 Beat Align Score 来评估音频-姿态对齐。然而,由于“节拍”在自然语音和人类头部运动中的概念并不清晰,这一指标并不理想。在本研究中,我们引入了一种新的数据驱动指标,称为对比音频和姿态预训练 (CAPP) 分数。受到 CLIP 的启发,我们联合训练了一个姿态序列编码器和一个音频序列编码器,并预测输入的姿态序列和音频是否配对。音频编码器从预训练的 Wav2Vec2 网络初始化,而姿态编码器是一个随机初始化的 6 层 Transformer 网络。输入窗口大小为 3 秒。我们的 CAPP 模型在 2K 小时的真实音频和姿态序列上训练,表现出评估音频输入与生成姿态同步程度的强大能力。
- 姿态变化强度。我们进一步定义了一个姿态变化强度分数 ∆P,它是相邻帧之间的姿态角度差异的平均值。∆P 在所有生成的帧上进行平均,提供了该方法生成的总体头部运动强度的指示。
- 视频质量。根据以前的视频生成工作,我们使用弗雷谢视频距离 (FVD) 来评估生成的视频质量。我们使用 25 帧的连续序列,分辨率为 224×224 来计算 FVD 指标。
对比结果
- 我们将我们的方法与现有的三个基于音频的说话人脸生成方法进行比较:MakeItTalk,Audio2Head 和 SadTalker。
- 没有在 VoxCeleb2 上评估 FVD,因为其视频质量参差不齐且往往较低。
- 在两个基准上,我们的方法在所有评估指标上均表现最佳。就音频-唇部同步分数(SC 和 SD)而言,我们的方法远超其他方法。需要注意的是,我们的方法比真实视频得分更高,这归因于音频 CFG 的效果。
- 我们生成的姿态与音频的对齐效果更好,尤其是在 OneMin-32 基准上,这在 CAPP 分数上得到了反映。
- 根据 ∆P,头部运动也显示出最高的强度,尽管与真实视频的强度仍有差距。
- 我们的 FVD 分数显著低于其他方法,表明我们生成结果的视频质量和真实性更高。
定性评估
视觉结果。图 1 展示了我们方法的一些具有代表性的基于音频驱动的说话人脸生成结果。通过视觉检查,我们的方法能够生成高质量的视频帧,并展现出生动的面部情感。此外,还能生成类似人类的对话行为,包括在讲话和思考过程中偶尔的眼神转移,以及自然和多变的眨眼节奏等细微之处。
生成的可控性。图 3 显示了我们在不同控制信号下的生成结果,包括主要眼神方向、头部距离和情绪偏移。我们的模型能够很好地解读这些信号,并生成紧密符合这些指定参数的说话人脸结果。
面部潜在因素的解耦。图 A.1 显示了在不同主体上应用相同的运动潜在序列时,我们的方法有效地保持了独特的面部运动和独特的面部身份。这表明了我们方法在身份和运动解耦方面的有效性。图 A.2 进一步展示了头部姿态和面部的有效解耦。
Thoughts
- 训练和推理资源消耗都不大,几十 M 的 diffusion 模型支持实时生成,官网上的效果也不错,有比较大的应用前景,可惜没有开源。
- 比较好奇其中解耦设计带来的具体好处,消融实验暂时没有提到