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的开源代码,能够按照以下过程进行:
- 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)
原因是三方模块的字段改变.
- 装置依靠模块
# 设置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
- 编译代码库中的python extension
bash scripts/install_ext.sh
也能够通过进入extension的代码目录进行编译装置,以raymarching
这个扩展为例
cd raymarching
python setup.py --install
一共有4个扩展需求装置:freqencoder
,gridencoder
,shencoder
,raymarching
.
- 装置
pytorch3d
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
留意编译装置耗时较长
- 下载数据处理所需的三方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步
- 练习head
python main.py data/obama/ --workspace trial_obama/ -O --iters 200000
留意这儿的参数 data/obama
是数据目录,根据自己的文件命名 --workspace
参数 trial_obama
是我们自己能够指定的值,能表达意思即可
- finetune lips
python main.py data/obama/ --workspace trial_obama/ -O --iters 250000 --finetune_lips
这儿的途径要和第1步的保持一致,由于是在第1步的根底上进行的唇形 finetune.
- 练习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
这些文件根据需求放到履行推理所要求的途径下即可