>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Python

Cómo crear un avatar 4D animable a partir de un par de fotos usando CAP4D

Vista previa

Crear cabezas 3D controlables a partir de una o más fotos generalmente choca con el mismo muro. O bien obtienes una máscara plana sin la parte posterior de la cabeza y geometría adecuada, o necesitas un estudio con veinte cámaras sincronizadas para entrenar la red neuronal.

Hace unos días me encontré con el repositorio CAP4D de investigadores de la Universidad de Toronto y LG Electronics, aceptado en CVPR 2025. Los autores liberaron un pipeline que toma un conjunto arbitrario de fotos o un video corto desde una cámara monocular y construye un avatar 4D completamente animable basado en Gaussian Splatting 3D.

Qué hay bajo el capó

Si desglosamos la arquitectura, el pipeline consiste en cuatro etapas:

  1. Seguimiento facial vía FLAME. El script procesa los frames de origen a través de una herramienta de seguimiento 3D (Pixel3DMM o el próximo FlowFace), ajustando los parámetros de la cabeza al modelo paramétrico FLAME.
  2. Diffusión Multi-Vista (MMDM). Aquí los autores tomaron Stable Diffusion y ControlNet, afinándolos para generar vistas consistentes de la cabeza en diferentes expresiones faciales y poses. La red de difusión literalmente "completa" la cara en ángulos que no estaban presentes en las fotos originales.
  3. Entrenamiento Gaussiano (Gaussian Splatting). Se entrena una representación basada en GaussianAvatars con las imágenes generadas y las de origen. Los gaussianos están vinculados a la malla poligonal de FLAME, proporcionando geometría estable durante las deformaciones.
  4. Animación y exportación PLY. El avatar terminado puede ser controlado por parámetros de archivos existentes o transferir expresiones faciales desde cualquier otro video. El resultado se exporta a un archivo .ply que se abre directamente en el navegador mediante el motor Brush.

Instalación y primeros obstáculos

El README describe la configuración estándar del entorno Conda, pero hay un par de puntos donde es fácil tropezar:

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

A continuación, necesitas construir PyTorch3D manualmente con soporte para CUDA:

export FORCE_CUDA=1
pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"

Para trabajar con el modelo paramétrico, necesitas registrarte en el sitio web de FLAME (gratuito para uso no comercial) y configurar las variables de entorno:

export FLAME_USERNAME=your_flame_user_name
export FLAME_PWD=your_flame_password

bash scripts/download_flame.sh 
bash scripts/download_mmdm_weights.sh

Si el script de descarga falla debido a problemas de versión de NumPy, el repositorio proporciona amablemente una utilidad scripts/fixes/fix_flame_pickle.py.

Prueba rápida con personajes listos para usar

Para verificar que todos los kernels CUDA y bibliotecas estén correctamente instalados, los autores añadieron una ejecución de prueba:

bash scripts/test_pipeline.sh

Si un video de Nikola Tesla se renderiza en examples/debug_output/, tu entorno está configurado correctamente. A continuación, puedes construir los ejemplos listos para usar (Tesla, Lincoln o el autor del repositorio Felix):

bash scripts/generate_tesla.sh

El script generará un archivo de animación exported_animation.ply. Puedes subirlo a su visor web en GitHub Pages y rotar la cámara con el ratón directamente en la ventana del navegador a 60 FPS.

Ejecutar con tus propios datos

Cuando quieras dar vida a tu propia cara o un personaje de un video, el proceso es un poco más complejo. Necesitarás el repositorio Pixel3DMM para seguimiento monocular:

export PIXEL3DMM_PATH=$(realpath "../PATH/TO/pixel3dmm")
export CAP4D_PATH=$(realpath "./")
bash scripts/install_pixel3Dmm.sh

A continuación, ejecuta el seguimiento en la carpeta con las fotos y el video objetivo del que se extraen las expresiones:

# Трекинг исходных фотографий
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/

Genera vistas sintéticas con el modelo de difusión:

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/

Ajusta los gaussianos a la geometría:

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

Para quienes no quieran llamar a los pasos individualmente, los autores empaquetaron todo el pipeline en un único script bash:

bash scripts/generate_avatar.sh examples/input/my_face/cam0/ examples/output/my_avatar/ default examples/input/animation/driving.mp4

Hardware y piedras en el camino

El pipeline consume muchos recursos. La etapa MMDM utiliza toda la GPU disponible, consume una cantidad considerable de VRAM y requiere 64 GB de RAM. En una sola GPU de consumidor, la generación de imágenes puede tardar un par de horas.

La segunda matiz está relacionada con el seguimiento. Actualmente, el script principal depende de Pixel3DMM de terceros, que a veces falla en ángulos complejos. Los autores entrenaron sus pesos de difusión con anotaciones de FlowFace, pero el módulo de FlowFace en sí promete lanzarse pronto en el repositorio. Por esto, las generaciones personalizadas pueden verse ligeramente menos nítidas que las demostraciones oficiales.

Para quién es este proyecto

Si estás trabajando en renderizado neuronal, avatares digitales para juegos, animación para proyectos independientes, o simplemente explorando Gaussian Splatting 3D, el código de CAP4D definitivamente vale la pena revisar. Demuestra muy bien cómo combinar difusión 2D con una representación 3D a través de la estricta malla paramétrica de FLAME, evitando el problema de los puntos de vista insuficientes.

Para un inicio rápido, recomiendo primero jugar con los presets listos para usar con Lincoln y Tesla para evaluar el rendimiento del renderizador web, y solo entonces pasar a construir pipelines personalizados con tu propio conjunto de datos.

Proyectos relacionados