Pour plus de résultats visuels, consultez notre page de projet.
Pour plus de détails, veuillez vous référer à notre article.
Veuillez cloner notre environnement et installer les dépendances nécessaires :
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
Nous fournissons du code de formation/rendu pour les 6 séquences OcMotion échantillonnées par Wild2Avatar. Si vous trouvez les séquences prétraitées utiles, pensez à citer Wild2Avatar et CHOMP.
Veuillez télécharger les séquences traitées ici et décompressez les séquences téléchargées dans le répertoire ./data/
. La structure de ./data/
devrait ressembler à :
./
├── ...
└── data/
├── 0011_02_1_w2a/
├── images/
├── masks/
└── ...
├── 0011_02_2_w2a/
├── 0013_02_w2a/
├── 0038_04_w2a/
├── 0039_02_w2a/
└── 0041_00_w2a/
Veuillez vous inscrire et télécharger le modèle SMPL neutre ici. Mettez les modèles téléchargés dans le dossier ./assets/
.
Pour permettre un SDS spatial canonique plus efficace, le canevas OpenPose pour les poses 2D canoniques est précalculé et peut être téléchargé ici. Mettez le dossier téléchargé dans le dossier : ./assets/
.
Pour entraîner le modèle à l'étape 0 (facultatif, voir ci-dessous), nous devons calculer des masques binaires pour des inpaintings humains complets. Nous avons utilisé SAM-HQ pour la segmentation. Si vous souhaitez calculer les masques vous-même, veuillez télécharger les poids pré-entraînés sam_hq_vit_h.pth
ici et placez les poids téléchargés dans le dossier : ./assets/
.
Après un téléchargement réussi, la structure de ./assets/
devrait ressembler à
./
├── ...
└── assets/
├── daposesv2
├── -5.png
└── ...
├── SMPL_NEUTRAL.pkl
└── sam_hq_vit_h.pth (optional)
Nous fournissons nos modèles pré-entraînés pour toutes les séquences OcMotion afin de permettre une inférence/évaluation rapide. Veuillez télécharger le dossier ocmotion/
ici et placez les dossiers téléchargés dans ./output/
.
La formation d'OccFusion se compose de 4 étapes séquentielles. Les étapes 0 et 2 sont facultatives et repeignent l'humain occlus avec des modèles, des solutions et des invites personnalisés. Différentes combinaisons peuvent avoir un impact considérable sur les résultats de l'inpainting. Une génération humaine conditionnée par une pose de haute qualité sort du cadre de ce travail. Nous fournissons notre code (voir Étape 0 et Étape 2 ci-dessous) pour permettre aux utilisateurs de s'essayer eux-mêmes.
Nous proposons nos générations précalculées (pour reproduire nos résultats dans l'article) à télécharger ici. Veuillez décompresser et placer le dossier oc_generations/
directement dans le répertoire racine. Si vous utilisez nos calculs, les étapes 0 et 2 peuvent être ignorées.
Avant la formation, nous vous recommandons fortement de spécifier un répertoire personnalisé pour la mise en cache des modèles Hugging Face, qui sera téléchargé automatiquement lors de la première exécution des scripts de formation.
export HF_HOME= " YOUR_DIRECTORY "
export HF_HUB_CACHE= " YOUR_DIRECTORY "
Exécutez l’étape 0 (l’étape d’initialisation) pour segmenter et peindre des masques binaires pour des humains complets avec SAM et Stable Diffusion. Pour exécuter l'étape 0 sur une séquence OcMotion, décommentez la variable SUBJECT
correspondante et
source run_oc_stage0.sh
Les masques binaires segmentés seront enregistrés dans le répertoire ./oc_genertaions/$SUBJECT/gen_masks/
.
Exécutez l'étape 1 pour démarrer l'étape d'optimisation. Pour exécuter l'étape 1 sur une séquence OcMotion, décommentez la variable SUBJECT
correspondante et
source run_oc_stage1.sh
Le point de contrôle ainsi que les rendus seront enregistrés dans ./output/$SUBJECT/
.
Avec un modèle optimisé, exécutez l'étape 2 pour lancer l'inpainting incontext. Pour exécuter l'étape 2 sur une séquence OcMotion, décommentez la variable SUBJECT
correspondante et
source run_oc_stage2.sh
Les images RVB peintes seront enregistrées dans le répertoire ./oc_genertaions/$SUBJECT/incontext_inpainted/
.
Enfin, avec les images RVB peintes et le point de contrôle du modèle optimisé, exécutez l'étape 3 pour démarrer l'étape de raffinement. Pour exécuter l'étape 3 sur une séquence OcMotion, décommentez la variable SUBJECT
correspondante et
source run_oc_stage1.sh
Le point de contrôle ainsi que les rendus seront enregistrés dans ./output/$SUBJECT/
.
Aux étapes 1 et 3, un processus de rendu sera déclenché automatiquement une fois la formation terminée. Pour effectuer un rendu explicite sur un point de contrôle entraîné, exécutez
source render.sh
Cette base de code est construite sur GauHuman. Les directives SDS sont empruntées à DreamGaussian.
Consultez également nos travaux antérieurs sur le rendu humain occlus ! OccNeRF et Wild2Avatar.
Si vous trouvez ce dépôt utile dans votre travail ou vos recherches, veuillez citer :
@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 }
}