Project Icon

EDTalk

高效解耦的情感说话头像合成框架

EDTalk是一个创新的情感说话头像合成框架,实现了口型、头部姿势和情感表情的高效解耦。该框架通过三个轻量级模块将面部动态分解为独立的潜在空间,使用可学习的基向量定义特定动作。EDTalk采用正交基向量和高效训练策略确保各组件的独立性,并开发了音频到动作模块支持音频驱动的头像合成。这一技术在视频和音频输入下都能实现精确的情感说话头像生成。

EDTalk

🚀 EDTalk:高效解耦的情感说话头像合成

谭帅1, 季斌1, 毕梦晓2, 潘烨1,

1上海交通大学
2网易伏羲人工智能实验室

ECCV 2024 口头报告



🎏 摘要

实现多个面部动作的解耦控制并适应多样化的输入模态,极大地增强了说话头像生成的应用和娱乐性。这需要对面部特征的解耦空间进行深入探索,确保它们a)独立运作而不相互干扰,b)可以保存以与不同模态输入共享 - 这两个方面在现有方法中常常被忽视。为了解决这一问题,本文提出了一种新颖的高效解耦说话头像生成框架(EDTalk)。我们的框架可以根据视频和音频输入,对口型、头部姿态和情感表情进行单独操控。具体来说,我们采用三个轻量级模块将面部动态分解成三个不同的潜在空间,分别代表口型、姿态和表情。每个空间都由一组可学习的基向量来表征,其线性组合定义了特定的动作。为了确保独立性并加速训练,我们在基向量之间强制正交,并设计了一种高效的训练策略,在不依赖外部知识的情况下分配动作责任到每个空间。然后将学习到的基向量存储在相应的库中,实现与音频输入的视觉先验共享。此外,考虑到每个空间的特性,我们提出了音频到动作模块用于音频驱动的说话头像合成。通过实验证明了EDTalk的有效性。

💻 概述



🔥 更新

  • 2024.08.12 - 🎉 我们的论文被选为口头报告。
  • 2024.08.09 - 💻 添加了针对特定人物微调的训练代码,以奥巴马为例。
  • 2024.08.06 - 🙏 我们希望更多人能参与进来,我们会及时处理pull request。目前还有一些任务需要帮助,例如创建colab notebook、改进web UI和翻译工作等。
  • 2024.08.04 - 🎉 添加gradio界面。
  • 2024.07.31 - 💻 添加可选的人脸超分辨率。
  • 2024.07.19 - 💻 发布数据预处理代码和部分训练代码(微调LIA & 口型-姿态解耦 & 音频到口型)。但我现在很忙,没有足够的时间整理所有代码,不过我认为目前的代码对于想要复现EDTalk或其他的人来说可以是一个有用的参考。如果遇到任何问题,欢迎提出issue!
  • 2024.07.01 - 💻 推理代码和预训练模型可用。
  • 2024.07.01 - 🎉 我们的论文被ECCV 2024接收。
  • 2024.04.02 - 🛳️ 本仓库发布。

📅 待办事项

  • 发布训练代码。
  • 发布推理代码。
  • 发布预训练模型。
  • 发布Arxiv论文。

🎮 安装

我们基于Python 3.8和Pytorch进行训练和测试。要安装依赖项,请运行:

git clone https://github.com/tanshuai0219/EDTalk.git
cd EDTalk

安装依赖

conda create -n EDTalk python=3.8
conda activate EDTalk
  • python包
pip install -r requirements.txt
  • Windows系统的python包
pip install -r requirements_windows.txt

感谢nitinmukesh提供Windows 11安装教程,欢迎关注他的频道!

python webui_emotions.py

🎬 快速开始

下载checkpoints/huggingface链接并将它们放入./ckpts。

[中文用户]可以通过这个链接下载权重。

EDTalk-A:口型+姿态+表情: 在音频驱动设置下运行演示(EDTalk-A):

为了用户友好,我们提取了表情基中八种常见情感的权重。可以直接指定情感来生成情感说话人脸视频(推荐)

python demo_EDTalk_A_using_predefined_exp_weights.py --source_path 图像路径 --audio_driving_path 音频路径 --pose_driving_path 姿态路径 --exp_type 表情类型 --save_path 保存路径

# 示例:
python demo_EDTalk_A_using_predefined_exp_weights.py --source_path res/results_by_facesr/demo_EDTalk_A.png --audio_driving_path test_data/mouth_source.wav --pose_driving_path test_data/pose_source1.mp4 --exp_type angry --save_path res/demo_EDTalk_A_using_weights.mp4

或者您可以输入一个表情参考(图像/视频)来指示表情。

python demo_EDTalk_A.py --source_path 图像路径 --audio_driving_path 音频路径 --pose_driving_path 姿态路径 --exp_driving_path 表情路径 --save_path 保存路径
# 示例:
python demo_EDTalk_A.py --source_path res/results_by_facesr/demo_EDTalk_A.png --audio_driving_path test_data/mouth_source.wav --pose_driving_path test_data/pose_source1.mp4 --exp_driving_path test_data/expression_source.mp4 --save_path res/demo_EDTalk_A.mp4

结果将保存在save_path中。

所使用的源路径和视频必须先使用脚本crop_image2.py(下载shape_predictor_68_face_landmarks.dat并将其放在./data_preprocess目录中)和crop_video.py进行裁剪。确保每个视频的帧率必须为25 fps

您也可以使用crop_image.py来裁剪图像,但increase_ratio需要仔细设置并多次尝试以获得最佳结果。


EDTalk-A:唇部+姿势,不含表情: 如果您不想改变身份源的表情,请下载EDTalk_lip_pose.pt并将其放入./ckpts目录。

如果您只想改变身份源的唇部动作,请运行

python demo_lip_pose.py --fix_pose --source_path 图像路径 --audio_driving_path 音频路径 --save_path 保存路径
# 示例:
python demo_lip_pose.py --fix_pose --source_path test_data/identity_source.jpg --audio_driving_path test_data/mouth_source.wav --save_path res/demo_lip_pose_fix_pose.mp4

或者您可以通过pose_driving_path在上述基础上额外控制头部姿势

python demo_lip_pose.py --source_path 图像路径 --audio_driving_path 音频路径 --pose_driving_path 姿势路径 --save_path 保存路径

# 示例:
python demo_lip_pose.py --source_path test_data/identity_source.jpg --audio_driving_path test_data/mouth_source.wav --pose_driving_path test_data/pose_source1.mp4 --save_path res/demo_lip_pose_fix_pose.mp4
源图像EDTalkEDTalk + liveprotrait

并通过驱动视频控制唇部动作。

python demo_lip_pose_V.py --source_path 图像路径 --audio_driving_path 音频路径 --lip_driving_path 嘴部路径 --pose_driving_path 姿势路径 --save_path 保存路径

# 示例:
python demo_lip_pose_V.py --source_path res/results_by_facesr/demo_lip_pose5.png --audio_driving_path test_data/mouth_source.wav --lip_driving_path test_data/mouth_source.mp4 --pose_driving_path test_data/pose_source1.mp4 --save_path demo_lip_pose_V.mp4
源图像demo_lip_pose_V 结果+ FaceSR

改变源视频的唇部动作,运行:

python demo_change_a_video_lip.py --source_path 视频路径 --audio_driving_path 音频路径 --save_path 保存路径

# 示例
python demo_change_a_video_lip.py --source_path test_data/pose_source1.mp4 --audio_driving_path test_data/mouth_source.wav --save_path res/demo_change_a_video_lip.mp4
源图像结果 #1结果 #2

在视频驱动设置下运行演示(EDTalk-V):

python demo_EDTalk_V.py --source_path 图像路径 --lip_driving_path 唇部路径 --audio_driving_path 音频路径 --pose_driving_path 姿势路径 --exp_driving_path 表情路径 --save_path 保存路径

# 示例:
python demo_EDTalk_V.py --source_path test_data/identity_source.jpg --lip_driving_path test_data/mouth_source.mp4 --audio_driving_path test_data/mouth_source.wav --pose_driving_path test_data/pose_source1.mp4 --exp_driving_path test_data/expression_source.mp4 --save_path res/demo_EDTalk_V.mp4

结果将保存在save_path中。

人脸超分辨率(可选)

☺️🙏 感谢Tao Liu的提议~

目的是将分辨率从256提升到512,并解决模糊渲染的问题。

请在此安装额外的环境:

pip install facexlib
pip install tb-nightly -i https://mirrors.aliyun.com/pypi/simple
pip install gfpgan

然后在您的脚本中启用--face_sr选项。第一次运行将下载gfpgan的权重(您也可以选择先下载gfpgan ckpts并将其放在gfpgan/weights目录中)。

以下是一些示例:

python demo_lip_pose.py --source_path 图像路径 --audio_driving_path 音频路径 --pose_driving_path 姿势路径 --save_path 保存路径 --face_sr

python demo_EDTalk_V.py --source_path 图像路径 --lip_driving_path 唇部路径 --audio_driving_path 音频路径 --pose_driving_path 姿势路径 --exp_driving_path 表情路径 --save_path 保存路径 --face_sr

python demo_EDTalk_A_using_predefined_exp_weights.py --source_path 图像路径 --audio_driving_path 音频路径 --pose_driving_path 姿势路径 --exp_type 表情类型 --save_path 保存路径 --face_sr
源图像EDTalk 结果EDTalk + FaceSR

🎬 针对特定人物进行微调

目前存在一些问题,我会仔细检查。请耐心等待! 注意:我们以奥巴马和我电脑上的路径(/data/ts/xxxxxx)为例,您应该替换成自己的路径:

  • AD-Nerf 下载奥巴马的数据并放在 '/data/ts/datasets/person_specific_dataset/AD-NeRF/video/Obama.mp4'

  • 裁剪视频并重采样为25帧每秒:

    python data_preprocess/crop_video.py --inp /data/ts/datasets/person_specific_dataset/AD-NeRF/video/Obama.mp4  --outp /data/ts/datasets/person_specific_dataset/AD-NeRF/video_crop/Obama.mp4 
    
  • 将视频保存为帧:

    ffmpeg -i /data/ts/datasets/person_specific_dataset/AD-NeRF/video_crop/Obama.mp4 -r 25 -f image2 /data/ts/datasets/person_specific_dataset/AD-NeRF/video_crop_frame/Obama/%4d.png
    
  • 开始训练:

    python train_fine_tune.py --datapath /data/ts/datasets/person_specific_dataset/AD-NeRF/video_crop_frame/Obama --only_fine_tune_dec
    

    将datapath改为您自己的数据路径。only_fine_tune_dec意味着只训练dec模块。根据我的经验,只训练dec可以提高图像质量,所以我们推荐这样做。您也可以将其设置为False,这意味着微调整个模型。您应该经常查看保存的样本(在exp_path/exp_name/checkpoint,在我的情况下,在:/data/ts/checkpoints/EDTalk/fine_tune/Obama/checkpoint),以及时找到最佳模型。

步骤 #0步骤 #100步骤 #200
第一行是源图像,第二行是驱动图像,第三行是生成的结果。

🎬 用于训练的数据预处理

用于训练的数据预处理 **注意**:提供的功能是可用的,但应调整它们的调用方式,例如修改数据路径。如果遇到任何问题,请随时留下您的问题! - 下载MEAD和HDTF数据集: 1) **MEAD**. [下载链接](https://wywu.github.io/projects/MEAD/MEAD.html)。
我们只使用*正面*视频并提取音频,按以下方式组织数据:

```text
/dir_path/MEAD_front/
|-- Original_video
|   |-- M003#angry#level_1#001.mp4
|   |-- M003#angry#level_1#002.mp4
|   |-- ...
|-- audio
|   |-- M003#angry#level_1#001.wav
|   |-- M003#angry#level_1#002.wav
|   |-- ...
```

2) HDTF. 下载链接

我们按以下方式组织数据:

```text
/dir_path/HDTF/
|-- audios
|   |-- RD_Radio1_000.wav
|   |-- RD_Radio2_000.wav
|   |-- ...
|-- original_videos
|   |-- RD_Radio1_000.mp4
|   |-- RD_Radio2_000.mp4
|   |-- ...
```
  • 裁剪训练数据集中的视频:

    python data_preprocess/data_preprocess_for_train/crop_video_MEAD.py
    python data_preprocess/data_preprocess_for_train/crop_video_HDTF.py
    
  • 分割视频:由于HDTF中的视频太长,我们将视频和相应的音频分割成5秒的片段:

    python data_preprocess/data_preprocess_for_train/split_HDTF_video.py
    
    python data_preprocess/data_preprocess_for_train/split_HDTF_audio.py
    
  • 我们将视频帧保存在lmdb文件中以提高I/O效率:

    python data_preprocess/data_preprocess_for_train/prepare_lmdb.py
    
  • 从音频中提取梅尔特征:

    python data_preprocess/data_preprocess_for_train/get_mel.py
    
  • 从裁剪的视频中提取关键点:

    python data_preprocess/data_preprocess_for_train/extract_lmdk.py
    
  • 使用extract_bbox.py从裁剪的视频中提取边界框用于唇部鉴别器,我们给出了一个使用lmdb的不完整示例:

    python data_preprocess/data_preprocess_for_train/extract_bbox.py
    
  • 预处理后,数据应按如下方式组织:

/dir_path/MEAD_front/
|-- Original_video
|   |-- M003#angry#level_1#001.mp4
|   |-- M003#angry#level_1#002.mp4
|   |-- ...
|-- video
|   |-- M003#angry#level_1#001.mp4
|   |-- M003#angry#level_1#002.mp4
|   |-- ...
|-- audio
|   |-- M003#angry#level_1#001.wav
|   |-- M003#angry#level_1#002.wav
|   |-- ...
|-- bbox
|   |-- M003#angry#level_1#001.npy
|   |-- M003#angry#level_1#002.npy
|   |-- ...
|-- landmark
|   |-- M003#angry#level_1#001.npy
|   |-- M003#angry#level_1#002.npy
|   |-- ...
|-- mel
|   |-- M003#angry#level_1#001.npy
|   |-- M003#angry#level_1#002.npy
|   |-- ...

/dir_path/HDTF/
|-- split_5s_video
|   |-- RD_Radio1_000#1.mp4
|   |-- RD_Radio1_000#2.mp4
|   |-- ...
|-- split_5s_audio
|   |-- RD_Radio1_000#1.wav
|   |-- RD_Radio1_000#2.wav
|   |-- ...
|-- bbox
|   |-- RD_Radio1_000#1.npy
|   |-- RD_Radio1_000#2.npy
|   |-- ...
|-- landmark
|   |-- RD_Radio1_000#1.npy
|   |-- RD_Radio1_000#2.npy
|   |-- ...
|-- mel
|   |-- RD_Radio1_000#1.npy
|   |-- RD_Radio1_000#2.npy
|   |-- ...

🎬 开始训练

开始训练 - 预训练编码器 $E$ 和生成器 $G$:
- 请参考 [LIA](https://github.com/wyhsirius/LIA) 从头开始训练。
- (可选)如果您想加快收敛速度,可以下载 [LIA](https://github.com/wyhsirius/LIA) 的预训练模型。
- 我们提供了在 MEAD 和 HDTF 数据集上微调模型的训练代码:
```bash
python -m torch.distributed.launch --nproc_per_node=2 --master_port 12345 train/train_E_G.py
```
  • 训练口型-姿态解耦模块:

    python -m torch.distributed.launch --nproc_per_node=2 --master_port 12344 train/train_Mouth_Pose_decouple.py
    
  • 训练音频到口型模块:

    python -m torch.distributed.launch --nproc_per_node=2 --master_port 12344 train/train_audio2mouth.py
    

🙏 感谢所有贡献者的努力

我们希望有更多人能够参与进来,我们会及时处理拉取请求。目前,仍有一些任务需要帮助,例如创建 colab 笔记本、网页用户界面以及翻译工作等。

contributors

👨‍👩‍👧‍👦 其他会说话的头像论文:

[ICCV 23] EMMN: 用于音频驱动情感说话人脸生成的情感运动记忆网络

[AAAI 24] Style2Talker: 具有情感风格和艺术风格的高分辨率说话头像生成

[AAAI 24] 用任何风格说任何话

[CVPR 24] FlowVQTalker: 通过归一化流和量化实现高质量情感说话人脸生成

🎓 引用

@inproceedings{tan2024edtalk,
  title = {EDTalk: 情感说话头像合成的高效解耦},
  author = {Tan, Shuai and Ji, Bin and Bi, Mengxiao and Pan, Ye},
  booktitle = {Proceedings of the European Conference on Computer Vision (ECCV)},
  year = {2024}
}

🙏 致谢

部分代码借鉴自以下项目:

论文中的一些图表受到以下项目的启发:

感谢这些优秀的项目。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号