ER-NeRF对话数字人模型训练与部署

不会代码的小林 2024-08-21 16:01:05 阅读 52

简介

数字人也称为Digital Human或Meta Human,是运用数字技术创造出来的、与人类形象接近的数字化人物形象。应用包括但不限于直播、软件制作、教育、科研等领域。

目前数字人模型效果最好的是ER-NeRF,其借鉴了nerf体渲染的思路,在输入维度上添加了音频特征,通过音频来影响渲染效果(控制嘴型)。即:给一段某人说话的视频,再给定一段音频,经过该模型后处理后,可将原视频的嘴型与音频保持一致。

ER-NeRF的部署教程网上的教程虽然很多,但不是很全面,经过一番折腾,终于把算法跑起来了。在这里做下总结,记录整个部署过程。


部署过程

一.下载源码

<code>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 install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8 -c pytorch -c nvidia

conda 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 ffmpeg

sudo apt-get install libasound2-dev

sudo apt-get install portaudio19-dev python-all-dev python3-all-dev

pip install -r requirements.txt

pip install tensorflow-gpu==2.8.0

pip install protobuf==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-get install 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

添加以下内容:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64

export PATH=$PATH:/usr/local/cuda-11.8/bin

export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.8

export 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 ./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 文件夹中:

sudo cp cudnn/include/* /usr/local/cuda-11.8/include

sudo 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)

在这里插入图片描述

九.开始训练

<code>

# 命令1:训练模型

python main.py data/obama/ --workspace trial_obama/ -O --iters 100000

# 命令2:在命令1完成后,再多训练“25000”次,微调一下lips

python 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 为上面生成的最终模型文件

trial_obama/checkpoints/ngp.pth 为上面生成的最终模型文件

十.推理

<code>

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

到此,整个部署过程完成,不同的服务器环境也可能存在不同的报错问题

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。