文章目录
- AniPortrait翻译
- Abstract
- Introduction
- 2 Method
- 2.1 Audio2Lmk
- 2.2 Lmk2Video
- 3 Experiments
- 3.1 Implementation Details
- 3.2 Results
- 代码调试
- 1 下载github项目
- 2 配置环境
- 3 下载包
- 4 下载权重
- 5 推断
AniPortrait翻译
AniPortrait:照片逼真肖像动画的音频驱动合成
paper:https://arxiv.org/abs/2403.17694
github: https://github.com/Zejun-Yang/AniPortrait
Abstract
在这项研究中,我们提出了一种生成由音频和参考肖像图像驱动的高质量动画的新框架 AniPortrait。我们的方法分为两个阶段。最初,我们从音频中提取 3D 中间表示并将它们投影到一系列 2D 面部标志中。随后,我们采用鲁棒扩散模型,结合运动模块,将地标序列转换为逼真且时间一致的肖像动画。实验结果表明,AniPortrait在面部自然度、姿势多样性和视觉质量方面的优越性,从而增强了感知体验。此外,我们的方法在灵活性和可控性方面显示出巨大的潜力,可以有效地应用于面部运动编辑或面部重演等领域。我们在 https://github.com/Zejun-Yang/AniPortrait 上发布代码和模型权重。
Introduction
从音频和静态图像创建逼真且富有表现力的肖像动画具有广泛的应用,从虚拟现实和游戏到数字媒体。然而,产生视觉上吸引和维护时间一致性的高质量动画是一个巨大的挑战。这种复杂性源于需要复杂的协调嘴唇运动、面部表情和头部位置来制作视觉上引人注目的效果。
现有的方法在克服这一挑战方面往往不足,主要是由于它们依赖于有限容量的生成器来创建视觉内容,如GANs[3,17]、NeRF[14,13]或基于运动的解码器[16,8]。这些网络的泛化能力有限,在生成高质量内容时往往缺乏稳定性。最近,扩散模型的出现[2,5,9]促进了高质量图像的生成。一些研究通过结合时间模块来构建这一点,使扩散模型能够在创建引人注目的视频方面表现出色。
基于扩散模型的进步,我们引入了 AniPortrait,这是一个新颖的框架,旨在生成由音频和参考图像驱动的高质量动画肖像。AniPortrait 分为两个不同的阶段。在第一阶段,我们使用基于转换器的模型从音频输入中提取一系列 3D 面部网格和头部姿势,然后将其投影到一系列 2D 面部标志中。除了与音频节奏同步的头部动作外,该阶段还能够从音频中捕获微妙的表情和嘴唇运动。在随后的阶段,我们利用鲁棒扩散模型[9],与运动模块[4]集成,将面部地标序列转换为时间一致和逼真的动画肖像。具体来说,我们利用一种有效的扩散模型Stable Diffusion 1.5的AnimateAnyone[6]的网络架构,基于身体运动序列和参考图像生成流体和类似生命的视频。特别值得注意的是,我们重新设计了该网络中的姿势引导器模块。这种修改不仅保持了轻量级的设计,而且在生成嘴唇运动方面表现出更高的精度。
我们的实验结果表明,AniPortrait 在创建具有令人印象深刻的面部自然度、不同姿势和出色的视觉质量的动画方面的优越性。通过使用 3D 面部表示作为中间特征,我们获得了根据需要修改这些表示的灵活性。这种适应性极大地增强了我们的框架在面部运动编辑和面部重现等领域的适用性。
2 Method
所提出的框架包括两个模块,即 Audio2Lmk 和 Lmk2Video。前者旨在提取一系列地标,从音频输入中捕获复杂的面部表情和嘴唇运动。后者利用这个地标序列生成高质量的人像视频,具有时间稳定性。我们在图 1 中展示了框架的概述,并提供了更多细节。
图1。所提方法概述。我们的框架分为两个阶段。首先,我们从音频中提取3D人脸网格和头部姿势,然后将这两个元素投影到2D关键点中。在第二阶段,我们利用扩散模型将二维关键点转换为人像视频。这两个阶段在我们的框架中同时训练。
2.1 Audio2Lmk
令
A
1
:
T
A^{1:T}
A1:T =(
a
1
,
.
.
.
,
a
T
a^{1}, . . . , a^{T}
a1,...,aT ) 表示一系列语音片段,我们的目标是预测相应的 3D 面部网格序列
M
1
:
T
M^{1:T}
M1:T =(
m
1
,
.
.
.
,
m
T
m^{1}, . . . , m^{T}
m1,...,mT ) ,其中每个
m
t
m^{t}
mt ∈
R
N
×
3
R^{N ×3 }
RN×3和姿势序列
P
1
:
T
P^{1:T}
P1:T =(
p
1
,
.
.
.
,
p
T
p^{1}, . . . , p^{T}
p1,...,pT ) ,每个
p
t
,
p^{t},
pt,是一个 6 维向量,表示旋转和平移。
我们采用预训练的wav2vec[1]来提取音频特征。该模型具有高度的泛化性,能够从音频中准确识别发音和语调,这在生成逼真的面部动画中起着关键作用。通过利用获得的鲁棒语音特征,我们可以有效地采用由两个 fc 层组成的简单架构,将这些特征转换为 3D 面部网格。我们观察到这种简单的设计不仅保证了准确性,而且提高了推理过程的效率。
在将音频转换为姿势的任务中,我们使用与主干相同的 wav2vec 网络。但是,我们不会与音频到网格模块共享权重。这是因为姿势与音频中存在的节奏和语气更密切相关,与音频到网格任务相比,这是一个不同的重点。为了解决先前状态的影响,我们使用 Transformer[11] 解码器来解码姿势序列。在此过程中,使用交叉注意机制将音频特征集成到解码器中。对于上述两个模块,我们使用简单的 L1 损失对它们进行训练。在获得网格和姿态序列后,我们使用透视投影将它们转换为二维面部地标序列。这些地标随后被用作下一阶段的输入信号。
2.2 Lmk2Video
给定一个参考肖像图像,表示为
I
r
e
f
I_{ref}
Iref ,以及表示为$ L^{1:T}$ = (
l
1
,
.
.
.
,
l
T
l^{1}, . . . , l^{T}
l1,...,lT ) 的面部标志序列。
l
1
,
.
.
.
,
l
T
l^{1}, . . . , l^{T}
l1,...,lT其中每个
l
t
l^{t}
lt ∈
R
N
×
2
R^{N ×2}
RN×2,我们提出的 Lmk2Video 模块创建了一个时间一致的肖像动画。这个动画将运动与地标序列对齐,并保持与参考图像一致的外观。我们将肖像动画表示为一系列肖像帧,表示为I^{1:T}$ = (
I
1
,
.
.
.
,
I
T
I^{1}, . . . , I^{T}
I1,...,IT ) 庇护。
Lmk2Video的网络结构的设计灵感来自AnimateAnyone。我们利用SD1.5作为骨干,结合时间运动模块,有效地将多帧噪声输入转换为视频帧序列。同时,使用反映SD1.5结构的RefNet从参考图像中提取外观信息并将其集成到主干中。这种战略设计确保面部 ID 在整个输出视频中保持一致。与 AnimateAnyone 不同,我们增强了 PoseGuider 设计的复杂性。原始版本仅包含几个卷积层,之后地标特征与主干输入层的潜在特征合并。我们发现这种基本设计未能捕捉到嘴唇的复杂运动。因此,我们采用ControlNet[15]多尺度策略,将相应尺度的地标特征合并到主干的不同块中。尽管有这些增强功能,我们成功地将参数计数保持在相对较低的水平。
我们还引入了一个额外的改进:将参考图像的地标作为额外的输入。PoseGuider 的交叉注意模块有助于参考地标和每一帧的目标地标之间的交互。这个过程为网络提供了额外的线索来理解面部标志和外观之间的相关性,从而帮助生成具有更精确运动的肖像动画的生成。
3 Experiments
3.1 Implementation Details
在Audio2Lmk阶段,我们采用wav2vec2.0作为骨干。我们利用MediaPipe[7]提取3D网格和6D姿势进行注释。Audio2Mesh 的训练数据来自我们的内部数据集,该数据集包含来自单个说话者的近小时高质量语音数据。为了确保MediaPipe提取的3D网格的稳定性,我们指示参与者在整个记录过程中保持稳定的头部位置,面对相机。我们使用HDTF[18]训练Audio2Pose。所有训练操作都在单个 A100 上执行,使用学习率为 1e-5 的 Adam 优化器。
在 Lmk2Video 过程中,我们实现了两步训练方法。在初始步骤中,我们专注于训练主干、RefNet 和 PoseGuider 的 2D 组件,留下运动模块。在随后的步骤中,我们冻结所有其他组件并专注于运动模块的训练。我们利用两个大规模、高质量的人脸视频数据集VFHQ[12]和CelebV-HQ[19]来训练模型。所有数据都经过MediaPipe处理,以提取2D面部地标。为了提高网络对嘴唇运动的敏感性,我们在将姿势图像与 2D 地标渲染时,用不同的颜色区分上唇和下唇。所有图像都被调整为 512x512 分辨率。我们利用 4 个 A100 GPU 进行模型训练,将两天专门用于每个步骤。采用AdamW优化器,学习率为1e-5。
3.2 Results
如图 2 所示,我们的方法生成了一系列在质量和真实感上都惊人的动画。我们利用中间 3D 表示,可以对其进行编辑以操纵最终输出。例如,我们可以从源中提取地标并改变其 ID,从而使我们能够创建面部重演效果。
4 Conclusion and Future Work
本研究提出了一种基于扩散模型的人像动画框架。该框架通过简单地输入音频剪辑和参考图像,能够生成具有平滑嘴唇运动和自然头部运动的肖像视频。利用扩散模型的鲁棒泛化能力,该框架创建的动画显示出令人印象深刻的逼真图像质量和令人信服的逼真运动。然而,这种方法需要使用中间的 3D 表示,获得大规模、高质量的 3D 数据的成本非常高。因此,生成的肖像视频中的面部表情和头部姿势无法逃脱恐怖谷效应。未来,我们计划遵循 EMO[10] 的方法,直接从音频预测肖像视频,以实现更令人惊叹的生成结果。
代码调试
1 下载github项目
https://github.com/Zejun-Yang/AniPortrait.git
2 配置环境
conda create -n aniportrait python=3.10
conda activate aniportrait
3 下载包
pip install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
4 下载权重
所有权重都应放在 ./pretrained_weights 目录下。您可以按以下方式手动下载权重:
(1) 下载我们训练好的权重,其中包括以下部分:denoising_unet.pth、reference_unet.pth、pose_guider.pth、motion_module.pth、audio2mesh.pt、audio2pose.pt 和 film_net_fp16.pt。您也可以从 wisemodel 下载。
因为hugging face比较慢,我选择在gitee中下载,进入gitee,搜索AniPortrait,选择第一个Hugging Face 模型镜像/ AniPortrait
,点击克隆/下载,复制以下命令:
git clone https://gitee.com/hf-models/AniPortrait.git
(2) 下载基于模型和其他组件的预训练权重:
- StableDiffusion V1.5
- sd-vae-ft-mse
- image_encoder
- wav2vec2-base-960h
(3) 最后,应将这些权重放置如下:
./pretrained_weights/
|-- image_encoder
| |-- config.json
| `-- pytorch_model.bin
|-- sd-vae-ft-mse
| |-- config.json
| |-- diffusion_pytorch_model.bin
| `-- diffusion_pytorch_model.safetensors
|-- stable-diffusion-v1-5
| |-- feature_extractor
| | `-- preprocessor_config.json
| |-- model_index.json
| |-- unet
| | |-- config.json
| | `-- diffusion_pytorch_model.bin
| `-- v1-inference.yaml
|-- wav2vec2-base-960h
| |-- config.json
| |-- feature_extractor_config.json
| |-- preprocessor_config.json
| |-- pytorch_model.bin
| |-- README.md
| |-- special_tokens_map.json
| |-- tokenizer_config.json
| `-- vocab.json
|-- audio2mesh.pt
|-- audio2pose.pt
|-- denoising_unet.pth
|-- film_net_fp16.pt
|-- motion_module.pth
|-- pose_guider.pth
`-- reference_unet.pth
5 推断
Gradio Web UI
python -m scripts.app
Audio driven:
python -m scripts.audio2vid --config ./configs/prompts/animation_audio.yaml -W 512 -H 512 -acc