如何使用 CAP4D 从几张照片构建可动画化的 4D Avatar

仅凭一张或几张照片创建可控的 3D 头部通常会遇到同样的瓶颈:要么只能得到没有后脑勺和正确几何结构的平面遮罩,要么需要配备二十台同步摄像头的专业工作室来训练神经网络。
几天前我偶然发现了多伦多大学和 LG 电子的研究人员发布的 CAP4D 仓库,已被 CVPR 2025 接收。作者发布了一个管道,可以接收任意数量的照片或单目相机拍摄的短视频,基于 3D Gaussian Splatting 构建完全可动画化的 4D Avatar。
项目核心原理
如果分解架构,管道包含四个阶段:
- 通过 FLAME 进行人脸追踪。脚本通过 3D 追踪工具(Pixel3DMM 或即将推出的 FlowFace)处理源帧,将头部参数拟合到 FLAME 参数化模型。
- 多视角扩散(MMDM)。作者在此对 Stable Diffusion 和 ControlNet 进行了微调,以生成不同面部表情和姿态下的一致头部视图。扩散网络实际上是在"补全"原始照片中不存在的角度的脸部。
- 高斯训练(Gaussian Splatting)。基于 GaussianAvatars 的表示在生成图像和源图像上进行训练。高斯分布绑定到 FLAME 多边形网格,在变形过程中提供稳定的几何结构。
- 动画和 PLY 导出。完成的 Avatar 可以由现有文件的参数驱动,或从任何其他视频中转移面部表情。结果导出为
.ply文件,可通过 Brush 引擎直接在浏览器中打开。
安装和初始障碍
README 描述了标准的 Conda 环境设置,但有几个地方容易踩坑:
git clone https://github.com/felixtaubner/cap4d/
cd cap4d
conda create --name cap4d_env python=3.10
conda activate cap4d_env
pip install -r requirements.txt
export PYTHONPATH=$(realpath "./"):$PYTHONPATH
接下来需要手动构建支持 CUDA 的 PyTorch3D:
export FORCE_CUDA=1
pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"
要使用参数化模型,需要在 FLAME 网站注册(非商业用途免费)并设置环境变量:
export FLAME_USERNAME=your_flame_user_name
export FLAME_PWD=your_flame_password
bash scripts/download_flame.sh
bash scripts/download_mmdm_weights.sh
如果下载脚本因 NumPy 版本问题失败,仓库提供了 scripts/fixes/fix_flame_pickle.py 实用工具。
现成角色的快速测试
为验证所有 CUDA 内核和库是否正确安装,作者添加了测试运行:
bash scripts/test_pipeline.sh
如果 Nikola Tesla 的视频能在 examples/debug_output/ 中渲染,说明环境配置正确。接下来可以构建现成的示例(Tesla、Lincoln 或仓库作者 Felix):
bash scripts/generate_tesla.sh
脚本会输出动画文件 exported_animation.ply。可以上传到 GitHub Pages 上的网页查看器,直接在浏览器窗口中用鼠标旋转相机,达到 60 FPS。
运行自己的数据
当你想让自己的面孔或视频中的角色动起来时,过程会稍微复杂一些。需要 Pixel3DMM 仓库进行单目追踪:
export PIXEL3DMM_PATH=$(realpath "../PATH/TO/pixel3dmm")
export CAP4D_PATH=$(realpath "./")
bash scripts/install_pixel3Dmm.sh
接下来对照片文件夹和用于提取表情的目标视频运行追踪:
# Трекинг исходных фотографий
bash scripts/track_video_pixel3dmm.sh examples/input/my_face/cam0/ examples/output/custom/reference_tracking/
# Трекинг видео-драйвера с движениями
bash scripts/track_video_pixel3dmm.sh examples/input/animation/driving.mp4 examples/output/custom/driving_video_tracking/
使用扩散模型生成合成视图:
python cap4d/inference/generate_images.py \
--config_path configs/generation/default.yaml \
--reference_data_path examples/output/custom/reference_tracking/ \
--output_path examples/output/custom/mmdm/
将高斯分布拟合到几何结构:
python gaussianavatars/train.py \
--config_path configs/avatar/default.yaml \
--source_paths examples/output/custom/mmdm/reference_images/ examples/output/custom/mmdm/generated_images/ \
--model_path examples/output/custom/avatar/ \
--interval 5000
对于不想逐个调用步骤的人,作者将整个管道打包成了一个 bash 脚本:
bash scripts/generate_avatar.sh examples/input/my_face/cam0/ examples/output/my_avatar/ default examples/input/animation/driving.mp4
硬件和注意事项
管道资源消耗很大。MMDM 阶段会利用所有可用 GPU,占用大量显存,并需要 64 GB 内存。在单块消费级 GPU 上,图像生成可能需要几个小时。
第二个细节与追踪有关。目前主脚本依赖第三方 Pixel3DMM,有时在复杂角度上会失败。作者使用 FlowFace 的标注训练了扩散权重,但 FlowFace 模块本身承诺即将在仓库中发布。因此自定义生成的效果可能比官方演示略显不够锐利。
项目适用人群
如果你从事神经渲染、游戏数字 Avatar、独立项目动画,或者只是想探索 3D Gaussian Splatting,CAP4D 代码绝对值得一看。它很好地展示了如何通过严格的 FLAME 参数化网格将 2D 扩散与 3D 表示相结合,从而绕过视角不足的问题。
快速入门建议先使用 Lincoln 和 Tesla 的现成预设来评估网页渲染器性能,然后再在自己的数据集上构建自定义管道。
相关项目