主要写er-nerf从零到一所有部署过程
https://github.com/Fictionarry/ER-NeRF
如有需要,请运行命令->
git clone https://github.com/Fictionarry/ER-NeRF.git
1.git本项目源码
git clone https://github.com/notiom/ER-nerf.git
2.进入项目目录
cd ER-nerf
3.创建到自己服务器下的链接
conda create -p /home/xxx/.conda/envs/ernerf python=3.10
4.使用conda安装cuda环境,这里不能使用conda安装torch,conda默认安装torch+cpu
conda install cudatoolkit=11.3 -c pytorch
5.使用pip安装torch1.12.1+cu113
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
6.安装其他依赖
pip install -r requirements.txt
7.安装pytorch3d
pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py310_cu113_pyt1121/download.html
下载pytorch3d源码,如果下载不,按上面的百度网盘下载:链接:pytorch3d
提取码:1422
8.安装tensorflow-gpu
pip install tensorflow-gpu==2.8.0
1.下载人脸解析模型79999_iter.pth放到data_utils/face_parsing/这个目录
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
在data_utils/face_tracking目录下新建一个3DMM文件夹,并下载头部姿态估计模型到data_utils/face_tracking/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
3.下载01_MorphableModel.mat模型到data_utils/face_trackong/3DMM/目录
wget https://github.com/notiom/ER-nerf/releases/download/mat/01_MorphableModel.mat
在下载模型之后,运行
cd data_utils/face_tracking
python convert_BFM.py
若网络下载缓慢,->模型链接百度网盘下载链接
4.这一步可以省略,因为在代码运行过程中也会自动下载,但是在运行时下载会很慢,建议下载
cd .cache/torch/hub/checkpoints
wget https://download.pytorch.org/models/resnet18-5c106cde.pth
wget https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth
wget https://www.adrianbulat.com/downloads/python-fan/2DFAN4-cd938726ad.zip
wget https://download.pytorch.org/models/alexnet-owt-7be5be79.pth
1.获取一个5分钟左右的视屏,这里获取奥巴马的视屏
mkdir -p data/obama
wget https://github.com/YudongGuo/AD-NeRF/blob/master/dataset/vids/Obama.mp4?raw=true -O data/obama/obama.mp4
2.使用openface制作csv文件,openface推荐使用windows,openface网盘链接如下->
openface
提取码为g105
打开OpenFace目录下的OpenFaceOffline.exe
选择要获取眨眼数据的视频 运行完之后,在processed目录下就有与视频名相同的csv文件 此处我已经生成完毕。运行以下命令获得csv文件。wget https://github.com/notiom/ER-nerf/releases/download/mat/obama.csv
3.原始图片,此处我准备了一个ori_imgs(这一步可以省略,由process生成)
wget https://github.com/notiom/ER-nerf/releases/download/mat/ori_imgs.zip
若想下载完整的数据集,可以去阿里云找到rad-nerf-data.zip
4.下载track_params.pt
wget https://github.com/notiom/ER-nerf/releases/download/mat/track_params.pt
5.生成其他的图片路径文件夹
python data_utils/process.py data/obama/obama.mp4
其中task的作用为:
--task 1 #分离音频
--task 2 #生成aud_eo.npy
--task 3 #把视频拆分成图像
--task 4 #分割人像
--task 5 #提取背景图像
--task 6 #分割出身体部分
--task 7 #获取人脸landmarks lms文件
--task 8 #获取人脸跟踪数据,这步要训练一个追踪模型,会很慢
--task 9 #保存所有数据
5.重命名
处理完成之后,把OpenFace处理出来的眨眼数据复制到当前目录,重新命名成au.csv,把原本的aud.npy重新命名成aud_ds.npy。
1.先下载检查点压缩文件
wget https://github.com/Fictionarry/ER-NeRF/releases/download/ckpt/checkpoints.zip
将文件夹压缩为trial_obama,trial_obama_torso
文件夹路径应为
|ER-nerf/
|--data/
| |--obama
| |--gt_imgs/
| |--ori_imgs/
| |--parsing/
| |--toro_imgs/
| |--au.csv
| |--aud_ds.npy
| |--aud.wav
| |--bc.jpg
| |--obama.mp4
| |--track_params.pt
| |--transfroms_train.json
| |--transfroms_val.json
|--......
|--trial_obama/
| |--checkpoints/
| |--ngp_ep0017.pth
| |--ngp.pth
| |--log_ngp.txt
|--......
|--trial_obama_torso/
| |--checkpoints/
| |--ngp_ep0028.pth
| |--ngp.pth
|--results/
|--......
全部运行完成之后,可以开始测试结果。
python main.py data/obama/ --workspace trial_obama/ -O --test --ckpt trial_obama/checkpoints/ngp.pth # head
python main.py data/obama/ --workspace trial_obama_torso/ -O --test --torso --ckpt trial_obama_torso/checkpoints/ngp.pth # head+torso
测试结果为:
setting | PSNR | LPIPS | LMD |
---|---|---|---|
head | 35.607 | 0.0178 | 2.525 |
head+torso | 26.594 | 0.0446 | 2.550 |
--模型训练输入:一段mp4视频,包含原有的语音
--模型预测输入:原有的视频 + 一段新的wav语音
--模型输出:合成出的新视频
原文使用 DeepSpeech特征进行评估
在训练和测试--asr_model <deepspeech, esperanto, hubert>时指定音频特征的类型。
深度语音
python data_utils/deepspeech_features/extract_ds_features.py --input data/<name>.wav # save to data/<name>.npy
波形向量
尝试通过 Wav2Vec(如RAD-NeRF)提取音频特征:
python data_utils/wav2vec.py --wav data/<name>.wav --save_feats # save to data/<name>_eo.npy
Hubert 在我们的测试中,HuBERT 提取器对于更多语言表现更好,并且已经在GeneFace中使用。
python data_utils/hubert.py --wav data/<name>.wav # save to data/<name>_hu.npy
# 头部训练
python main.py data/obama/ --workspace trial_obama/ -O --iters 100000
# 微调嘴型动作
# 训练结束后会保存一个权重文件,用于下一步训练身体时使用
python main.py data/obama/ --workspace trial_obama/ -O --iters 125000 --finetune_lips --patch_size 32
# 训练身体
# 训练身体时,导入上一步生成的头部模型
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --head_ckpt <head>.pth --iters 200000
python main.py data/obama/ --workspace trial_obama/ -O --test # 只渲染头部,并使用GT图像来呈现躯干
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --test # 渲染头部和躯干
# 添加“--smooth_path”可能有助于减少头部的抖动,但可能会减少对原始姿势的准确性。
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --test --test_train --aud <audio>.npy
# 用于训练
python ui/run.py --is_train
# 用于推理
python ui/run.py
展示图如下所示
1.若报错 libopenh264.so.5的问题,则将conda环境下的lib文件夹下的libopenh264.so改名为libopenh264.so.5
2.若报g++版本问题,运行
conda install 'gxx[version=">=5,<10.2.1"]'
3.报错cuda问题,设置环境变量,在.bashrc下设置
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64
export PATH=/usr/local/cuda-11.7/bin:$PATH
export CUDA_HOME=/usr/local/cuda-11.7
4.运行process第8步时的生成错误:nvrtc: error: invalid value for --gpu-architecture (-arch)
解决方案,新建一个新的环境用于生成track_params.pt,报错原因为显卡可能为4090,版本太高,不兼容cuda
测试安装torch==2.1.1+cu118 torchvision==0.16.1+cu118 pytorch3d==0.7.5可以正常运行
5.ffmeg报错
conda install ffmpeg