怎么微调GeneFace Plus Plus

AI技术
小华
2026-07-16

GeneFace++(GeneFace Plus Plus)是一种基于 NeRF 和音频驱动的高保真说话头生成模型。微调(Fine-tuning)它的核心目标是:用你自己的视频数据,训练一个属于你自己的说话人模型(Speaker-Specific Model)

以下是基于官方 GitHub 仓库(GeneFacePlusPlus)的详细微调步骤和避坑指南。

1. 环境准备 (Environment Setup)

官方推荐使用 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 ../../../

2. 数据准备 (Data Preparation)

这是最耗时的一步。你需要准备一个目标人物的视频(建议 3-10 分钟,高清,正面,少遮挡)。

目录结构

建议按如下结构存放数据:

data/
└── my_speaker/
├── raw_video.mp4       # 原始视频
├── audio.wav           # 提取的音频 (16kHz)
├── images/             # 提取的视频帧 (25fps)
├── motions/            # 提取的3DMM参数
└── motions_sync/       # 对齐后的参数

运行数据处理脚本

GeneFace++ 提供了一套完整的预处理脚本。你需要依次运行以下命令(具体参数请参考 data/process_data.sh 或官方文档):

  1. 提取音频和图像
# 提取音频
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
  1. 提取 3DMM 运动参数 (FaceMotions)

使用 deep_3drecon 提取表情参数。

# 假设你在 data/ 目录下
python data/process_video/extract_3dmm.py --input_dir data/my_speaker/images --output_dir data/my_speaker/motions
  1. 音频特征提取 (Hubert)

将音频转换为 HuBERT 特征。

python data/process_audio/extract_hubert.py --wav_path data/my_speaker/audio.wav --out_dir data/my_speaker/hubert
  1. 数据对齐与切分

将长视频切分成小段(例如每段 10 秒),并生成训练所需的 dataset.json

python data/process_data/process_lrs.py --data_root data/my_speaker --split train

3. 微调流程 (Fine-tuning Pipeline)

GeneFace++ 的训练分为三个主要阶段。虽然官方提供了预训练模型,但微调时通常建议分阶段进行,或者至少冻结部分权重

阶段一:训练音频到运动的映射 (Audio2Motion)

这是最关键的一步,目的是让模型学会“听到这个声音,嘴型应该动成什么样”。

  • 输入:HuBERT 音频特征。
  • 输出:3DMM 运动参数。
# 修改 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

阶段二:训练运动到 NeRF (Motion2NeRF / Renderer)

这一步训练渲染器,根据 3DMM 参数生成人脸图像。

  • 注意:这一步非常吃显存。
python scripts/train.py --config configs/train_nerf.yml \
--gpus 0 \
--log_dir logs/my_speaker_nerf

阶段三:训练后处理 (Post-Processing / Super-Resolution)

这一步通常是训练一个 2D 超分网络,让生成的脸更清晰,贴合原图纹理。

4. 简化微调方案 (推荐)

如果你觉得全流程太复杂,或者显存不够,可以采用轻量级微调策略

  1. 仅微调 Audio2Motion

下载官方提供的通用 NeRF 模型(Generic Model),只训练音频到嘴型的映射。这样只需要较少的数据和算力。

  1. 使用 LoRA

如果官方代码支持(或者你可以修改代码),在 NeRF 的 MLP 层加入 LoRA 权重,可以大幅减少训练参数量。

5. 推理测试 (Inference)

训练完成后,使用你训练好的 checkpoint 进行推理:

# 修改 configs/inference.yml
# 修改 checkpoint_path 指向你训练好的模型
# 修改 audio_path 指向驱动音频
python scripts/infer.py --config configs/inference.yml

6. 常见报错与解决 (Troubleshooting)

  1. CUDA Extension 编译失败
  • 错误:nvcc fatal : Unsupported gpu architecture 'compute_89'
  • 解决:检查你的 CUDA 版本和 GPU 算力。如果是 40 系显卡,确保 CUDA >= 11.8。
  1. 显存不足 (OOM)
  • 在配置文件中减小 batch_size
  • 降低图像分辨率(如从 512 降到 256)。
  1. 3DMM 提取报错
  • 确保 deep_3drecon 已正确安装,并且 face_recon 的模型权重已下载到指定路径。
  1. 嘴型对不上 (Sync Error)
  • 通常是音频帧率和视频帧率不匹配。确保视频是 25fps,音频是 16kHz。

总结

微调 GeneFace++ 的核心在于数据质量。视频越清晰、光线越好、正脸越多,效果越好。建议先跑通官方提供的 Demo 数据,再替换成自己的数据。

亿速云提供售前/售后服务

售前业务咨询

售后技术保障

400-100-2938

7*24小时售后电话

官方微信小程序