DreamTalk: 当富有表现力的说话头生成
遇上扩散概率模型
DreamTalk是一个基于扩散模型的音频驱动富有表现力的说话头生成框架,可以在各种说话风格中生成高质量的说话头视频。DreamTalk在各种输入下表现出强大的性能,包括歌曲、多语言演讲、噪声音频和域外肖像。
新闻
- [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
下载检查点
考虑到社会影响,我们已停止公开下载检查点。如果您想获取检查点,请发送邮件至mayf18@mails.tsinghua.edu.cn申请。请注意,发送此邮件即表示您同意仅将提供的方法用于学术研究目的。
将下载的检查点放入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。此外,用于头部姿势参考的视频应首先使用FOMM视频预处理中的脚本裁剪为256×256。
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 ,diffusion-point-cloud ,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}
}
免责声明
本方法仅用于研究/非商业用途。