DreamTalk:当富有表现力的说话头像生成
遇到扩散概率模型

teaser

DreamTalk 是一种基于扩散的音频驱动的富有表现力的头像生成框架,可以生成跨不同说话风格的高质量头像视频。DreamTalk 在各种输入上表现出强大的性能,包括歌曲、多种语言的语音、嘈杂的音频和域外肖像。

消息

  • [2024.01] fffiloni提供了 HuggingFace Space 。谢谢~
  • [2023.12]发布推理代码和预训练检查点。

安装

conda create -n dreamtalk python=3.7.0
conda activate dreamtalk
pip install -r requirements.txt
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
conda update ffmpeg

pip install urllib3==1.26.6
pip install transformers==4.28.1
pip install dlib

下载检查点

下载去噪网络和渲染器的检查点:

  • 抱脸
  • ModelScope(在checkpoints文件夹中)

将下载的检查点放入checkpoints文件夹中。

推理

运行脚本:

python inference_for_demo_video.py 
--wav_path data/audio/acknowledgement_english.m4a 
--style_clip_path data/style_clip/3DMM/M030_front_neutral_level1_001.mat 
--pose_path data/pose/RichardShelby_front_neutral_level1_001.mat 
--image_path data/src_img/uncropped/male_face.png 
--cfg_scale 1.0 
--max_gen_len 30 
--output_name acknowledgement_english@M030_front_neutral_level1_001@male_face

wav_path指定输入音频。输入音频文件扩展名(例如 wav、mp3、m4a 和 mp4(带声音的视频))应全部兼容。

style_clip_path指定参考说话风格并pose_path指定头部姿势。它们是从参考视频中提取的 3DMM 参数序列。您可以按照PIRenderer从您自己的视频中提取 3DMM 参数。请注意,视频帧速率应为 25 FPS。此外,用于头部姿势参考的视频应首先裁剪为256×256在FOMM 视频预处理中使用脚本。

image_path指定输入肖像。其分辨率应大于256×256。正面肖像,脸部直接面向前方,而不是向一侧倾斜,通常可以获得令人满意的效果。输入的肖像将被裁剪为256×256。如果您的肖像已被裁剪为256×256如果您想禁用裁剪,请使用--disable_img_crop如下选项:

python inference_for_demo_video.py 
--wav_path data/audio/acknowledgement_chinese.m4a 
--style_clip_path data/style_clip/3DMM/M030_front_surprised_level3_001.mat 
--pose_path data/pose/RichardShelby_front_neutral_level1_001.mat 
--image_path data/src_img/cropped/zp1.png 
--disable_img_crop 
--cfg_scale 1.0 
--max_gen_len 30 
--output_name acknowledgement_chinese@M030_front_surprised_level3_001@zp1

cfg_scale控制无分类器指导的规模。它可以调整说话风格的强度。

max_gen_len是最大视频生成持续时间,以秒为单位。如果输入音频超过此长度,它将被截断。

生成的视频将被命名$(output_name).mp4并放入output_video文件夹中。中间结果(包括裁剪后的肖像)将位于该tmp/$(output_name)文件夹中。

示例输入显示在data文件夹中。由于版权问题,我们无法将我们使用过的歌曲包含在此文件夹中。

如果你想在CPU上运行这个程序,请添加--device=cpu到命令行参数。(感谢lukevs添加 CPU 支持。)

提高分辨率的临时解决方案

该方法的主要目标是实现准确的口型同步并在不同的说话风格中产生生动的表达。在最初的设计过程中并未考虑该分辨率。有两种临时解决方案可以提高分辨率。第一个选项是使用CodeFormer,它可以实现以下分辨率1024×1024; 然而,它的速度相对较慢,在 A100 GPU 上每秒只能处理一帧,并且存在时间不一致的问题。第二种选择是采用MetaPortrait的时间超分辨率模型,其分辨率为512×512,提供每秒 10 帧的更快性能,并保持时间一致性。然而,这些超分辨率模块可能会降低面部情绪的强度。

超分辨率处理后的样本结果在该output_video文件夹中。

致谢

我们对之前的作品为DreamTalk的发展做出的宝贵贡献表示衷心的感谢。这包括但不限于: PIRenderer 、AVCT 、StyleTalk 、Deep3DFaceRecon_pytorch 、Wav2vec2.0 、扩散点云 、FOMM 视频预处理。我们致力于推进这些基础性工作,并最大限度地尊重他们的原创贡献。

引文

如果您发现此代码库对您的研究有用,请使用以下条目。

@article{ma2023dreamtalk,
  title={DreamTalk: When Expressive Talking Head Generation Meets Diffusion Probabilistic Models},
  author={Ma, Yifeng and Zhang, Shiwei and Wang, Jiayu and Wang, Xiang and Zhang, Yingya and Deng, Zhidong},
  journal={arXiv preprint arXiv:2312.09767},
  year={2023}
}