ER-NeRF数字人模型快速入手
- 模型介绍
- 模型对比
- 完成定制数字人你可能还需要什么?
- 1.克隆项目、安装依赖环境
- 2.下载面部解析模型
- 3.准备3DMM所需文件
- 4.下载3DMM模型
- 5.将要训练人物模型(视频文件)放在data目录下。以data/<ID>/<ID>.mp4明明。例如:chinese.mp4就放在ER-NeRF/data/chinese/chinese.mp4
- 6.使用data_utils/process.py脚本处理视频
- 7.将生成的aud.npy复制一份,改名aud_ds.npy(源码好像有点问题,需要要这么做,否则下面步骤报错文件不存在)
- 8.若需要训练的模型有眨眼效果,需要捕获原视频眨眼动作,使用OpenFace生成<ID>.csv文件
- 9.以上步骤均为训练模型数据准备阶段,下面开始训练模型
- 模型运行测试情况:
模型介绍
ER-NeRF是一种旨在提高神经辐射场(NeRF, Neural Radiance Fields)技术的效率和实时渲染能力的项目。在训练数字人 模型方面应用广泛。
模型输入:
视频必须为 25FPS,所有帧都包含说话的人。 分辨率应约为 512x512,持续时间约为 1-5 分钟。
模型输出:
一个输入视频中人物数字人模型,可以结合音频进行推理,输出实时
/固定视频。
项目地址:ER-NeRF
优缺点:
优点:训练完成后,推理速度快,可以实现低延迟实时交互,融合大模型技术。
缺点:
- 1.头部晃动更大,是模型本身存在的问题。
- 2.对于需要训练全身的数字人需要进行头部贴回原视频。
- 3.训练长视频比如4分钟左右,会出现嘴巴不动情况,博主还没有解决,建议处理不超过2分钟短视频。
模型对比
Synctalk:模型是ER-NeRF优化模型,但训练过程不稳定,容易出现嘴巴抖动问题,模型对于长发视频模型训练会出现头发断裂现象。个人不建议使用此模型。
项目地址:metahuman-stream
完成定制数字人你可能还需要什么?
CosyVoice: 阿里最新开源音色克隆、文本转语音项目,支持情感控制功能。只需要用户输入3秒左右的人声音频,即可完美克隆音色,功能强大。
项目地址:CosyVoice
metahuman-stream: 项目实现实时交互流式数字人,实现音视频同步对话,基本可以达到商用效果。metahuman-stream结合ER-NeRF训练好的模型,结合Synctalk克隆的音色模型可以较好实现商用数字人项目。
项目地址:metahuman-stream
- 支持多种数字人模型: ernerf、musetalk、wav2lip
- 支持声音克隆
- 支持数字人说话被打断
- 支持全身视频拼接
- 支持rtmp和webrtc
- 支持视频编排:不说话时播放自定义视频
1.克隆项目、安装依赖环境
#选择一个目录克隆项目
cd /home/yjfeng/projects
git clone https://github.com/Fictionarry/ER-NeRF.git
cd ER-NeRF
conda create -n ernerf python=3.10
conda activate ernerf
conda install pytorch==1.12.1 torchvision==0.13.1 cudatoolkit=11.3 -c pytorch
pip install -r requirements.txt
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
pip install tensorflow-gpu==2.8.0
# 重新安装protobuf,使用3.20.3版本
pip uninstall protobuf
pip install protobuf==3.20.3
2.下载面部解析模型
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
3.准备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 data_utils/face_tracking/3DMM/topology_info.npy
4.下载3DMM模型
复制01_MorphableModel.mat文件到data_util/face_tracking/3DMM/目录下,再执行下面命令
cd data_utils/face_tracking
python convert_BFM.py
**
5.将要训练人物模型(视频文件)放在data目录下。以data//.mp4明明。例如:chinese.mp4就放在ER-NeRF/data/chinese/chinese.mp4
视频要求(此要求下效果好):
① 帧率:25FPS;
② 每一帧都要是人物说话;
③ 分辨率:512x512;
④ 时长:1-5分钟;
⑤ 人物背景要稳定。
6.使用data_utils/process.py脚本处理视频
python data_utils/process.py data/chinese/chinese.mp4
task 1:分离视频。生成aud.wav文件。若报错,通常是ffmpeg问题。
task 2:生成一些音频数据,aud.npy文件。若报错,一般是protobuf版本问题。
task 3:提取视频中的每帧图像。生成ori_imgs/XXX.jpg文件,会有很多jpg文件。
task 4:分割人像(语义分割)。生成parsing/XX.png文件,会有很多png文件。
task 5:提取背景图像。生成bc.jpg文件。是人物的背景图片。
task 6:分割出身体部分与生成Ground Truth图片。生成gt_imgs/XXX.jpg和torso_imgs/XXX.png(只有躯干没有人脸的图片)。
task 7:获取人脸各个点位的坐标。生成ori_imgs/XXX.lms。
task 8:获取人脸跟踪数据,这步要训练一个追踪模型,会很慢。生成track_params.pt文件。这部报错通常是pytorch3d的问题,注意cuda版本。
task 9:生成transformers_train.json和transforms_val.json
如果某个任务报错,可以配置环境后使用:
python data_utils/process.py data/<ID>/<ID>.mp4 --task <taskId>
例如(重试任务2):
python data_utils/process.py data/chinese/chinese.mp4 --task 2
7.将生成的aud.npy复制一份,改名aud_ds.npy(源码好像有点问题,需要要这么做,否则下面步骤报错文件不存在)
8.若需要训练的模型有眨眼效果,需要捕获原视频眨眼动作,使用OpenFace生成.csv文件
1.下载OpenFace软件
① 下载OpenFace(Windows版本链接);
② 解压文件,打卡里面的OpenFaceOffline.exe;
③ Record里只勾选Record AUs;
④ 打开chinese.mp4,之后就开始运行。
⑤ 等待运行结束,会在./processd文件夹中生成.csv文件,将其更名为au.csv。
⑥ 将其放在data//文件夹下。
2.在github上面拉取到服务器,自行写脚本运行chinese.mp4,自动生成au.csv
OpenFace项目地址: OpenFace
9.以上步骤均为训练模型数据准备阶段,下面开始训练模型
# 命令1:训练模型100000次,训练后的模型放在trial_chinese目录下
python main.py data/chinese/ --workspace trial_chinese/ -O --iters 100000
# 命令2:在上面训练的基础上,再微调嘴唇,训练125000次,批量大小为32,可根据自己显存调节
python main.py data/chinese/ --workspace trial_chinese/ -O --iters 125000 --finetune_lips --patch_size 32
# 命令3:再把头部模型和躯干融合训练,训练模型200000次,训练后的模型放在trial_chinese_torso目录下,trial_chinese/checkpoints/ngp.pth为上面步骤训练出来的头部模型
python main.py data/chinese/ --workspace trial_chinese_torso/ -O --torso --head_ckpt trial_chinese/checkpoints/ngp.pth --iters 200000
至此,模型已经训练完毕,NeRF/model_chinese_torso/checkpoints/ngp.pth
为最终视频所训练出来的数字人模型,可以结合其他应用方式进行模型推理,生成数字人视频。
模型运行测试情况:
- 模型接受视频要求:25FPS;512*512
- 测试视频大小:40秒
- GPU: 数据集准备阶段需要6G显存;训练模型阶段需要6.5G显存
- 时间:数据集准备时间20分钟;模型训练时间4.5小时