RAD-NeRF是实现数字人的一个非常优异的模型,在发布时达到SOTA.

本文记载RAD-NeRF模型练习的具体进程,包含系统环境介绍,练习环境建立及完整练习流程.

硬件要求

练习需求运用CUDA, GPU 显存至少需求24G,练习中不同阶段占用显存不同,峰值超过22G.

系统环境

本文运用Ubuntu 22.04, Python 3.10, Pytorch 2.0.1, CUDA 11.7 作为练习的根底环境,而且在docker容器中亦进行了测验确认可作业。以下评论的各种东西装置皆默认为Ubuntu 22.04.

假如需求构建练习容器镜像,能够运用nvidia发布的nvidia/cuda:11.7.1-devel-ubuntu22.04 作为根底镜像.

为了创立一个干净的python环境预防模块版别导致的问题,引荐运用Anaconda, 装置能够参考Installation — Anaconda Doc

装置后履行如下指令创立环境并指定python版别为3.10

conda create -n python310 python=3.10
# 激活环境
conda activate python310

练习环境建立和数据处理需求用到一些东西,装置指令如下:

sudo apt update
sudo apt install build-essential
sudo apt install portaudio19-dev

假如装置很慢能够替换为aliyun的mirror

sudo sed -i 's/http://archive.ubuntu.com/https://mirrors.aliyun.com/g' /etc/apt/sources.list
sudo apt update

练习环境

练习运用RAD-NeRF原作者kiui的开源代码,能够按照以下过程进行:

  1. clone代码到本地
git clone https://github.com/ashawkey/RAD-NeRF.git --depth=1
cd RAD-NeRF

修改代码,data_utils/process.py 的 第 50 行,修改为:

fa = face_alignment.FaceAlignment(face_alignment.LandmarksType.TWO_D, flip_input=False)

原因是三方模块的字段改变.

  1. 装置依靠模块
# 设置pip运用aliyun mirror
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 提早装置pytorch指定为2.0.1
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
# 装置 requirements.txt中的依靠
pip install -r requirements.txt
  1. 编译代码库中的python extension
bash scripts/install_ext.sh

也能够通过进入extension的代码目录进行编译装置,以raymarching这个扩展为例

cd raymarching
python setup.py --install

一共有4个扩展需求装置:freqencoder,gridencoder,shencoder,raymarching.

  1. 装置pytorch3d
pip install "git+https://github.com/facebookresearch/pytorch3d.git"

留意编译装置耗时较长

  1. 下载数据处理所需的三方data
# face parsing
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
# AD-NeRF
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

访问 basel face model 下载 这个链接,填写信息后下载01_MorphableModel.mat,放置到data_utils/face_tracking/3DMM/目录下. 而且履行

cd data_utils/face_tracking
python convert_BFM.py

至此练习环境建立完成

模型练习

资料预备

练习要求资料为 fps 25, 分辨率 512*512 的视频,时长 3~5 min. 通过实测,对分辨率的要求并不严厉,测验运用例如720*720的分辨率也能够成功.

ASR 模型预备

笔者运用 wav2vec作为ASR模型,代码中直接从huggingface加载模型,假如由于网络问题无法直接运用,也能够先下载模型到本地,再修改代码为从本地途径下载,修改代码处为nerf/asr.py 92~93行:

# 修改为自己的本地模型途径
self.processor = AutoProcessor.from_pretrained('/model/wav2vec')
self.model = AutoModelForCTC.from_pretrained('/model/wav2vec').to(self.device)

另一种方式是运用huggingface的镜像站,办法能够是在环境变量中指定HF_ENDPOINT

export HF_ENDPOINT=https://hf-mirror.com

其他方式参考镜像站的文档.

预处理

练习开始前需求对视频进行预处理,处理程序会将视频按帧切分,而且进行人脸区域的分离 首先将视频文件放到data目录下,例如视频名称为obama.mp4,就放在 data/obama/obama.mp4,然后履行:

python data_utils/process.py data/obama/obama.mp4

履行成功后能够看到目录结构为

|-- aud.wav
|-- aud_eo.npy
|-- bc.jpg
|-- obama.mp4
|-- gt_imgs
|-- ori_imgs
|-- parsing
|-- torso_imgs
|-- track_params.pt
|-- transforms_train.json
`-- transforms_val.json

练习

练习分为3步

  1. 练习head
python main.py data/obama/ --workspace trial_obama/ -O --iters 200000

留意这儿的参数 data/obama 是数据目录,根据自己的文件命名 --workspace参数 trial_obama 是我们自己能够指定的值,能表达意思即可

  1. finetune lips
python main.py data/obama/ --workspace trial_obama/ -O --iters 250000 --finetune_lips

这儿的途径要和第1步的保持一致,由于是在第1步的根底上进行的唇形 finetune.

  1. 练习torso
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --head_ckpt <head>.pth --iters 200000

这儿的--worksapce参数trial_obama_torso 是自行指定的一个新目录,用来放torso的权重文件,--head_ckpt 值是第2步的产出物, 在我们比如中,就是 trial_obama/checkpoints/ngp_ep0084.pth,数字可能会不同,由于视频不同,通过的epoch也会不同,文件中的数字代表了练习的epoch.

模型文件

练习完成后,推理阶段需求的文件有:

  • data/transforms_train.json
  • data/bc.jpg
  • trial_obama_torso/checkpoints/ngp_epxxxx.pth 这些文件根据需求放到履行推理所要求的途径下即可

参考文档

github.com/ashawkey/RA…