简介
数字人也称为Digital Human或Meta Human,是运用数字技术创造出来的、与人类形象接近的数字化人物形象。应用包括但不限于直播、软件制作、教育、科研等领域。
目前数字人模型效果最好的是ER-NeRF,其借鉴了nerf体渲染的思路,在输入维度上添加了音频特征,通过音频来影响渲染效果(控制嘴型)。即:给一段某人说话的视频,再给定一段音频,经过该模型后处理后,可将原视频的嘴型与音频保持一致。
ER-NeRF的部署教程网上的教程虽然很多,但不是很全面,经过一番折腾,终于把算法跑起来了。在这里做下总结,记录整个部署过程。
部署过程
一.下载源码
git clone https://github.com/Fictionarry/ER-NeRF
二.创建Conda环境
关于conda环境安装不在此重点介绍,下面根据命令创建相应的python环境
conda create -n ernerf python=3.10
conda activate ernerf
三.安装依赖库
设置pip华为源,加快依赖库下载速度
pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple/
conda installpytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8-c pytorch -c nvidia
conda installpytorch3d==0.7.4 -c pytorch3d -c pytorch -c conda-forge
(下载0.7.4版本地址 https://github.com/facebookresearch/pytorch3d/releases/tag/v0.7.4)sudoapt-getinstall ffmpeg
sudoapt-getinstall libasound2-dev
sudoapt-getinstall portaudio19-dev python-all-dev python3-all-dev
pip install-r requirements.txt
pip install tensorflow-gpu==2.8.0
pip installprotobuf==3.20.0
四.安装cuda 11.8
1.访问下载地址:https://developer.nvidia.com/cuda-11-8-0-download-archive
2.wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
3.sudo apt-getinstall freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
4.sudo sh cuda_11.8.0_520.61.05_linux.run
输入:accept
安装完毕之后:
vim ~/.bashrc
添加以下内容:
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64
exportPATH=$PATH:/usr/local/cuda-11.8/bin
exportCUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.8
exportHF_ENDPOINT=https://hf-mirror.com
保存之后再执行下面的命令
source ~/.bashrc
验证是否安装成功:nvcc -V
原本装了其他版本的情况,需要卸载CUDA其他版本:
执行:sudo /usr/local/cuda-11.8/bin/cuda-uninstaller,选择你要协助的版本(通过键盘空白格选择)
删除对应版本:sudo rm-rf /usr/local/cuda-11.x
如果出现bash: /usr/local/cuda-11.x/bin/nvcc: No such file or directory,重新执行source ~/.bashrc
五.安装子模块
pip install ./raymarching
pip install ./gridencoder
pip install ./freqencoder
pip install ./shencoder
六.下载需要用到的模型
1.准备面部解析模型
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
2.准备用于头部姿态估计的 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.准备basel面部模型
https://faces.dmi.unibas.ch/bfm/main.php?nav=1-1-0&id=details
将下载的面部模型01_MorphableModel.mat 复制到目录 data_util/face_tracking/3DMM/
运行convert_BFM.py脚本:
cd data_utils/face_tracking
python convert_BFM.py
七.安装cuDNN
下载地址:https://developer.nvidia.cn/rdp/cudnn-archive
解压复制复制倒前面cuda安装的目录
cuda/lib64/ 下所有文件复制到 /usr/local/cuda-11.8/lib64 文件夹中:
sudocp cudnn/include/* /usr/local/cuda-11.8/include
sudocp cudnn/lib/* /usr/local/cuda-11.8/lib64
并添加读取权限:
sudochmod a+r /usr/local/cuda-11.8/include/cudnn*
sudochmod a+r /usr/local/cuda-11.8/lib64/libcudnn*
八.数据预处理
1.视频预处理,将视频放在 data/<ID>/<ID>.mp4 路径下,视频必须为 25FPS,所有帧都包含说话的人。分辨率应约为 512x512,持续时间约为 1-5 分钟。
运行脚本以处理视频:python data_utils/process.py data/<ID>/<ID>.mp4
2.处理过程
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
3.使用OpenFace读取视频中人物眨眼的数据,最后导出au_dus.csv
(也可通过https://github.com/Hujiazeng/Vach/releases/tag/ckpt 下载obama.zip,里面带了默认视频的au.csv)
九.开始训练
# 命令1:训练模型
python main.py data/obama/ --workspace trial_obama/ -O--iters100000
# 命令2:在命令1完成后,再多训练“25000”次,微调一下lips
python main.py data/obama/ --workspace trial_obama/ -O--iters125000--finetune_lips--patch_size32
# 命令3:
python main.py data/obama/ --workspace trial_obama_torso/ -O--torso--head_ckpt trial_obama/checkpoints/ngp.pth --iters200000
trial_obama/checkpoints/ngp.pth 为上面生成的最终模型文件
十.推理
1.执行结束后,会在当前目录生成1.npy文件
python data_utils/deepspeech_features/extract_ds_features.py --input1.wav
2.执行模型推理,生成对口型后的视频文件。不过生成的视频没有声音
python main.py data/obama/ --workspace trial_obama_torso/ -O--torso--test--test_train--aud1.npy
3.将音频和视频合并起来
ffmpeg -i trial_obama_torso/results/ngp_ep0028.mp4 -i1.wav -c:v copy -c:a aac -strict experimental 1.mp4
到此,整个部署过程完成,不同的服务器环境也可能存在不同的报错问题
版权归原作者 不会代码的小林 所有, 如有侵权,请联系我们删除。