GeneFace++(GeneFace Plus Plus)是一种基于 NeRF 和音频驱动的高保真说话头生成模型。微调(Fine-tuning)它的核心目标是:用你自己的视频数据,训练一个属于你自己的说话人模型(Speaker-Specific Model)。
GeneFacePlusPlus)的详细微调步骤和避坑指南。官方推荐使用 Linux 系统,并配备 NVIDIA GPU (显存建议 >= 16GB,如 3090/4090)。
# 1. 克隆仓库
git clone https://github.com/yerfor/GeneFacePlusPlus.git
cd GeneFacePlusPlus
# 2. 创建 Conda 环境
conda create -n genefacepp python=3.9 -y
conda activate genefacepp
# 3. 安装 PyTorch (根据你的 CUDA 版本,例如 CUDA 11.8)
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
# 4. 安装项目依赖
pip install -r requirements.txt
# 5. 安装自定义 CUDA 扩展 (非常重要)
# 注意:编译过程可能会报错,需要 gcc 和 nvcc 版本匹配
cd models/renderer/gs_renderer/cuda_gl
python setup.py install
cd ../../../这是最耗时的一步。你需要准备一个目标人物的视频(建议 3-10 分钟,高清,正面,少遮挡)。
建议按如下结构存放数据:
data/
└── my_speaker/
├── raw_video.mp4 # 原始视频
├── audio.wav # 提取的音频 (16kHz)
├── images/ # 提取的视频帧 (25fps)
├── motions/ # 提取的3DMM参数
└── motions_sync/ # 对齐后的参数GeneFace++ 提供了一套完整的预处理脚本。你需要依次运行以下命令(具体参数请参考 data/process_data.sh 或官方文档):
# 提取音频
ffmpeg -i data/my_speaker/raw_video.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 data/my_speaker/audio.wav
# 提取图像 (25fps)
mkdir -p data/my_speaker/images
ffmpeg -i data/my_speaker/raw_video.mp4 -vf fps=25 data/my_speaker/images/%06d.png使用 deep_3drecon 提取表情参数。
# 假设你在 data/ 目录下
python data/process_video/extract_3dmm.py --input_dir data/my_speaker/images --output_dir data/my_speaker/motions将音频转换为 HuBERT 特征。
python data/process_audio/extract_hubert.py --wav_path data/my_speaker/audio.wav --out_dir data/my_speaker/hubert将长视频切分成小段(例如每段 10 秒),并生成训练所需的 dataset.json。
python data/process_data/process_lrs.py --data_root data/my_speaker --split trainGeneFace++ 的训练分为三个主要阶段。虽然官方提供了预训练模型,但微调时通常建议分阶段进行,或者至少冻结部分权重。
这是最关键的一步,目的是让模型学会“听到这个声音,嘴型应该动成什么样”。
# 修改 config 文件,指向你的数据路径
# 配置文件通常在: configs/train_audio2motion.yml
# 修改 train_dataset/dataset_json 指向你的 data/my_speaker/dataset.json
python scripts/train.py --config configs/train_audio2motion.yml \
--gpus 0 \
--log_dir logs/my_speaker_audio2motion这一步训练渲染器,根据 3DMM 参数生成人脸图像。
python scripts/train.py --config configs/train_nerf.yml \
--gpus 0 \
--log_dir logs/my_speaker_nerf如果你觉得全流程太复杂,或者显存不够,可以采用轻量级微调策略:
下载官方提供的通用 NeRF 模型(Generic Model),只训练音频到嘴型的映射。这样只需要较少的数据和算力。
训练完成后,使用你训练好的 checkpoint 进行推理:
# 修改 configs/inference.yml
# 修改 checkpoint_path 指向你训练好的模型
# 修改 audio_path 指向驱动音频
python scripts/infer.py --config configs/inference.ymlnvcc fatal : Unsupported gpu architecture 'compute_89'batch_size。deep_3drecon 已正确安装,并且 face_recon 的模型权重已下载到指定路径。微调 GeneFace++ 的核心在于数据质量。视频越清晰、光线越好、正脸越多,效果越好。建议先跑通官方提供的 Demo 数据,再替换成自己的数据。