So erstellst du einen animierbaren 4D-Avatar aus wenigen Fotos mit CAP4D

Animierbare 3D-Köpfe aus einem oder mehreren Fotos zu erstellen, stößt meistens an dieselbe Wand. Entweder bekommt man eine flache Maske ohne Hinterkopf und ohne richtige Geometrie, oder man braucht ein Studio mit zwanzig synchronisierten Kameras, um das neuronale Netz zu trainieren.
Vor ein paar Tagen bin ich auf das CAP4D-Repository von Forschern der University of Toronto und LG Electronics gestoßen, das auf der CVPR 2025 angenommen wurde. Die Autoren haben eine Pipeline veröffentlicht, die einen beliebigen Satz Fotos oder ein kurzes Video einer monokularen Kamera entgegennimmt und einen vollständig animierbaren 4D-Avatar auf Basis von 3D Gaussian Splatting erstellt.
Was steckt unter der Haube
Wenn wir die Architektur aufschlüsseln, besteht die Pipeline aus vier Stufen:
- Gesichts-Tracking via FLAME. Das Script führt Quellbilder durch ein 3D-Tracking-Tool (Pixel3DMM oder das kommende FlowFace) und passt Kopfparameter an das FLAME-parametrische Modell an.
- Multi-View Diffusion (MMDM). Hier haben die Autoren Stable Diffusion und ControlNet genommen und sie feinabgestimmt, um konsistente Kopfansichten bei verschiedenen Gesichtsausdrücken und Posen zu generieren. Das Diffusionsnetz „vervollständigt" das Gesicht buchstäblich aus Winkeln, die in den Originalfotos nicht vorhanden waren.
- Gaussian-Training (Gaussian Splatting). Eine Repräsentation basierend auf GaussianAvatars wird auf den generierten und Quellbildern trainiert. Gaussians sind an das FLAME-Polygonnetz gebunden und bieten stabile Geometrie während der Deformationen.
- Animation und PLY-Export. Der fertige Avatar kann durch Parameter aus existierenden Dateien gesteuert werden oder Gesichtsausdrücke von jedem anderen Video übertragen. Das Ergebnis wird in eine
.ply-Datei exportiert, die direkt im Browser über die Brush-Engine geöffnet werden kann.
Installation und erste Stolperfallen
Die README beschreibt eine Standard-Conda-Umgebungseinrichtung, aber es gibt ein paar Stellen, an denen man leicht hängen bleiben kann:
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
Als Nächstes musst du PyTorch3D manuell mit CUDA-Support bauen:
export FORCE_CUDA=1
pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"
Um mit dem parametrischen Modell zu arbeiten, musst du dich auf der FLAME-Website registrieren (kostenlos für nicht-kommerzielle Nutzung) und Umgebungsvariablen setzen:
export FLAME_USERNAME=your_flame_user_name
export FLAME_PWD=your_flame_password
bash scripts/download_flame.sh
bash scripts/download_mmdm_weights.sh
Falls das Download-Skript wegen NumPy-Versionsproblemen fehlschlägt, stellt das Repository freundlicherweise ein scripts/fixes/fix_flame_pickle.py-Utility bereit.
Schnelltest mit fertigen Charakteren
Um zu verifizieren, dass alle CUDA-Kernels und Bibliotheken korrekt installiert sind, haben die Autoren einen Testlauf hinzugefügt:
bash scripts/test_pipeline.sh
Wenn ein Video von Nikola Tesla in examples/debug_output/ rendert, ist deine Umgebung korrekt eingerichtet. Als Nächstes kannst du die fertigen Beispiele bauen (Tesla, Lincoln oder der Repository-Autor Felix):
bash scripts/generate_tesla.sh
Das Skript gibt eine Animationsdatei exported_animation.ply aus. Du kannst sie in ihren Web-Viewer auf GitHub Pages hochladen und die Kamera mit der Maus direkt im Browserfenster bei 60 FPS drehen.
Ausführung auf eigenen Daten
Wenn du dein eigenes Gesicht oder einen Charakter aus einem Video zum Leben erwecken möchtest, ist der Prozess etwas aufwändiger. Du brauchst das Pixel3DMM-Repository für monokulares Tracking:
export PIXEL3DMM_PATH=$(realpath "../PATH/TO/pixel3dmm")
export CAP4D_PATH=$(realpath "./")
bash scripts/install_pixel3Dmm.sh
Führe anschließend das Tracking auf dem Ordner mit Fotos und dem Zielvideo aus, aus dem die Ausdrücke extrahiert werden:
# Трекинг исходных фотографий
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/
Generiere synthetische Ansichten mit dem Diffusionsmodell:
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/
Passe Gaussians an die Geometrie an:
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
Für diejenigen, die nicht jeden Schritt einzeln aufrufen möchten, haben die Autoren die gesamte Pipeline in ein einzelnes Bash-Skript verpackt:
bash scripts/generate_avatar.sh examples/input/my_face/cam0/ examples/output/my_avatar/ default examples/input/animation/driving.mp4
Hardware und Fallstricke
Die Pipeline ist ressourcenintensiv. Die MMDM-Stufe nutzt alle verfügbaren GPUs, verbraucht eine ordentliche Menge VRAM und erfordert 64 GB RAM. Auf einer einzelnen Consumer-GPU kann die Bildgenerierung ein paar Stunden dauern.
Die zweite Nuance bezieht sich auf das Tracking. Derzeit verlässt sich das Hauptskript auf das Drittanbieter-Tool Pixel3DMM, das bei komplexen Winkeln manchmal versagt. Die Autoren haben ihre Diffusionsgewichte mit Annotationen von FlowFace trainiert, aber das FlowFace-Modul selbst soll bald im Repository veröffentlicht werden. Aus diesem Grund können Custom-Generierungen etwas weniger scharf aussehen als die offiziellen Demos.
Für wen ist dieses Projekt gedacht
Wenn du im Bereich Neural Rendering arbeitest, digitale Avatare für Spiele, Animation für Indie-Projekte oder einfach 3D Gaussian Splatting erkundest, lohnt es sich definitiv, den CAP4D-Code anzuschauen. Er zeigt schön, wie man 2D-Diffusion mit einer 3D-Repräsentation durch das strikte FLAME-parametrische Netz kombinieren kann und damit das Problem unzureichender Blickwinkel umgeht.
Für einen schnellen Start empfehle ich, zuerst mit den fertigen Presets von Lincoln und Tesla zu spielen, um die Performance des Web-Renderers zu evaluieren, und erst dann auf eigene Daten umzusteigen und Custom-Pipelines auf deinem eigenen Dataset aufzubauen.
Ähnliche Projekte