环境

系统:win10
VS版本:2019
python版本: 3.10.8
cuda版本: 11.7
cuDNN: 8.5
tensorflow-gpu==2.8.0
PyTorch: torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0
MinGW-w64: 8.1
此配置经过实践是没问题的,也可以探索其他版本可行性。

环境安装过程

1、VS

安装注意事项,注意勾选红圈的组件,其他默认安装就行

2、cuda

下载地址:cuda V11.7

直接默认安装即可

3、cuDNN

下载地址:cuDNN8.5

然后将解压后的文件放入之前cmd找到的cuda路径下, 解压之后,

lib里的文件放到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\lib
bin里的文件放到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin
include 里的文件放到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include

配置环境变量: cuda 其他环境变量安装的时候会自动添加,手动添加如下变量

4、tensorflow-gpu

安装过程中出现一个错误

No matching distribution found for tf-estimator-nightly==2.8.0.dev2021122109

经过查询得知使用的python清华源,没有这个包,预先使用其他源安装一下

pip install -i https://pypi.doubanio.com/simple/ tf-estimator-nightly==2.8.0.dev2021122109

5、PyTorch

直接使用如下命令安装:

pip install torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu117

PS :本人安装了torch的版本2.2.2、2.2.0,在编译ER-NeRF下四个组件的时候,报错,经过源博主建议,使用cuda11.7+粗DNN8.5,正常编译。

6、安装OpenFace

此处为获取人物眨眼数据,安装参考点击查看

安装完成后,启动OpenFaceOffline.exe,直接打开file菜单选择视频,进行视频分析。

分析完成后在目录下processed文件夹。找到csv后缀文件就是我们要的文件了。复制到ernerf下打他目录,修改名称为au.csv待用

7、安装ffmpeg

这里下载的版本是:ffmpeg-master-latest-win64-gpl

下载列表:https://github.com/BtbN/FFmpeg-Builds/releases 官网下载编译好的二进制文件。链接地址:ffmpeg

下载完成后解压,在环境变量path中添加解压的ffmpeg目录下bin目录路径。

8、gcc安装

MinGW-w64 官方网站的地址是:http://mingw-w64.org 这里下载的是

9、pytorch3d安装

这里安装的是pytorch3d-0.7.4版本,此处版本选择需要跟PyTorch对应,具体参考官网给出的版本支持情况选择。

先设置临时环境变量,然后在执行安装命令。

#设置环境变量
set DISTUTILS_USE_SDK=1
set PYTORCH3D_NO_NINJA=1

# 进入pytorch3d-0.7.4目录,
py setup.py install

ER-NeRF项目编译

下载代码

https://github.com/Fictionarry/ER-NeRF.git

安装项目依赖

py install -r requirements.txt

编译依赖插件

在项目中,需要编译项目目录下四个插件:raymarching、\freqencoder、\gridencoder、\shencoder

依次cd到对应目录下,执行如下命令,安装即可

py setup.py install

PS :一定要cuda11.7+cuDNN8.5,这里有定制代码,其他版本编译不通过。

至此项目环境完成

#模型安装

1、人脸解析模型

下载人脸解析模型79999_iter.pth放到data_utils/face_parsing/这个目录 下载地址:人脸模型

2、头部姿态估计模型

下载四个头部姿态估计模型到data_utils/face_tracking/3DMM/

https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/exp_info.npy

https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/keys_info.npy

https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/sub_mesh.obj

https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/topology_info.npy

3、01_MorphableModel.mat模型

下载01_MorphableModel.mat模型到data_utils/face_trackong/3DMM/目录 从Basel Face Model 3下载2009DMM模型,需要填写信息接收下载账号密码,正常填写即可。地址:https://faces.dmi.unibas.ch/bfm/main.php?nav=1-1-0&id=details

4、运行时所需模型下载

四个运行时需要的模型,下载后放到C盘:用户.cache\torch\hub\checkpoints文件夹下,没有文件夹可以先建。

https://download.pytorch.org/models/resnet18-5c106cde.pth
https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth
https://www.adrianbulat.com/downloads/python-fan/2DFAN4-cd938726ad.zip
https://download.pytorch.org/models/alexnet-owt-7be5be79.pth

5、语音特征提取模型

GITHUB下载deepspeech-0_1_0-b90017e8.pb放到系统C盘:用户.tensorflow\models目录下,第一次运行可能没有这个目录,那就自己创建一个

训练过程

主要任务内容如下:

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/sp/1.mp4  --task 1
python data_utils/process.py data/sp/1.mp4  --task 2
python data_utils/process.py data/sp/1.mp4  --task 3
python data_utils/process.py data/sp/1.mp4  --task 4
python data_utils/process.py data/sp/1.mp4  --task 5
python data_utils/process.py data/sp/1.mp4  --task 6
python data_utils/process.py data/sp/1.mp4  --task 7
python data_utils/process.py data/sp/1.mp4  --task 8
python data_utils/process.py data/sp/1.mp4  --task 9

任务跑完之后,检查ER-NeRF\data\sp文件夹下生成的数据是否正常,同时原本的aud.npy重新命名成aud_ds.npy

PS 任务8时长半小时左右。下面的训练任务耗时间都比较长

#头部
#python main.py data/sp/ --workspace trial_sp/ -O --iters 100000  --asr_model wav2vec/ deepspeech
python main.py data/sp/ --workspace trial_vrh/ -O --iters 100000

#嘴型
python main.py data/sp/ --workspace trial_vrh/ -O --iters 125000 --finetune_lips --patch_size 32

#身体 trial_vrh/checkpoints/ngp_ep0152.pth 模型路径为嘴型训练完成后得到的模型,自己根据实际填写
python main.py data/sp/ --workspace trial_vrh_torso/ -O --torso --head_ckpt trial_vrh/checkpoints/ngp_ep0152.pth --iters 200000

到此训练完成,得到我们最终需要的模型:

推理见下文。

附(每个软件版本兼容性选择):

cuda和cuDNN版本兼容性清单:https://docs.nvidia.com/deeplearning/cudnn/latest/reference/support-matrix.html#id19

cuda和PyTorch版本兼容性清单: https://pytorch.org/get-started/previous-versions/#wheel-6

Pytorch和pytorch3d版本兼容性清单:https://github.com/facebookresearch/pytorch3d/releases

参考来源:

https://github.com/Fictionarry/ER-NeRF

https://blog.csdn.net/matt45m/article/details/133700108