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

简介

  数字人也称为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 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)

在这里插入图片描述

九.开始训练


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

十.推理


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

到此,整个部署过程完成,不同的服务器环境也可能存在不同的报错问题
在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 09:36:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 09:36:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 09:36:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 09:36:02       69 阅读

热门阅读

  1. Spring Boot中的安全配置与实现

    2024-07-15 09:36:02       21 阅读
  2. 设计模式--抽象工厂模式

    2024-07-15 09:36:02       24 阅读
  3. 【C++ 】类与对象 -- 纯虚函数与抽象类

    2024-07-15 09:36:02       23 阅读
  4. 设计模式--简单(抽象)工厂模式

    2024-07-15 09:36:02       25 阅读
  5. python中停止线程的方法

    2024-07-15 09:36:02       20 阅读
  6. 【前端】fis框架学习

    2024-07-15 09:36:02       20 阅读
  7. 根据vue学习react

    2024-07-15 09:36:02       18 阅读
  8. C语言指针常见陷阱及避免方法

    2024-07-15 09:36:02       28 阅读
  9. C# 使用正则解析html

    2024-07-15 09:36:02       21 阅读
  10. XML Schema 指示器

    2024-07-15 09:36:02       28 阅读
  11. 概率论原理精解【2】

    2024-07-15 09:36:02       25 阅读
  12. 刷题2路1线

    2024-07-15 09:36:02       21 阅读
  13. 面向对象编程的6大原则

    2024-07-15 09:36:02       23 阅读
  14. ArduPilot开源代码之AP_AHRS_View

    2024-07-15 09:36:02       20 阅读