Up主已经开始鬼畜,腾讯开源「AniPortrait」让照片唱歌说话
「小破站鬼畜区的新质生产力工具。」
近日,腾讯开源发布的一个新项目在推上获得了如此评价。这个项目是 AniPortrait,其可基于音频和一张参考图像生成高质量动画人像。
该项目刚上线几天,就已经收获了广泛好评:GitHub Star 数已经突破 2800。
下面我们来看看 AniPortrait 的创新之处。
- 论文标题:AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animation
- 论文地址:https://arxiv.org/pdf/2403.17694.pdf
- 代码地址:https://github.com/Zejun-Yang/AniPortrait
AniPortrait
腾讯新提出的 AniPortrait 框架包含两个模块:Audio2Lmk 和 Lmk2Video。
Audio2Lmk 的作用是提取 Landmark 序列,其能从音频输入捕获复杂的面部表情和嘴唇动作。Lmk2Video 是利用这种 Landmark 序列来生成时间上稳定一致的高质量人像视频。
图 1 给出了 AniPortrait 框架的概况。
Audio2Lmk
对于一段语音片段序列,这里的目标是预测对应的 3D 人脸网格序列和姿势序列。
该团队采用了预训练的 wav2vec 来提取音频特征。该模型具有很好的泛化性能,并且可以准确识别音频中的发音和语调 —— 这对生成具有真实感的人脸动画来说至关重要。通过利用所获得的鲁棒的语音特征,使用一种包含两个 fc 层的简单架构就可以有效地将它们转换成 3D 人脸网格。该团队观察到,这种简单直接的设计不仅能确保准确度,而且还能提升推理过程的效率。
在将音频转换成姿势的任务中,该团队使用的骨干网络依然是同样的 wav2vec。但是,这一个网络的权重不同于音频到网格模块的网络。这是因为:姿势与音频中的节奏和音调的关联更加紧密,而音频到网格任务关注的重点(发音和语调)却不一样。为了将之前状态的影响纳入考量,该团队采用了一个 transformer 解码器来解码姿势序列。在这个过程中,该模块使用交叉注意力机制将音频特征整合进解码器。对于上述两个模块,训练使用的损失函数都是简单的 L1 损失。
在获得了网格和姿势序列之后,再使用透视投影将它们转换为 2D 的人脸 Landmark 序列。这些 Landmark 是下一阶段的输入信号。
Lmk2Video
给定一张参考人像和一个人脸 Landmark 序列,该团队提出的 Lmk2Video 可以创建具有时间一致性的人像动画。这个动画过程是将动作与 Landmark 序列对齐,同时维持与参考图像一致的外观。该团队采取的思路是将人像动画表示成一个人像帧构成的序列。
Lmk2Video 的这种网络结构设计的灵感来自 AnimateAnyone。其中的骨干网络是 SD1.5,其整合了一个时间运动模块,能有效地将多帧噪声输入转换成一个视频帧序列。
另外,他们还使用了一个 ReferenceNet,其同样采用了 SD1.5 的结构,作用是提取参考图像的外观信息并将其整合进骨干网络中。这一策略设计可确保人脸 ID 在整个输出视频中保持一致。
不同于 AnimateAnyone,这里提升了 PoseGuider 的设计的复杂性。原来的版本只是集成了几个卷积层,之后 Landmark 特征与骨干网络的输入层的隐含特征融合。而腾讯的这个团队发现,这种初级设计无法捕获嘴唇的复杂运动。因此,他们采用了 ControlNet 的多尺度策略:将相应尺度的 Landmark 特征整合进骨干网络的不同模块。尽管有这些改进,但最终模型的参数数量依然相当低。
该团队还引入了另一项改进:将参考图像的 Landmark 用作一个额外的输入。PoseGuider 的交叉注意力模块能促进参考 Landmark 和每一帧的目标 Landmark 之间的互动。这一过程能为网络提供额外的线索,使其能够理解人脸 Landmark 和外观之间的关联,由此可帮助人像动画生成更精准的动作。
实验
实现细节
Audio2Lmk 阶段使用的骨干网络是 wav2vec2.0。用于提取 3D 网格和 6D 姿势的工具是 MediaPipe。Audio2Mesh 的训练数据来自腾讯的内部数据集,其中包含接近一个小时的来自单个说话人的高质量语音数据。
为了确保 MediaPipe 提取出的 3D 网格的稳定性,在记录期间,表演者头部位置稳定并且面向相机。训练 Audio2Pose 使用的是 HDTF。所有的训练操作都在单台 A100 上执行,使用了 Adam 优化器,学习率设置为 1e-5.
Lmk2Video 过程则采用了一种两步式训练方法。
起始步骤阶段关注的重点是训练骨干网络 ReferenceNet 以及 PoseGuider 的 2D 组件,而不管运动模块。在后续步骤,则会冻结其它所有组件,专注于训练运动模块。为了训练模型,这里使用了两个大规模高质量人脸视频数据集:VFHQ 和 CelebV-HQ。所有数据都经由 MediaPipe 来提取 2D 人脸 Landmark。为了提升网络对嘴唇运动的敏感性,该团队的做法是在根据 2D Landmark 渲染姿势图像时,给上下唇标注不同的颜色。
所有图像的分辨率都重新调整成了 512x512。该模型的训练使用了 4 台 A100 GPU,每一步都耗时 2 天。优化器是 AdamW,学习率固定为 1e-5。
实验结果
如图 2 所示,新方法得到的动画在质量和真实度上都非常出色。
此外,用户还可以编辑其中间的 3D 表征,从而对最终输出进行修改。举个例子,用户可从某个源提取 Landmark 并修改其 ID 信息,从而实现面部重现效果。
更多细节请参考原论文。
本文转自 机器之心 ,作者:机器之心