让你喜欢的角色给你唱歌——AniTalker论文翻译与代码调试

AniTalker原文翻译

AniTalker:通过身份解耦面部运动编码实现动画生动化和多样化的说话人脸
在这里插入图片描述
图1
图 1:我们介绍了 AniTalker,这是一个框架,它将单个静态肖像和输入音频转换为具有自然流动运动的动画谈话视频。生成的结果的每一列都使用相同的控制信号,具有相似的姿势和动作,但结合了一些随机变化,证明了我们的生成结果的多样性。

ABSTRACT

本文介绍了 AniTalker,这是一个创新的框架,旨在从单个肖像中生成类似生命的说话人脸。与现有的主要关注嘴唇同步等语言线索的模型不同,无法捕捉面部动作和非语言线索的复杂动态,AniTalker 采用通用动作表示。这种创新表示有效地捕获了广泛的面部动态,包括微妙的动作和头部运动。AniTalker 通过两种自监督学习策略增强了运动描述:第一个涉及从同一身份内的源帧重建目标视频帧以学习细微的运动表示,第二个使用度量学习开发了一个身份编码器,同时主动最小化身份和运动编码器之间的互信息。这种方法确保运动表示是动态的,没有特定于身份的细节,显着减少了对标记数据的需求。此外,将扩散模型与方差适配器的集成允许生成多样化和可控的面部动画。这种方法不仅展示了 AniTalker 创建详细和逼真的面部动作的能力,而且还强调了它在为实际应用制作动态化身方面的潜力。合成结果可以在 https://github.com/X-LANCE/AniTalker 查看。

1 INTRODUCTION

  将语音信号与单个肖像[13,18,33,45,47,59-61]相结合来生成说话化身极大地增强了娱乐和教育部门,为交互式数字体验提供了创新的途径。虽然目前的方法[36,47,57,61,62]在实现语音信号和嘴唇运动之间的同步方面取得了显著的进步,从而增强语言交流,但它们通常忽略了非语言交流的关键方面。非语言交流包括在不使用单词的情况下传输信息,包括但不限于特定的头部运动、面部动作和眨眼。研究 [35] 表明这些非语言线索在交流中至关重要。
  主要挑战在于现有模型的不足,以封装与面部运动表示相关的复杂动态。现有的方法主要采用显式结构表示,如混合形状[3,13,34]、地标系数[18,48,60]或3D变形模型(3DMM)[7,14,27]来动画人脸。最初设计用于单幅图像处理,这些方法提供了面部动力学的约束近似,无法捕捉人类表达能力的全部广度。
  最近的进展[11,25]引入了可训练的面部运动编码器作为传统显式特征的替代方案,在捕捉详细的面部运动方面取得了显著进展。然而,它们的部署通常是针对特定扬声器[11]或仅限于嘴部区域[25]量身定制的,突出了捕捉各种面部动态的细粒度运动表示的差距。
  仍然缺乏适用于不同字符的通用和细粒度的运动表示。这样的表示应该满足三个关键标准:捕捉微小的细节,例如轻微的嘴部运动、眨眼或轻微的面部肌肉抽搐;确保通用性,使其适用于任何说话者,同时删除特定于身份的信息以保持外观和运动之间的清晰分离;并结合广泛的非语言线索,例如动作、头部运动和姿势。
  在本文中,我们介绍了 AniTalker。我们的方法依赖于一个通用的运动编码器,旨在掌握面部动力学的复杂性。通过采用自监督学习范式,我们减轻了对标记数据的依赖,使我们的运动编码器能够学习鲁棒的运动表示。这个学习过程在双重层面上运作:需要通过将源图像转换为目标图像来理解运动动力学,捕捉一系列面部动作,从细微的变化到重大变化。同时,数据集中身份标签的使用以自我监督的方式促进了身份识别网络的联合优化,进一步旨在通过互信息最小化将身份从运动信息中分离出来。这确保了运动表示保留了最小的身份信息,保持了其普遍适用性。
  为了验证我们的运动空间的多功能性,我们集成了扩散模型和方差适配器,以实现面部动画的不同生成和操作。由于我们的复杂表示和扩散运动生成器,AniTalker 能够产生多样化和可控的说话人脸。
  总之,我们的贡献有三个方面:
  (1)我们使用自我监督方法开发了通用面部运动编码器,该方法有效地捕获了各种个体的面部动态。这些编码器具有身份解耦机制,以最小化运动数据中的身份信息并防止身份泄漏。
  (2) 我们的框架包括一个运动生成系统,它将基于扩散的运动生成器与方差适配器相结合。该系统允许产生多样化和可控的面部动画,展示我们的运动空间的灵活性。
  (3) 广泛的评估证实了我们的框架对增强数字人类表示的真实性和动态的贡献,同时保持身份。

2 RELATED WORKS

  语音驱动的说话人脸生成是指创建由语音驱动的说话人脸,我们根据模型是单级还是两级来对模型进行分类。单阶段模型[36,58,61]直接从语音生成图像,执行端到端渲染。由于渲染网络的大小限制,这种方法难以处理较长的视频,通常管理数百毫秒。两阶段类型[3,11,13,18,25,33,60]将运动信息与面部外观解耦,由一个语音到动作生成器和一个动作到视频渲染阶段组成。由于第一阶段只生成动作信息,不涉及帧的纹理信息,因此需要更少的模型大小,可以处理长序列,长达几秒钟甚至几分钟。众所周知,这种两阶段方法可以减少抖动[3,11,25],增强语音到动作同步[11,13,33,60],减少了对齐视听训练数据[3,25]的需要,并能够创建更长的视频[18]。我们的框架还采用了两阶段结构,但具有重新设计的动作表示和生成过程。
  动作表示是驱动特征与创建说话人脸的最终渲染输出之间的基本桥梁。目前的方法主要利用显式的结构表示,如混合形状[3,13,32]、3D变形模型(3DMMs)[27]或地标[48,60]。这些格式提供了高可解释性并促进面部动作与纹理的分离,使它们成为面部生成任务中的中间表示。然而,由于现实世界面部动作的广泛可变性,它们通常不能完全捕捉面部动作的细微细微差别,从而限制了依赖于这些表示的方法的多样性和表现力。我们的研究致力于通过开发一种不受显式参数模型限制的学习隐式表示来扩展运动表示的频谱。
  自监督动作传递方法[31,41,44,48,49,51,4]旨在通过从大量未标记数据中学习稳健的动作表示来从源图像重建目标图像。这显着减少了对标记数据的需求。这些方法的一个关键挑战是将动作与身份信息分开。他们主要使用预测的密集光流场扭曲源图像。这种方法试图通过预测源图像的失真和变换来将动作从身份中分离出来。然而,在实践中会出现信息泄漏,导致目标图像不仅包含动作,还包含身份信息。基于这一观察,我们明确地引入了身份建模,并使用互信息神经估计 (MINE) [1, 4] 方法来实现独立于身份的动作表示。
  扩散模型[19]在各种生成任务中表现出出色的性能[12,17,21,39]。最近的研究利用扩散模型作为渲染模块[2,11,25,29,40,43,45]。尽管扩散模型通常会产生更高质量的图像,但它们需要大量的模型参数和大量的训练数据才能收敛。为了增强生成过程,几种方法 [18, 27, 28, 32, 55] 使用扩散模型来生成运动表示。扩散模型擅长解决一对多映射挑战,这对语音驱动的生成任务至关重要。鉴于相同的音频剪辑可以导致不同个体甚至同一个人的不同动作(例如嘴唇运动和头部姿势),扩散模型为管理这种可变性提供了一种稳健的解决方案。此外,扩散模型的训练和推理阶段系统地引入然后去除噪声,允许在生成过程中加入噪声以促进多样性。我们还使用扩散与我们的动作表示相结合,进一步探索说话人脸生成的多样性。

3 ANITALKER FRAMEWORK

3.1 Model Overview

  AniTalker 包含两个关键组件:(1)训练一个可以捕获通用人脸动态的运动表示,以及(2)基于上一步训练良好的运动编码器,使用用户控制的驾驶信号生成或操作运动表示以产生合成的说话人脸视频。

3.2 Universal Motion Representation

  我们的方法利用自监督图像动画框架,使用来自视频剪辑的两个 RGB 图像:源图像 I s I^{s} Is 和目标图像 I t ( I ∈ R H × W × 3 ) I^{t}(I\in R^{H \times W \times 3}) It(IRH×W×3)来服务于不同的函数: I s I^{s} Is 提供身份信息,而 I t I^{t} It 提供运动细节。主要目的是重建 I t I^{t} It 。由于帧的随机选择,偶尔会选择相邻帧,使网络能够学习细微运动的表示。如图 2 (a) 所示,源图像和目标图像都来自同一个视频剪辑。通过这种自监督学习方法,目标图像的编码器旨在专门捕获运动信息。通过从帧到帧的转换中学习,我们可以获得更通用的面部运动表示。这种表示包括语言动作,例如嘴唇动作,以及非语言动作,包括表情、姿势和动作。
  为了显式地解耦上述过程中的运动和身份,我们通过结合度量学习(ML)和互信息解纠缠(MID)来加强自监督学习方法。具体来说:
  度量学习。从人脸识别[8,46]和说话人识别[9]中获得灵感,度量学习促进了鲁棒身份信息的生成。该技术采用了一种涉及正负样本对的策略,旨在最小化相似样本之间的距离,最大化不同样本之间的距离,从而增强网络区分不同身份的能力。这个过程也可以以自我监督的方式进行,每次迭代从数据集中随机选择不同的身份。具体来说,该方法建立了一个锚点(a),并选择一个正样本§和一个负样本(n)——对应于不同身份的人脸——目的是在增加锚点与负样本之间的距离的同时减小锚点与正样本之间的距离(d)。这种优化,如图 2 (b) 所示,涉及从不属于当前人的候选列表中随机选择不同的身份作为负样本。
图2
图 2:AniTalker 框架包括两个主要组件:学习通用运动表示,然后通过序列模型生成和操作这种表示。具体来说,第一部分旨在通过使用度量学习 (ML)、互信息解缠结 (MID) 和分层聚合层 (HAL) 来学习稳健的运动表示。随后,这种运动表示可用于进一步的生成和操作。

  此过程的优化目标如下:
公式1
  在这里,margin是引入的正阈值,以进一步分离正样本和负样本,从而提高模型区分不同身份的能力。
  互信息解缠。尽管度量学习有效地限制了身份编码器,但仅关注该编码器不能充分最小化运动编码器内的身份信息。为了解决这个问题,我们利用互信息 (MI),这是一种统计度量,用于评估身份和运动编码器的输出之间的依赖关系。鉴于直接计算两个变量之间的 MI 的挑战,我们采用参数化方法来近似随机变量之间的 MI 估计。具体来说,我们使用 CLUB [4] 来估计 MI 的上限。假设身份编码器的输出是身份潜在𝑧𝑖𝑑,运动编码器的输出是运动潜在𝑧𝑚,我们的目标是优化互信息𝐼 (𝝴(𝑧𝑖𝑑 ); 𝝴 (𝑧𝑚 )),其中𝝴表示CLUB中可学习的多层感知器(MLP)。这种优化确保运动编码器主要捕获运动,从而防止身份信息污染运动空间。该策略如图 2 © 所示。
  总之,通过利用度量学习和互信息解纠缠,我们增强了模型在减少对标记数据的依赖的同时准确区分身份和运动的能力。
  分层聚合层 (HAL)。为了增强运动编码器理解不同尺度运动方差的能力,我们引入了层次聚合层(HAL)。该层旨在从图像编码器的不同阶段整合信息,每个阶段都提供不同的感受野[24]。HAL 处理图像编码器的所有中间层的输入,并通过平均池化 (AvgPool) 层传递它们以捕获特定于尺度的信息。加权和 [53] 层遵循,分配可学习的权重来有效地合并来自这些不同层的信息。这种软融合方法使运动编码器能够捕获和描述大范围尺度上的运动。这样的策略允许我们的表示适应不同大小的人脸,而不需要先前的人脸对齐或归一化。
  具体来说,AvgPool 层之后的特征表示为 [𝑚1, 𝑚2, . . . , 𝑚𝑛 ],表示平均特征集,其中 [𝑤1, 𝑤2, . . . , 𝑤𝑛 ] 作为相应的权重集,其中 𝑛 象征图像编码器中的中间层的数量。这些权重通过 softmax 函数进行归一化,以保证累积权重为 1。张量的加权和的方程,表示层的输出,表示为 m = ∑ i = 1 n w i m i m=\sum^{n} _{i=1} w_im_i m=i=1nwimi。softmax 归一化过程在数学上表示为 w i = e w i ∑ j = 1 n e w j w_i=\frac{e^{w_{i}}}{\sum^{n} _{j=1} e^{w_{j}}} wi=j=1newjewi,确保权重在各个层的比例分布。随后,m 被送入运动编码器以进行进一步编码。
  学习目标。学习的主要目标是通过输入两幅图像来重建目标图像:当前身份索引中的源和目标。在训练过程中使用了几个损失函数,包括重建损失 L r e c o n L_{recon} Lrecon 、感知损失 L p e r c e p L_{percep} Lpercep、对抗性损失 L a d v L_{adv} Ladv、互信息损失 L M I L_{MI} LMI和身份度量学习损失 L M L L_{ML} LML。总损失公式如下:
公式2

3.3 Motion Generation

  一旦训练运动编码器和图像渲染器,在第二阶段,我们可以冻结这些模型。动作编码器用于生成图像,然后使用视频驱动或语音驱动方法产生动作,最后,图像渲染器执行最终的逐帧渲染。

3.3.1 视频驱动管道。

  视频驱动,也称为人脸重演,利用驱动的说话人视频序列 I d = [ I 1 d , I 2 d , . . . , I T d ] I^d=[I_1^d ,I_2^d , . . . , I_T^d ] Id=[I1d,I2d,...,ITd]对源图像 I S I^S IS进行动画处理,从而产生一个准确复制驱动姿势和面部表情的视频。在这个过程中,视频序列 I d I^d Id被输入到动作编码器中,该编码器在第一阶段之前进行训练,以提取潜在动作。这个潜在动作,连同 I S I^S IS,然后逐帧直接输入到图像渲染器中进行渲染。不需要额外的训练。详细的推理过程,其中橙色线表示视频驱动推理过程中的数据流,如图 2 (e) 所示。

3.3.2 语音驱动管道。

  与使用图像的视频驱动方法不同,语音驱动方法生成与语音信号或其他控制信号一致的视频,以动画源图像 I S I^S IS。具体来说,我们利用扩散和方差适配器的组合:前者学习了更好的动作数据分布,而后者主要引入了属性操作。
  扩散模型。为了生成运动潜在序列,我们利用多层Conformer[16]。在训练期间,我们结合了扩散的训练过程,包括添加噪声和去噪步骤。噪声过程逐渐将干净的运动潜在 M 转换为高斯噪声 M T M^T MT ,其中 T 表示扩散过程中总去噪步骤的数量。相反,去噪过程系统地消除了高斯噪声中的噪声,导致干净的运动潜伏期。这个迭代过程更好地捕捉运动的分布,增强生成结果的多样性。在训练阶段,我们坚持[19]中描述的DDPM训练阶段的方法,应用指定的简化损失目标,如公式1所示,其中t表示特定的时间步长,C表示控制信号,它指的是由方差适配器扰动的语音或语音(将在下一节讨论)。对于推理,考虑到扩散所需的大量迭代步骤,我们选择去噪扩散隐式模型(DDIM)[42]——另一种非马尔可夫噪声过程——作为快速采样过程的求解器。
公式1
  方差适配器。方差适配器[38]是一个连接到音频特征的残差分支,允许对语音信号进行可选的控制。最初提出减轻文本到语音(TTS)任务中的一对多问题,其体系结构包括一个预测器和一个编码器,它使用语音信号来预测属性表示。然后在编码器输出和语音信号之间应用残差连接。在训练期间,编码器与预测器协作处理语音特征,以最小化针对Ground Truth控制信号的 L2 损失。这包括合并用于针对特定属性的属性提取器,例如在音频生成过程中使用姿势提取器 (yaw, pitch, roll) 来控制头部姿势。
  在推理阶段,经过训练的编码器和预测器可以灵活地合成具有受控属性的语音或基于语音驱动输入进行操作。详细结构如图3所示。我们的方法通过结合LSTM[15]来改进时间建模并引入头部位置和头部尺度等附加线索来扩展以前的工作[11,18]。架构在图 3 中详细说明。
  学习目标。总损失包括扩散损失和方差适配器损失,其中 K 表示属性的数量:
公式2
图3
图 3:方差适配器块。每个块对单个属性进行建模并且可以多次迭代,其中 N表示属性的数量。

4 EXPERIMENTS

4.1实验设置

  我们使用了三个数据集:VoxCeleb[30]、HDTF[59]和VFHQ[52]。由于这些数据集的处理方法不同,我们重新下载原始视频并以统一的方式处理它们。具体来说,我们的处理管道包括以极端角度过滤掉模糊的人脸和人脸。值得注意的是,我们没有对齐人脸,而是为每个视频剪辑使用固定的检测框,允许自然头部运动。这项工作产生了一个包含 4,4242 个独特的说话者 ID 的数据集,包括 17,108 个视频剪辑,累积持续时间为 55 小时。该过滤过程的详细信息在补充材料中提供。这些数据集中的每个视频都有一个唯一的面部 ID 标签,我们将其用作训练我们的身份编码器的标签。我们还保留了来自 HDTF 的一些视频进行测试,遵循 [58] 中的测试拆分。
  场景设置 我们在两个场景下评估方法:视频驱动和语音驱动,两者都以一次性为基础运行,只需要单个肖像。主要区别在于动画的来源:用于语音驱动场景的视频驱动和音频信号的图像序列。推理的详细数据流如图2所示。此外,每个场景分为两类:自驱动,源和目标共享相同的身份,交叉驱动,涉及不同的身份。在语音驱动的任务中,如果需要姿势信息,则从基本事实中提供。此外,对于我们的运动生成器,除非另有说明,否则我们使用一致的种子来生成所有结果。为了确保公平比较,所有算法的输出分辨率标准化为 256 × 256。
  实现细节 在训练动作表示时,我们的自我监督训练范式主要基于 LIA [49]。身份和动作编码器都使用 MLP。我们的训练目标使用 CLUB 1 进行互信息损失,以及 AAM-Softmax [46]。这种稳健的度量学习方法利用角距离并结合越来越多的负样本来增强度量学习损失。在第二阶段,语音编码器和动作生成器分别利用了四层和两层构象架构,灵感来自[11,25]。该体系结构集成了构象结构[16]和相对位置编码[6]。预训练的 HuBERT-large 模型 [20] 作为音频特征编码器,结合下采样层将音频采样率从 50 Hz 调整到 25 Hz,以与视频帧速率同步。音频生成过程的训练跨越 125 帧(5 秒)。补充材料中提供了详细的实现细节和模型结构。
  评价指标 对于客观指标,我们利用峰值信噪比(PSNR)、结构相似性指数(SSIM)[50]和学习感知图像补丁相似度(LPIPS)[56]来量化生成图像和地面真实图像之间的相似度。余弦相似度 (CSIM) 2 使用预训练的人脸识别测量面部相似度。Lip-sync Error Distance (LSE-D) [5] 评估生成的嘴唇运动和相应音频之间的对齐。关于主观指标,我们使用平均意见评分 (MOS) 作为我们的指标,10 名参与者根据保真度 (F)、Lip-sync (LS)、自然性 (N) 和运动抖动 (MJ) 对我们的方法进行评分。

4.2 Video Driven Methods

表1
表 1:与以前的人脸重演方法的定量比较。
  定量结果 我们将我们的方法与几种领先的人脸重演方法 [31, 41, 44, 48 , 49 , 54]。结果如表1所示。由于交叉重演中固有的挑战和缺乏逐帧基本事实(使用另一个人的视频进行驾驶),与自我重演(使用当前人的视频)相比,总体结果往往较低。在自我重演中,我们的算法在 PSNR、SSIM 和 LPIPS 等图像结构指标上取得了优异的结果,验证了我们的运动表示在重建图像方面的有效性。此外,使用 CSIM 度量来衡量人脸相似度,我们观察到重建人脸与原始肖像之间的相似度第二高,略低于 MTIA [44],说明了我们模型的身份保存能力。对于交叉重演,其中肖像用作基本事实并考虑交叉驱动的变形,我们专注于高级指标:SSIM 和 LPIPS。我们的方法展示了值得称赞的性能。我们还评估了 CSIM,与自我重演不同,它显示出显着的改进,在这些数据集中取得了最好的结果。这突出了我们的算法在不同个体驾驶时解开身份和运动具有出色的能力。
  定性结果 为了突出比较结果,我们对不同的算法进行了交叉重演场景分析,如图 4 所示。目标是使用目标的动作变形源肖像。图中的每一行代表一个驾驶案例。我们观察到基线方法表现出不同程度的身份泄漏,其中来自目标的身份信息污染了源肖像的身份。例如,如第四行所示,驾驶肖像的细面部结构导致纤细的结果,这是意想不到的。然而,我们的结果始终保留了面部身份。此外,在表达式恢复方面,如第一行和第三行所示,我们的方法准确地复制了在源肖像中打开眼睛的动作,创建了一组自然的眼睛。相比之下,其他算法要么产生轻微的睁眼或不自然的眼睛。这些定性发现突出了解耦能力的优势。
图4

4.3 Speech-driven Methods

  我们将我们的方法与现有的最先进的语音驱动方法进行比较,包括 MakeItTalk [62]、PC-AVS [61]、Audio2Head [47] 和 SadTalker [57]。定量结果如表2所示。从主观评价来看,我们的方法一致地显示了保真度、口型同步精度、自然度和运动抖动的减少,特别是在运动自然度的增强方面。这些进步可以归因于我们复杂的通用运动表示。客观评估涉及用音频驱动图像。
表2
表 2:与以前的语音驱动方法的定量比较。主观评价是根据保真度 (F)、Lip-Sync (LS)、Naturalness (N) 和 Motion Jittering (MJ) 在五个等级 (1-5) 下评分的平均选项分数 (MOS)。
  与这些方法相比,我们的方法在 SSIM 和 CSIM 方面显示出显着改进。然而,我们的 Sync-D 指标显示出减少,我们认为这是由于两个主要原因:(1)我们不使用该指标作为监督信号,(2)Sync-D 指标侧重于短期对齐,并不能充分表示对生成视频的可理解性更重要的长期信息。图 5 所示的定性结果也证实了这一点,突出了我们的模型能够为给定的语音声音产生令人信服地同步的嘴唇运动。
图5
图 5:语音驱动方法在自驱动和跨驱动场景中的视觉比较。音标以红色突出显示。

4.4 Ablation Study

4.4.1解纠缠消融。

  为了进一步验证我们在运动和身份之间解开的有效性,我们使用各种方法进行了测试。最初,为了评估仅使用没有互信息解缠结 (MID) 的度量学习 (ML) 开发可靠身份编码器的性能,我们评估了 Triplet 损失 [10] 和 AAM-Softmax [46]。我们的结果表明,AAM-Softmax 是一种基于角度的度量,在我们的实验中取得了优异的结果。此外,通过将互信息解耦模块与 AAM-Softmax 相结合,我们注意到结果有进一步的改进。这种增强鼓励运动编码器只关注与运动相关的信息。这些发现在表 3 中全面详细说明。
表3
表 3:Self-Reenactment 设置中解缠结方法和 HAL 模块的定量比较

4.4.2运动表征消融研究。

  为了将我们的运动表示与常用的地标和3D可变形模型(3DMM)表示进行比较,我们使用了68个2D坐标22来表示地标,并使用EMOCA[7]中的表情参数(50维)来表示3DMM。在自我重演场景中,所有渲染方法都保持一致,不同的特征用于生成驱动图像。我们观察到几个关键点:(1)如表 4 所示,我们学习的表示表现出更紧凑的维度,表明面部动态的编码更加简洁。(2) 我们的视频比较表明,与这些显式表示不同,我们的隐式运动表示保持了帧稳定性,而不需要额外的平滑。这可以归因于我们对相邻帧进行采样的自我监督训练策略,该策略有效地捕获了细微的动态变化,同时固有地确保了时间稳定性。
表4
表 4:自我重演设置下的不同中间表示。“Face Repr.”是人脸表示的缩写,“Dim.”表示相应的维度。

4.4.3 HAL 上的消融。

  为了探索层次聚合层 (HAL) 在动态表示中的重要性,我们对 HAL 层进行了一系列消融实验。结果表明,结合 HAL 层的模型表现出性能改进,如表 3 的最后一行所示。为了分析不同 HAL 层对运动表示的影响和重要性,我们提取并检查了图像编码器中每一层的 softmax 归一化权重(在我们的实验中总共 8 层),如图 6 所示。发现最后一层的权重贡献最为显着,可能是因为它代表了可以有效恢复大多数运动信息的全局特征。值得注意的是,第四层——位于图像编码器特征图的中间——显示出局部最大值。考虑到该层补丁的感受野大小与眼睛的大小相似,嘴巴的大小约为一半,这一发现表明该层在模拟嘴巴和眼睛等区域方面发挥着潜在的作用。这些结果不仅证实了 HAL 层在动态表示中的关键作用,而且还揭示了模型捕捉不同尺度面部动作的能力的深层机制。
图6
图6:图像编码器不同层的运动表示权重。

5 DISCUSSION

  关于通用动作表示的讨论 我们对模型对面部动态进行编码的能力的调查突出了人类面部运动的普遍表示。如图 7 所示,我们观察到不同的个体在我们的运动空间中的每个点保持一致的姿势和表情(例如左转、同音字说话和闭眼),这表明我们的运动空间形成了一个运动流形。该流形有助于连续动作空间的表示,从而能够精确建模细微的面部特征变化并允许平滑过渡。此外,通过扩散噪声集成扰动,我们的模型可以模拟与基本运动模式对齐的随机、微小的运动变化,从而增强生成表达式的多样性。这些发现表明,我们的动作表示具有强大的捕捉和表示广泛的人类面部动作的能力。
  泛化能力的讨论 虽然我们的模型是在真实的人脸上训练的,但它展示了泛化到具有面部结构的其他图像的能力,例如卡通、雕塑、救济和游戏角色。这强调了模型出色的可扩展性。我们主要将这种能力归因于身份和运动的完全解耦,这确保了模型掌握面部动作的内在性质,从而增强其泛化能力。

6 CONCLUSION

  AniTalker 框架代表了创建类似生命的谈话化身的重大进步,解决了数字人类动画中细粒度和通用的运动表示的需求。通过整合自监督通用运动编码器并使用度量学习和互信息解纠缠等复杂技术,AniTalker有效地捕捉了语言和非语言面部动态的微妙之处。生成的框架不仅在面部动画中实现了增强的真实感,而且还展示了跨不同身份和媒体的强大泛化能力。AniTalker 为数字人脸的逼真和动态表示设定了一个新的基准,在娱乐、交流和教育方面具有广泛的应用前景。
  限制和未来的工作 虽然 AniTalker 在概括运动动力学方面显示出希望,但它仍然面临挑战。我们的渲染网络单独生成帧,这可能导致复杂背景的不一致。此外,受限于翘曲技术的性能,人脸移动到大角度的极端情况可能会导致边缘出现明显的模糊。未来的工作将集中在提高渲染模块的时间相干性和渲染效果。
图7
图7:连续运动空间的动作流形。

原文与代码链接

github代码调试

  1. 获取github项目:
    git clone https://github.com/X-LANCE/AniTalker.git
  2. 创建环境
conda create -n anitalker python==3.9.0
conda activate anitalker
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
pip install -r requirements.txt

pip install -r requirements.txt时安装pytorch-lightning==1.6.5的时候,可能会出现问题,如图
在这里插入图片描述
因此,我们将requirements.txt中的pytorch-lightning==1.6.5改成稍微新一点的pytorch-lightning==1.8.6,此时系统会连带给我们安装torch==1.12.1与之前的torchvision==0.9.0 torchaudio==0.8.0不兼容,因此我们需要配套安装torchvision==0.13.1 torchaudio==0.12.1,代码如下:

pip install pytorch_lightning==1.8.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
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 -i https://pypi.tuna.tsinghua.edu.cn/simple

同时,我们需要修改requirements.txt中的torchmetrics==0.5.0torchmetrics==0.7.0。即requirements.txt改为:

pytorch-lightning==1.8.6
torchmetrics==0.7.0
torch==1.8.0
torchvision
scipy==1.5.4
numpy==1.19.5
tqdm==4.66.4
espnet==202301
moviepy==1.0.3
python_speech_features
transformers==4.19.2

此外,还需要安装其他的库:

pip install facexlib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tb-nightly -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 下载权重
    huggingface链接:https://huggingface.co/taocode/anitalker_ckpts/tree/main
    百度云链接:https://pan.baidu.com/s/1gqTPmoJ3QwKbGkqgMXM3Jw?pwd=antk
    放到cpkts文件夹下,如图:
ckpts/
├── chinese-hubert-large
├──── config.json
├──── preprocessor_config.json
├──── pytorch_model.bin
├── stage1.ckpt
├── stage2_pose_only_mfcc.ckpt
├── stage2_full_control_mfcc.ckpt
├── stage2_audio_only_hubert.ckpt
├── stage2_pose_only_hubert.ckpt
└── stage2_full_control_hubert.ckpt
  1. 推断
python ./code/demo.py \
    --infer_type 'hubert_audio_only' \
    --stage1_checkpoint_path 'ckpts/stage1.ckpt' \
    --stage2_checkpoint_path 'ckpts/stage2_audio_only_hubert.ckpt' \
    --test_image_path 'test_demos/portraits/monalisa.jpg' \
    --test_audio_path 'test_demos/audios/monalisa.wav' \
    --test_hubert_path 'test_demos/audios_hubert/monalisa.npy' \
    --result_path 'outputs/monalisa_hubert/' 

生成的视频太模糊了,我们需要在最后面加上--face_sr,如下:

python ./code/demo.py \
    --infer_type 'hubert_audio_only' \
    --stage1_checkpoint_path 'ckpts/stage1.ckpt' \
    --stage2_checkpoint_path 'ckpts/stage2_audio_only_hubert.ckpt' \
    --test_image_path 'test_demos/portraits/monalisa.jpg' \
    --test_audio_path 'test_demos/audios/monalisa.wav' \
    --test_hubert_path 'test_demos/audios_hubert/monalisa.npy' \
    --result_path 'outputs/monalisa_hubert/' \
    --face_sr

你需要下载gfpgan :

pip install gfpgan -i https://pypi.tuna.tsinghua.edu.cn/simple

让你喜欢的角色给你唱歌

  1. 下载你喜欢的角色的图片(避免出现问题,请高和宽保持一致,且人物脸部占主要部分,图片要改成纯英文)
    请添加图片描述
    2.下载你想要听的音乐(选择英文歌曲,这里我选择在网易云下载,发现是flac类型的,改成英文名字,如Lalala.flac)

在这里插入图片描述
3.上传至我的文件夹,如myfile

在这里插入图片描述
4.推理

python ./code/demo.py     --infer_type 'hubert_audio_only'     --stage1_checkpoint_path 'ckpts/stage1.ckpt'     --stage2_checkpoint_path 'ckpts/stage2_audio_only_hubert.ckpt'     --test_image_path 'myfile/giegie.png'     --test_audio_path 'myfile/Lalala.flac'     --test_hubert_path 'myfile/Lalala.npy'     --result_path 'myfile' --face_sr

5.效果展示

起猛了,哥哥给我唱赛马娘!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值