0


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

简介

  数字人也称为Digital Human或Meta Human,是运用数字技术创造出来的、与人类形象接近的数字化人物形象。应用包括但不限于直播、软件制作、教育、科研等领域。
  目前数字人模型效果最好的是ER-NeRF,其借鉴了nerf体渲染的思路,在输入维度上添加了音频特征,通过音频来影响渲染效果(控制嘴型)。即:给一段某人说话的视频,再给定一段音频,经过该模型后处理后,可将原视频的嘴型与音频保持一致。
  ER-NeRF的部署教程网上的教程虽然很多,但不是很全面,经过一番折腾,终于把算法跑起来了。在这里做下总结,记录整个部署过程。


部署过程

一.下载源码

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

二.创建Conda环境

  关于conda环境安装不在此重点介绍,下面根据命令创建相应的python环境

  1. conda create -n ernerf python=3.10
  2. conda activate ernerf

三.安装依赖库

  1. 设置pip华为源,加快依赖库下载速度
  2. pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple/
  3. conda installpytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8-c pytorch -c nvidia
  4. conda installpytorch3d==0.7.4 -c pytorch3d -c pytorch -c conda-forge
  5. (下载0.7.4版本地址 https://github.com/facebookresearch/pytorch3d/releases/tag/v0.7.4)sudoapt-getinstall ffmpeg
  6. sudoapt-getinstall libasound2-dev
  7. sudoapt-getinstall portaudio19-dev python-all-dev python3-all-dev
  8. pip install-r requirements.txt
  9. pip install tensorflow-gpu==2.8.0
  10. pip installprotobuf==3.20.0

四.安装cuda 11.8

  1. 1.访问下载地址:https://developer.nvidia.com/cuda-11-8-0-download-archive
  2. 2.wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
  3. 3.sudo apt-getinstall freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
  4. 4.sudo sh cuda_11.8.0_520.61.05_linux.run
  5. 输入:accept
  6. 安装完毕之后:
  7. vim ~/.bashrc
  8. 添加以下内容:
  9. exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64
  10. exportPATH=$PATH:/usr/local/cuda-11.8/bin
  11. exportCUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.8
  12. exportHF_ENDPOINT=https://hf-mirror.com
  13. 保存之后再执行下面的命令
  14. source ~/.bashrc
  15. 验证是否安装成功:nvcc -V
  16. 原本装了其他版本的情况,需要卸载CUDA其他版本:
  17. 执行:sudo /usr/local/cuda-11.8/bin/cuda-uninstaller,选择你要协助的版本(通过键盘空白格选择)
  18. 删除对应版本:sudo rm-rf /usr/local/cuda-11.x
  19. 如果出现bash: /usr/local/cuda-11.x/bin/nvcc: No such file or directory,重新执行source ~/.bashrc

五.安装子模块

  1. pip install ./raymarching
  2. pip install ./gridencoder
  3. pip install ./freqencoder
  4. pip install ./shencoder

六.下载需要用到的模型

  1. 1.准备面部解析模型
  2. 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
  1. 2.准备用于头部姿态估计的 3DMM 模型
  2. 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
  3. 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
  4. 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
  5. 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
  1. 3.准备basel面部模型
  2. https://faces.dmi.unibas.ch/bfm/main.php?nav=1-1-0&id=details
  3. 将下载的面部模型01_MorphableModel.mat 复制到目录 data_util/face_tracking/3DMM/
  4. 运行convert_BFM.py脚本:
  5. cd data_utils/face_tracking
  6. python convert_BFM.py

七.安装cuDNN

  1. 下载地址:https://developer.nvidia.cn/rdp/cudnn-archive
  1. 解压复制复制倒前面cuda安装的目录
  2. cuda/lib64/ 下所有文件复制到 /usr/local/cuda-11.8/lib64 文件夹中:
  3. sudocp cudnn/include/* /usr/local/cuda-11.8/include
  4. sudocp cudnn/lib/* /usr/local/cuda-11.8/lib64
  1. 并添加读取权限:
  2. sudochmod a+r /usr/local/cuda-11.8/include/cudnn*
  3. sudochmod a+r /usr/local/cuda-11.8/lib64/libcudnn*

八.数据预处理

  1. 1.视频预处理,将视频放在 data/<ID>/<ID>.mp4 路径下,视频必须为 25FPS,所有帧都包含说话的人。分辨率应约为 512x512,持续时间约为 1-5 分钟。
  2. 运行脚本以处理视频:python data_utils/process.py data/<ID>/<ID>.mp4
  1. 2.处理过程
  2. task 2:生成一些音频数据,aud.npy文件。若报错,一般是protobuf版本问题。
  3. task 3:提取视频中的每帧图像。生成ori_imgs/XXX.jpg文件,会有很多jpg文件。
  4. task 4:分割人像(语义分割)。生成parsing/XX.png文件,会有很多png文件。
  5. task 5:提取背景图像。生成bc.jpg文件。是人物的背景图片。
  6. task 6:分割出身体部分与生成Ground Truth图片。生成gt_imgs/XXX.jpgtorso_imgs/XXX.png(只有躯干没有人脸的图片)。
  7. task 7:获取人脸各个点位的坐标。生成ori_imgs/XXX.lms
  8. task 8:获取人脸跟踪数据,这步要训练一个追踪模型,会很慢。生成track_params.pt文件。这部报错通常是pytorch3d的问题,注意cuda版本。
  9. task 9:生成transformers_train.jsontransforms_val.json
  1. 3.使用OpenFace读取视频中人物眨眼的数据,最后导出au_dus.csv
  2. (也可通过https://github.com/Hujiazeng/Vach/releases/tag/ckpt 下载obama.zip,里面带了默认视频的au.csv)

在这里插入图片描述

九.开始训练

  1. # 命令1:训练模型
  2. python main.py data/obama/ --workspace trial_obama/ -O--iters100000
  1. # 命令2:在命令1完成后,再多训练“25000”次,微调一下lips
  2. python main.py data/obama/ --workspace trial_obama/ -O--iters125000--finetune_lips--patch_size32
  1. # 命令3:
  2. python main.py data/obama/ --workspace trial_obama_torso/ -O--torso--head_ckpt trial_obama/checkpoints/ngp.pth --iters200000

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

十.推理

  1. 1.执行结束后,会在当前目录生成1.npy文件
  2. python data_utils/deepspeech_features/extract_ds_features.py --input1.wav
  1. 2.执行模型推理,生成对口型后的视频文件。不过生成的视频没有声音
  2. python main.py data/obama/ --workspace trial_obama_torso/ -O--torso--test--test_train--aud1.npy
  1. 3.将音频和视频合并起来
  2. ffmpeg -i trial_obama_torso/results/ngp_ep0028.mp4 -i1.wav -c:v copy -c:a aac -strict experimental 1.mp4

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


本文转载自: https://blog.csdn.net/weixin_46105038/article/details/140351046
版权归原作者 不会代码的小林 所有, 如有侵权,请联系我们删除。

“ER-NeRF对话数字人模型训练与部署”的评论:

还没有评论