代码地址:GeneFacePlusPlus/docs/prepare_env/install_guide-zh.md at main · yerfor/GeneFacePlusPlus · GitHub
论文地址:
1、环境部署
(1)、拉取代码
git clone https://github.com/yerfor/GeneFacePlusPlus.git
(2)、作者给了环境安装指南,在目录docs/prepare_env/install_guide-zh.md中
#创建环境
conda create -n geneface python=3.9
conda activate geneface
#安装ffmpeg
conda install conda-forge::ffmpeg
#安装torch
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
#安装pytorch3d
pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"
# MMCV安装
pip install cython
pip install openmim==0.3.9
mim install mmcv==2.1.0 # 使用mim来加速mmcv安装
# 其他依赖项
sudo apt-get install libasound2-dev portaudio19-dev
pip install -r docs/prepare_env/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 构建torch-ngp
bash docs/prepare_env/install_ext.sh
安装requirements.txt如果出现以下问题:
1、
依赖版本冲突,都升级一下:
pip install --upgrade openxlab s3prl
2、
出现上面问题,先安装
apt-get install portaudio19-dev
(3)、准备3DMM模型(BFM2009) 以及其他数据
你可以从这里下载 Google Drive 或 BaiduYun Disk (密码 r8ux)。 解压缩后, BFM
文件夹中将包含8个文件。 移动这些文件到 <GeneFaceRoot>/deep_3drecon/BFM/
。该文件夹结构应该如下:
deep_3drecon/BFM/
├── 01_MorphableModel.mat
├── BFM_exp_idx.mat
├── BFM_front_idx.mat
├── BFM_model_front.mat
├── Exp_Pca.bin
├── facemodel_info.mat
├── index_mp468_from_mesh35709.npy
├── mediapipe_in_bfm53201.npy
└── std_exp.txt
2、数据预处理
(1)将视频Crop到512x512分辨率,25FPS,确保每一帧都有目标人脸,我这里用的obama说话五分钟视频
ffmpeg -i data/raw/videos/obama.mp4 -vf fps=25,scale=w=512:h=512 -qmin 1 -q:v 1 data/raw/videos/obama_512.mp4
#改名:
mv data/raw/videos/obama.mp4 data/raw/videos/obama_to_rm.mp4
mv data/raw/videos/obama_512.mp4 data/raw/videos/obama.mp4
(2)提取音频特征, 如mel, f0, hubert
export CUDA_VISIBLE_DEVICES=0
export PYTHONPATH=./
mkdir -p data/processed/videos/obama
ffmpeg -i data/raw/videos/obama.mp4 -f wav -ar 16000 data/processed/videos/obama/aud.wav
python data_gen/utils/process_audio/extract_hubert.py --video_id=obama
python data_gen/utils/process_audio/extract_mel_f0.py --video_id=obama
在提取hubert时,如果huggingface连不上,需要手动下载,并把data_gen/utils/process_audio/extract_hubert.py中的local_path改成下载后文件的地址
(3)提取图片
mkdir -p data/processed/videos/obama/gt_imgs
ffmpeg -i data/raw/videos/obama.mp4 -vf fps=25,scale=w=512:h=512 -qmin 1 -q:v 1 -start_number 0 data/processed/videos/obama/gt_imgs/%08d.jpg
python data_gen/utils/process_video/extract_segment_imgs.py --ds_name=nerf --vid_dir=data/raw/videos/obama.mp4
(4)提取lm2d_mediapipe
python data_gen/utils/process_video/extract_lm2d.py --ds_name=nerf --vid_dir=data/raw/videos/obama.mp4
Fit 3DMM
python data_gen/utils/process_video/fit_3dmm_landmark.py --ds_name=nerf --vid_dir=data/raw/videos/obama.mp4 --reset --debug --id_mode=global
(4)Binarize(将数据打包)
python data_gen/runs/binarizer_nerf.py --video_id=obama
3、训练和推理
(1)将预训练Audio2Motion模型放在目录 checkpoints/audio2motion_vae里,
可以从Google Drive 或 BaiduYun Disk (密码 9cqp) 下载预训练的Audio2Motion模型
(2)训练
训练之前将egs/datasets/may目录下所有yaml文件中的may改成你的video_id,我这里是obama,是为了可以找见data/binary/videos/{Video_ID}/trainval_dataset.npy
# 训练 Head NeRF 模型
# 模型与tensorboard会被保存在 `checkpoints/<exp_name>`
CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config=egs/datasets/May/lm3d_radnerf_sr.yaml --exp_name=motion2video_nerf/may_head --reset
# 训练 Torso NeRF 模型
CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config=egs/datasets/May/lm3d_radnerf_torso_sr.yaml --exp_name=motion2video_nerf/may_torso --hparams=head_model_dir=checkpoints/motion2video_nerf/may_head --reset
(2)推理
# 使用我们提供的推理脚本.
CUDA_VISIBLE_DEVICES=0 python inference/genefacepp_infer.py --head_ckpt= --torso_ckpt=motion2video_nerf/may_torso --drv_aud=data/raw/val_wavs/MacronSpeech.wav
# --debug 选项可以可视化一些中间过程与特征
CUDA_VISIBLE_DEVICES=0 python inference/genefacepp_infer.py --head_ckpt= --torso_ckpt=motion2video_nerf/may_torso --drv_aud=data/raw/val_wavs/MacronSpeech.wav --debug
motion2video_nerf/may_torso是训练好的模型存放的位置。
亲测8g显存可运行,生成效果优于ER-NeRF和synctalk,运行过程中有什么问题可在评论区讨论