数字人克隆中SyncTalk算法介绍与部署过程

SyncTalk算法介绍

SyncTalk合成同步的头部说话视频,采用三平面哈希表示来保持主体身份。它可以生成同步的嘴唇动作、面部表情和稳定的头部姿势,并恢复头发细节以创建高分辨率视频。

部署

在Linux中部署该项目,在 Ubuntu 18.04、Pytorch 1.12.1 和 CUDA 11.3 上测试。
 

git clone https://github.com/ZiqiaoPeng/SyncTalk.git 
cd SyncTalk

安装依赖项

conda 创建-n synctalk python == 3.8.8 
conda 激活 synctalk 
pip安装torch == 1.12.1+cu113 torchvision == 0.13.1+cu113 torchaudio == 0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113 
pip安装 -r requirements.txt 
pip安装 --no-index  --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py38_cu113_pyt1121/download.html 
pip安装tensorflow-gpu == 2.8.1 
pip安装./freqencoder 
pip安装./shencoder 
pip安装./gridencoder 
pip安装./raymarching

如果在安装PyTorch3D时遇到问题,可以使用以下命令进行安装:

python./scripts/install_pytorch3d.py

数据准备

预训练模型

请将May.zip放在数据文件夹中,将trial may.zip放在模型文件夹中,然后解压它们。

[新] 处理您的视频

        ⦁    准备人脸解析模型。

wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_parsing/79999_iter.pth?raw = true  -O data_utils/face_parsing/79999_iter.pth

        ⦁    准备 3DMM 模型以进行头部姿势估计。

wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/exp_info.npy?raw = true  -O data_utils/face_tracking/3DMM/exp_info.npy 
wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/keys_info.npy?raw = true  
-O data_utils/face_tracking/3DMM/keys_info.npy wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/sub_mesh.obj?raw = true  
-O data_utils/face_tracking/3DMM/sub_mesh.obj wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/topology_info.npy?raw = true  -O 

        ⦁    从巴塞尔人脸模型 2009下载 3DMM 模型:

# 1. 将 01_MorphableModel.mat 复制到 data_util/face_tracking/3DMM/ 
# 2. 
  cd data_utils/face_tracking 
  python convert_BFM.py

        ⦁    将您的视频放在data/<ID>/<ID>.mp4下,然后运行以下命令来处理视频。

        [注意]视频必须为 25FPS,所有帧都包含说话的人。分辨率应约为 512x512,持续时间约为 4-5 分钟。

python data_utils/process.py data/<ID>/<ID>.mp4 --asr ave

您可以选择使用 AVE、DeepSpeech 或 Hubert。处理后的视频将保存在数据文件夹中。

        ⦁    [可选] 获取眨眼的 AU45

OpenFace Feature Extraction中运行,重命名并将输出 CSV 文件移动到 data/<ID>/au.csv

【注】由于EmoTalk的blendshape捕获不开源,这里的预处理代码用mediapipe的blendshape捕获替换。但根据一些反馈,它效果不佳,您可以选择用AU45替换它。如果您想与SyncTalk进行比较,可以在这里获得一些使用EmoTalk捕获的结果以及来自GeneFace的视频。

运行评估代码

python main.py 数据/May --workspace模型/trial_may -O  --test  --asr_model ave

python main.py 数据/May --workspace模型/trial_may -O  --test  --asr_model ave --portrait

“ave”指的是我们的视听编码器,“portrait”表示把生成的人脸粘贴回原图上,代表更高的质量。
如果运行正确,你会得到以下结果。

SettingPSNRLPIPSLMDSettingPSNRLPIPSLMDSettingPSNRLPIPSLMDSettingPSNRLPIPSLMD
SyncTalk(w/o Portrait)32.2010.03942.822
SyncTalk(Portrait)37.6440.01172.825

结果是针对单个训练项目的;本文报告的是多个主题的平均结果。

使用目标音频进行推理

python main.py 数据/May --workspace模型/trial_may -O  --test  --test_train  --asr_model ave --portrait  --aud ./demo/test.wav

请使用“.wav”扩展名的文件进行推理,推理结果会保存在“model/trial_may/results/”中。如果不使用Audio Visual Encoder,将wav替换为npy文件路径。

        ⦁    DeepSpeech

python data_utils/deepspeech_features/extract_ds_features.py --input data/<name>.wav # 保存到 data/<name>.npy

        ⦁    HuBERT

# 借鉴自 GeneFace。英语预训练。
 data_utils/hubert.py --wav data/<name>.wav # 保存到 data/<name>_hu.npy
# 默认情况下,我们会动态从磁盘加载数据。
# 我们还可以将所有数据预加载到 CPU/GPU 以加快训练速度,但这对于大型数据集来说非常耗费内存。
# `--preload 0`: 从磁盘加载(默认,速度较慢)。
# `--preload 1`: 加载到 CPU(稍慢)
# `--preload 2`: 加载到 GPU(快速)
 python main.py data/May --workspace model/trial_may -O  --iters 60000 --asr_model avepython 
main.py data/May --workspace model/trial_may -O  --iters 100000 --finetune_lips  --patch_size 64 --asr_model ave
# 或者你可以使用脚本来训练
sh ./scripts/train_may.sh

【提示】音频视觉编码器(AVE)适用于口型同步准确、唇部动作幅度较大的人物,如 May 和 Shaheen。在推理阶段使用 AVE 可以实现更准确的口型同步。如果您的训练结果显示唇部抖动,请尝试使用 deepspeech 或 hubert 模型作为音频特征编码器。

# 使用 deepspeech 模型
python main.py data/May --workspace model/trial_may -O  --iters 60000 --asr_model deepspeech 
python main.py data/May --workspace model/trial_may -O  --iters 100000 --finetune_lips  --patch_size 64 --asr_model deepspeech
# 使用 hubert 模型
python main.py data/May --workspace model/trial_may -O  --iters 60000 --asr_model hubert 
python main.py data/May --workspace model/trial_may -O  --iters 100000 --finetune_lips  --patch_size 64 --asr_model hubert

如果您想使用OpenFace au45作为眼睛参数,请在命令行中添加“--au45”。

# 使用 OpenFace AU45
 python main.py data/May --workspace model/trial_may -O  --iters 60000 --asr_model ave --au45
 python main.py data/May --workspace model/trial_may -O  --iters 100000 --finetune_lips  --patch_size 64 --asr_model ave --au45

测试

python main.py 数据/May --workspace模型/trial_may -O  --test  --asr_model ave --portrait

训练和测试躯干 

如果你的人物只训练了头部,出现了双下巴问题,你可以引入躯干训练。通过训练躯干,可以解决这个问题,但你不能使用“--portrait”模式。如果你添加了“--portrait”,躯干模型将失效!

# 训练
# <head>.pth 应为 trial_may 中的最新检查点
python main.py data/May/ --workspace model/trial_may_torso/ -O  --torso  --head_ckpt < head > .pth --iters 150000 --asr_model ave
# 例如
python main.py data/May/ --workspace model/trial_may_torso/ -O  --torso  --head_ckpt model/trial_may/ngp_ep0019.pth --iters 150000 --asr_model ave
# 测试
python main.py data/May --workspace model/trial_may_torso -O   --torso  --test  --asr_model ave   # 不支持 --portrait
# 使用目标音频进行推理
python main.py data/May --workspace model/trial_may_torso -O   --torso  --test  --test_train  --asr_model ave --aud ./demo/test.wav # 不支持 --portrait

如果你对数字人感兴趣,欢迎关注后台私信,数字人,即可获得数字人工具

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值