JoyHallo:京东健康开源的高效普通话数字人模型
Star
Forks
Watch
Issues
JoyHallo是京东健康研发的,一个专为普通话设计的数字人模型。该项目旨在解决音视频生成领域中,普通话视频生成的难题。
项目介绍
在音视频生成领域,创建普通话视频面临巨大挑战。 一方面,收集全面的普通话数据集存在困难。 另一方面,与英语相比,普通话复杂的唇部动作进一步增加了模型训练的难度。JoyHallo项目为此应运而生,它基于京东健康国际股份有限公司员工的29小时普通话视频语音数据,构建了名为jdh-Hallo的数据集。 这个数据集涵盖了不同年龄段和说话风格的样本,包含日常对话和专业医学主题。
为了让JoyHallo模型适配普通话,项目采用了中文wav2vec2模型进行音频特征嵌入。 它还引入了一种半解耦结构来捕捉唇部、表情和姿态特征之间的内部关系。这种设计不仅提高了信息利用效率,还将推理速度提升了14.3%。 值得一提的是,JoyHallo保留了生成英语视频的强大能力,展现出卓越的跨语言生成能力。
项目框架包含几个关键部分:
- 音频处理: 使用中文wav2vec2模型提取音频特征,为后续的唇形生成提供基础。
- 视觉生成: 基于提取的音频特征,生成对应的唇形、表情和姿态,最终合成为视频。
- 半解耦结构: 将唇部、表情和姿态特征进行分离处理,再进行融合,提高了生成质量和效率。
该项目提供了预训练模型、训练脚本和推理脚本,方便用户进行实验和应用。
优势分析
JoyHallo项目有几个显著的优势:
- 针对性强: 专门针对普通话视频生成进行优化,解决了普通话数据集匮乏和唇形复杂的问题。
- 高效性: 采用半解耦结构,提高了信息利用效率,并将推理速度提高了14.3%。
- 跨语言能力: 不仅支持普通话,还保留了生成英语视频的能力,具有良好的跨语言生成能力。
- 易用性: 提供了详细的安装、配置和使用说明,并附带了示例代码和脚本,方便用户快速上手。
- 数据集支持: 构建了jdh-Hallo数据集,为普通话数字人研究提供了宝贵资源。
使用方法
系统要求
- 操作系统:Ubuntu 20.04
- CUDA版本:11.3
- GPU: A100 (建议)
环境配置
-
创建基础环境:
conda create -n joyhallo python=3.10 -y conda activate joyhallo
-
安装依赖包:
pip install -r requirements.txt
-
安装 ffmpeg:
sudo apt-get update sudo apt-get install ffmpeg -y
模型准备
-
下载预训练模型:
首先下载基础权重模型
git lfs install git clone https://huggingface.co/fudan-generative-ai/hallo pretrained_models
其次,下载 chinese-wav2vec2-base 模型
cd pretrained_models git lfs install git clone https://huggingface.co/TencentGameMate/chinese-wav2vec2-base
最后, 下载 JoyHallo 模型
git lfs install git clone https://huggingface.co/jdh-algo/JoyHallo-v1 pretrained_models/joyhallo
也可以直接从Hugging Face Hub下载: JoyHallo.
-
模型目录结构
下载完成后,
pretrained_models
目录应包含以下结构:./pretrained_models/ |-- audio_separator/ | |-- download_checks.json | |-- mdx_model_data.json | |-- vr_model_data.json | `-- Kim_Vocal_2.onnx |-- face_analysis/ | `-- models/ | |-- face_landmarker_v2_with_blendshapes.task | |-- 1k3d68.onnx | |-- 2d106det.onnx | |-- genderage.onnx | |-- glintr100.onnx | `-- scrfd_10g_bnkps.onnx |-- hallo/ | `-- net.pth |-- joyhallo/ | `-- net.pth |-- motion_module/ | `-- mm_sd_v15_v2.ckpt |-- sd-vae-ft-mse/ | |-- config.json | `-- diffusion_pytorch_model.safetensors |-- stable-diffusion-v1-5/ | `-- unet/ | |-- config.json | `-- diffusion_pytorch_model.safetensors |-- wav2vec/ | `-- wav2vec2-base-960h/ | |-- config.json | |-- feature_extractor_config.json | |-- model.safetensors | |-- preprocessor_config.json | |-- special_tokens_map.json | |-- tokenizer_config.json | `-- vocab.json `-- chinese-wav2vec2-base/ |-- chinese-wav2vec2-base-fairseq-ckpt.pt |-- config.json |-- preprocessor_config.json `-- pytorch_model.bin
数据要求
图像:
- 需要裁剪成正方形.
- 人脸朝前,并占据图像的50%-70%.
音频:
- 使用wav格式.
- 支持普通话, 英语或混合语言, 要求音频清晰,并有合适的背景音乐.
注意:
上述要求适用于训练和推理过程.
推理
-
命令行推理
执行以下命令进行推理:
sh joyhallo-infer.sh
提示: 如果要提高推理速度, 你可以在
configs/inference/inference.yaml
文件中将inference_steps
的值从40改为15, 可以尝试同时修改cfg_scale
。 可以在configs/inference/inference.yaml
中修改参数来指定音频和图像文件, 以及切换模型。 推理结果将保存在opts/joyhallo
目录下.inference.yaml
中的参数解释如下:audio_ckpt_dir
: 模型权重路径.ref_img_path
: 参考图像路径.audio_path
: 参考音频路径.output_dir
: 输出目录.exp_name
: 输出文件文件夹名称.
-
网页 Demo 推理
执行以下命令启动网页 Demo:
sh joyhallo-app.sh
Demo 界面将会在 http://127.0.0.1 打开。
训练或微调 JoyHallo
有两种方式可以训练或微调模型: 从 Stage 1 开始训练或仅训练 Stage 2。
-
从 Stage 1 开始训练
sh joyhallo-alltrain.sh
这个命令将自动开始两个阶段 (Stage 1 和 Stage 2) 的训练。 你可以参考
configs/train/stage1_alltrain.yaml
和configs/train/stage2_alltrain.yaml
来调整训练参数。 -
仅训练 Stage 2
sh joyhallo-train.sh
这个命令将从 Stage 2 开始训练, 你可以参考
configs/train/stage2.yaml
文件来调整训练参数。
准备训练数据
-
按以下目录结构准备数据,确保数据符合前面提到的数据要求:
jdh-Hallo/ |-- videos/ | |-- 0001.mp4 | |-- 0002.mp4 | |-- 0003.mp4 | `-- 0004.mp4
-
使用以下命令处理数据集:
# 1. 从视频中提取特征. python -m scripts.data_preprocess