ER-NeRF是一种旨在提高神经辐射场(NeRF, Neural Radiance Fields)技术的效率和实时渲染能力的项目。在训练数字人 模型方面应用广泛。
模型输入:
视频必须为 25FPS,所有帧都包含说话的人。 分辨率应约为 512x512,持续时间约为 1-5 分钟。
模型输出:
一个输入视频中人物数字人模型,可以结合音频进行推理,输出实时
/固定视频。
项目地址:ER-NeRF
优缺点:
优点:训练完成后,推理速度快,可以实现低延迟实时交互,融合大模型技术。
缺点:
Synctalk:模型是ER-NeRF优化模型,但训练过程不稳定,容易出现嘴巴抖动问题,模型对于长发视频模型训练会出现头发断裂现象。个人不建议使用此模型。
项目地址:metahuman-stream
CosyVoice: 阿里最新开源音色克隆、文本转语音项目,支持情感控制功能。只需要用户输入3秒左右的人声音频,即可完美克隆音色,功能强大。
项目地址:CosyVoice
metahuman-stream: 项目实现实时交互流式数字人,实现音视频同步对话,基本可以达到商用效果。metahuman-stream结合ER-NeRF训练好的模型,结合Synctalk克隆的音色模型可以较好实现商用数字人项目。
项目地址:metahuman-stream
#选择一个目录克隆项目
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
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
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
复制01_MorphableModel.mat文件到data_util/face_tracking/3DMM/目录下,再执行下面命令
cd data_utils/face_tracking
python convert_BFM.py
**
视频要求(此要求下效果好):
① 帧率:25FPS;
② 每一帧都要是人物说话;
③ 分辨率:512x512;
④ 时长:1-5分钟;
⑤ 人物背景要稳定。
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
① 下载OpenFace(Windows版本链接);
② 解压文件,打卡里面的OpenFaceOffline.exe;
③ Record里只勾选Record AUs;
④ 打开chinese.mp4,之后就开始运行。
⑤ 等待运行结束,会在./processd文件夹中生成.csv文件,将其更名为au.csv。
⑥ 将其放在data//文件夹下。
OpenFace项目地址: OpenFace
# 命令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
为最终视频所训练出来的数字人模型,可以结合其他应用方式进行模型推理,生成数字人视频。