综合介绍
AniPortrait是一个由音频驱动生成逼真的肖像动画的创新框架。该项目由腾讯游戏知己实验室的华为伟、杨泽俊和王志声开发。AniPortrait能够通过音频和参考肖像图像生成高质量的动画,甚至可以提供视频进行面部重现。通过使用先进的3D中间表示和2D面部动画技术,该框架能够生成自然流畅的动画效果,适用于影视制作、虚拟主播和数字人等多种应用场景。
功能列表
- 音频驱动动画:通过音频输入生成对应的肖像动画。
- 视频驱动动画:提供视频进行面部重现,生成逼真的面部动画。
- 高质量动画生成:使用3D中间表示和2D面部动画技术,生成高质量的动画效果。
- 网络界面演示:通过Gradio Web UI提供在线演示,方便用户体验。
- 模型训练与推理:支持模型的训练与推理,用户可以自定义数据进行训练和生成。
使用帮助
安装
环境搭建
推荐使用Python版本>=3.10和CUDA版本=11.7。按照以下步骤搭建环境:
pip install -r requirements.txt
下载权重
所有权重文件应放置在./pretrained_weights
目录下。手动下载权重文件如下:
- 下载训练好的权重,包括以下部分:
denoising_unet.pth
、reference_unet.pth
、pose_guider.pth
、motion_module.pth
等。 - 下载基础模型和其他组件的预训练权重:
- StableDiffusion V1.5
- sd-vae-ft-mse
- image_encoder
- wav2vec2-base-960h
权重文件结构组织如下:
./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
Gradio Web UI
通过以下命令尝试我们的网络演示。我们还提供了在线演示。
python -m scripts.app
推理
请注意,可以在命令中设置-L
为所需的生成帧数,例如-L 300
。
加速方法:如果生成视频时间过长,可以下载film_net_fp16.pt并放置在./pretrained_weights
目录下。
以下是运行推理脚本的CLI命令:
自驱动
python -m scripts.pose2vid --config ./configs/prompts/animation.yaml -W 512 -H 512 -acc
可以参考animation.yaml
格式添加自己的参考图像或姿态视频。将原始视频转换为姿态视频(关键点序列),可以运行以下命令:
python -m scripts.vid2pose --video_path pose_video_path.mp4
面部重现
python -m scripts.vid2vid --config ./configs/prompts/animation_facereenac.yaml -W 512 -H 512 -acc
在animation_facereenac.yaml
中添加源面部视频和参考图像。
音频驱动
python -m scripts.audio2vid --config ./configs/prompts/animation_audio.yaml -W 512 -H 512 -acc
在animation_audio.yaml
中添加音频和参考图像。删除animation_audio.yaml
中的pose_temp
可以启用audio2pose模型。您还可以使用此命令生成用于头部姿态控制的pose_temp.npy
:
python -m scripts.generate_ref_pose --ref_video ./configs/inference/head_pose_temp/pose_ref_video.mp4 --save_path ./configs/inference/head_pose_temp/pose.npy
训练
数据准备
下载VFHQ和CelebV-HQ。从原始视频中提取关键点并编写训练json文件(以下是处理VFHQ的示例):
python -m scripts.preprocess_dataset --input_dir VFHQ_PATH --output_dir SAVE_PATH --training_json JSON_PATH
在训练配置文件中更新行:
data:
json_path: JSON_PATH
阶段1
运行命令:
accelerate launch train_stage_1.py --config ./configs/train/stage1.yaml
阶段2
将预训练的运动模块权重mm_sd_v15_v2.ckpt
(下载链接)放置在./pretrained_weights
目录下。在stage2.yaml
配置文件中指定阶段1的训练权重,例如:
stage1_ckpt_dir: './exp_output/stage1'
stage1_ckpt_step: 30000
运行命令:
accelerate launch train_stage_2.py --config ./configs/train/stage2.yaml