简介
数字人也称为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.10conda activate ernerf
三.安装依赖库
设置pip华为源,加快依赖库下载速度pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple/conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8 -c pytorch -c nvidiaconda install pytorch3d==0.7.4 -c pytorch3d -c pytorch -c conda-forge(下载0.7.4版本地址 https://github.com/facebookresearch/pytorch3d/releases/tag/v0.7.4)sudo apt-get install ffmpegsudo apt-get install libasound2-devsudo apt-get install portaudio19-dev python-all-dev python3-all-devpip install -r requirements.txtpip install tensorflow-gpu==2.8.0pip install protobuf==3.20.0
四.安装cuda 11.8
1.访问下载地址:https://developer.nvidia.com/cuda-11-8-0-download-archive2.wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run3.sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev4.sudo sh cuda_11.8.0_520.61.05_linux.run输入:accept安装完毕之后:vim ~/.bashrc 添加以下内容:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64export PATH=$PATH:/usr/local/cuda-11.8/binexport CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.8export HF_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 ./raymarchingpip install ./gridencoderpip install ./freqencoderpip 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.npywget 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.npywget 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.objwget 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_trackingpython convert_BFM.py
七.安装cuDNN
下载地址:https://developer.nvidia.cn/rdp/cudnn-archive
解压复制复制倒前面cuda安装的目录cuda/lib64/ 下所有文件复制到 /usr/local/cuda-11.8/lib64 文件夹中:sudo cp cudnn/include/* /usr/local/cuda-11.8/includesudo cp cudnn/lib/* /usr/local/cuda-11.8/lib64
并添加读取权限:sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*sudo chmod 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 --iters 100000
# 命令2:在命令1完成后,再多训练“25000”次,微调一下lipspython main.py data/obama/ --workspace trial_obama/ -O --iters 125000 --finetune_lips --patch_size 32
# 命令3:python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --head_ckpt trial_obama/checkpoints/ngp.pth --iters 200000
trial_obama/checkpoints/ngp.pth 为上面生成的最终模型文件
十.推理
1.执行结束后,会在当前目录生成1.npy文件python data_utils/deepspeech_features/extract_ds_features.py --input 1.wav
2.执行模型推理,生成对口型后的视频文件。不过生成的视频没有声音python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --test --test_train --aud 1.npy
3.将音频和视频合并起来ffmpeg -i trial_obama_torso/results/ngp_ep0028.mp4 -i 1.wav -c:v copy -c:a aac -strict experimental 1.mp4
到此,整个部署过程完成,不同的服务器环境也可能存在不同的报错问题