Para obtener resultados más visuales, visite nuestra página de proyecto.
Para obtener más información, consulte nuestro documento.
Clone nuestro entorno e instale las dependencias necesarias:
conda env create -f environment.yml
conda activate occfusion
conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.4 -c pytorch -c nvidia
pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn
pip install " git+https://github.com/facebookresearch/pytorch3d.git "
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl
Proporcionamos código de entrenamiento/renderizado para las 6 secuencias de OcMotion muestreadas por Wild2Avatar. Si encuentra útiles las secuencias preprocesadas, considere citar Wild2Avatar y CHOMP.
Descargue las secuencias procesadas aquí y descomprímalas en el directorio ./data/
. La estructura de ./data/
debería verse así:
./
├── ...
└── data/
├── 0011_02_1_w2a/
├── images/
├── masks/
└── ...
├── 0011_02_2_w2a/
├── 0013_02_w2a/
├── 0038_04_w2a/
├── 0039_02_w2a/
└── 0041_00_w2a/
Regístrese y descargue el modelo SMPL neutral aquí. Coloque los modelos descargados en la carpeta ./assets/
.
Para permitir un SDS de espacio canónico más eficiente, el lienzo OpenPose para poses 2D canónicas está precalculado y se puede descargar aquí. Coloque la carpeta descargada en la carpeta: ./assets/
.
Para entrenar el modelo en la Etapa 0 (opcional, ver más abajo), necesitamos calcular máscaras binarias para pinturas humanas completas. Utilizamos SAM-HQ para la segmentación. Si desea calcular las máscaras usted mismo, descargue los pesos previamente entrenados sam_hq_vit_h.pth
aquí y coloque los pesos descargados en la carpeta: ./assets/
.
Después de una descarga exitosa, la estructura de ./assets/
debería verse así
./
├── ...
└── assets/
├── daposesv2
├── -5.png
└── ...
├── SMPL_NEUTRAL.pkl
└── sam_hq_vit_h.pth (optional)
Proporcionamos nuestros modelos previamente entrenados para todas las secuencias de OcMotion para permitir una inferencia/evaluación rápida. Descargue la carpeta ocmotion/
aquí y coloque las carpetas descargadas en ./output/
.
La formación de OccFusion consta de 4 etapas secuenciales. Las etapas 0 y 2 son opcionales y pintan al humano ocluido con modelos, sovlers e indicaciones personalizados. Diferentes combinaciones pueden afectar en gran medida los resultados de la pintura. Una pose de alta calidad condicionada a la generación humana está fuera del alcance de este trabajo. Proporcionamos nuestro código (consulte las etapas 0 y 2 a continuación) para permitir que los usuarios lo prueben ellos mismos.
Proporcionamos nuestras generaciones precalculadas (para replicar nuestros resultados en el artículo) para descargar aquí. Descomprima y coloque la carpeta oc_generations/
directamente en el directorio raíz. Si utiliza nuestros cálculos, se pueden omitir las etapas 0 y 2.
Antes del entrenamiento, recomendamos encarecidamente especificar un directorio personalizado para almacenar en caché los modelos de Hugging Face, que se descargarán automáticamente en la primera ejecución de los scripts de entrenamiento.
export HF_HOME= " YOUR_DIRECTORY "
export HF_HUB_CACHE= " YOUR_DIRECTORY "
Ejecute la etapa 0 (la etapa de inicialización) para segmentar y pintar máscaras binarias para humanos completos con SAM y difusión estable. Para ejecutar la Etapa 0 en una secuencia de OcMotion, descomente la variable SUBJECT
correspondiente y
source run_oc_stage0.sh
Las máscaras binarias segmentadas se guardarán en el directorio ./oc_genertaions/$SUBJECT/gen_masks/
.
Ejecute la Etapa 1 para iniciar la Etapa de Optimización. Para ejecutar la Etapa 1 en una secuencia de OcMotion, descomente la variable SUBJECT
correspondiente y
source run_oc_stage1.sh
El punto de control junto con las representaciones se guardarán en ./output/$SUBJECT/
.
Con un modelo optimizado, ejecute la Etapa 2 para iniciar la pintura en contexto. Para ejecutar la Etapa 2 en una secuencia de OcMotion, descomente la variable SUBJECT
correspondiente y
source run_oc_stage2.sh
Las imágenes RGB pintadas se guardarán en el directorio ./oc_genertaions/$SUBJECT/incontext_inpainted/
.
Por último, con las imágenes RGB pintadas y el punto de control del modelo optimizado, ejecute la Etapa 3 para iniciar la Etapa de Refinamiento. Para ejecutar la Etapa 3 en una secuencia de OcMotion, descomente la variable SUBJECT
correspondiente y
source run_oc_stage1.sh
El punto de control junto con las representaciones se guardarán en ./output/$SUBJECT/
.
En las etapas 1 y 3, se activará automáticamente un proceso de renderizado una vez finalizada la capacitación. Para renderizar explícitamente en un punto de control entrenado, ejecute
source render.sh
Esta base de código se basa en GauHuman. Las guías SDS están tomadas de DreamGaussian.
¡Consulte también nuestros trabajos anteriores sobre renderizado humano ocluido! OccNeRF y Wild2Avatar.
Si encuentra útil este repositorio en su trabajo o investigación, cite:
@inproceedings { occfusion ,
title = { OccFusion: Rendering Occluded Humans with Generative Diffusion Priors } ,
author = { Sun, Adam and Xiang, Tiange and Delp, Scott and Fei-Fei, Li and Adeli, Ehsan } ,
booktitle = { The Thirty-eighth Annual Conference on Neural Information Processing Systems } ,
url = { https://arxiv.org/abs/2407.00316 } ,
year = { 2024 }
}