CentOS系统下部署GeneFace++的实用技巧
一 基础环境准备
以上要点与版本建议均来自项目官方安装指引与多篇部署实践,强调使用 CUDA 11.7 + PyTorch 2.0.1 的组合以避免后续组件不兼容。
二 一键环境脚本与关键依赖
# 0) 进入项目根目录
cd GeneFacePlusPlus
# 1) 创建环境
conda create -n geneface python=3.9 -y
conda activate geneface
# 2) 多媒体与基础
conda install -c conda-forge ffmpeg -y
# 3) PyTorch 2.0.1 + cu117(若网络慢可用清华镜像通道)
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
# 4) PyTorch3D(从源码构建,耗时较长)
pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"
# 5) MMCV(openmim)
pip install cython openmim==0.3.9
mim install mmcv==2.1.0
# 6) 系统音频依赖(CentOS 7/8 常见为 alsa-lib-devel、portaudio-devel)
sudo yum install -y alsa-lib-devel portaudio-devel
# 7) 项目其余依赖
pip install -r docs/prepare_env/requirements.txt -v
# 8) 可选:构建外部扩展(若脚本存在)
bash docs/prepare_env/install_ext.sh || echo "install_ext.sh not found, skip."
# 9) 验证关键组件
python -c "import torch;print('torch:',torch.__version__,torch.cuda.is_available())"
python -c "import pytorch3d;print('pytorch3d ok')"
ffmpeg -version | head -n1三 数据准备与常见坑处理
VIDEO_ID=s1
ffmpeg -i data/raw/videos/${VIDEO_ID}.mp4 -vf fps=25,scale=512:512 -qmin 1 -q:v 1 data/raw/videos/${VIDEO_ID}_512.mp4
mv data/raw/videos/${VIDEO_ID}.mp4 data/raw/videos/${VIDEO_ID}_to_rm.mp4
mv data/raw/videos/${VIDEO_ID}_512.mp4 data/raw/videos/${VIDEO_ID}.mp4ffmpeg -i data/raw/videos/${VIDEO_ID}.mp4 -f wav -ar 16000 data/processed/videos/${VIDEO_ID}/aud.wav
export HF_ENDPOINT=https://hf-mirror.com
python data_gen/utils/process_audio/extract_hubert.py --video_id=${VIDEO_ID}
python data_gen/utils/process_audio/extract_mel_f0.py --video_id=${VIDEO_ID}mkdir -p data/processed/videos/${VIDEO_ID}/gt_imgs
ffmpeg -i data/raw/videos/${VIDEO_ID}.mp4 -vf fps=25,scale=512:512 -qmin 1 -q:v 1 -start_number 0 data/processed/videos/${VIDEO_ID}/gt_imgs/%08d.jpg
python data_gen/utils/process_video/extract_segment_imgs.py --ds_name=nerf --vid_dir=data/raw/videos/${VIDEO_ID}.mp4 --force_single_process
python data_gen/utils/process_video/extract_lm2d.py --ds_name=nerf --vid_dir=data/raw/videos/${VIDEO_ID}.mp4
python data_gen/utils/process_video/fit_3dmm_landmark.py --ds_name=nerf --vid_dir=data/raw/videos/${VIDEO_ID}.mp4 --reset --debug --id_mode=global
python data_gen/runs/binarizer_nerf.py --video_id=${VIDEO_ID}四 训练与推理的最小可用命令
# 训练 HeadNeRF
CUDA_VISIBLE_DEVICES=0 python tasks/run.py \
--config=egs/datasets/${VIDEO_ID}/lm3d_radnerf_sr.yaml \
--exp_name=motion2video_nerf/${VIDEO_ID}_head --reset
# 训练 TorsoNeRF(依赖 head 权重)
CUDA_VISIBLE_DEVICES=0 python tasks/run.py \
--config=egs/datasets/${VIDEO_ID}/lm3d_radnerf_torso_sr.yaml \
--exp_name=motion2video_nerf/${VIDEO_ID}_torso \
--hparams=head_model_dir=checkpoints/motion2video_nerf/${VIDEO_ID}_head --resetpython inference/genefacepp_infer.py \
--a2m_ckpt=checkpoints/audio2motion_vae \
--head_ckpt=checkpoints/motion2video_nerf/${VIDEO_ID}_head \
--torso_ckpt=checkpoints/motion2video_nerf/${VIDEO_ID}_torso \
--drv_aud=data/raw/val_wavs/demo.wav \
--out_name=${VIDEO_ID}_demo.mp4