Para resultados mais visuais, confira nossa página do projeto.
Para obter detalhes, consulte nosso artigo.
Clone nosso ambiente e instale as dependências necessárias:
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
Fornecemos código de treinamento/renderização para as 6 sequências OcMotion que são amostradas pelo Wild2Avatar. Se você achar as sequências pré-processadas úteis, considere citar Wild2Avatar e CHOMP.
Faça download das sequências processadas aqui e descompacte as sequências baixadas no diretório ./data/
. A estrutura de ./data/
deve ser semelhante a:
./
├── ...
└── data/
├── 0011_02_1_w2a/
├── images/
├── masks/
└── ...
├── 0011_02_2_w2a/
├── 0013_02_w2a/
├── 0038_04_w2a/
├── 0039_02_w2a/
└── 0041_00_w2a/
Por favor, registre-se e baixe o modelo SMPL neutro aqui. Coloque os modelos baixados na pasta ./assets/
.
Para permitir SDS de espaço canônico mais eficiente, a tela OpenPose para poses 2D canônicas é pré-computada e pode ser baixada aqui. Coloque a pasta baixada na pasta: ./assets/
.
Para treinar o modelo no Estágio 0 (opcional, veja abaixo), precisamos calcular máscaras binárias para pinturas humanas completas. Utilizamos SAM-HQ para segmentação. Se você deseja calcular as máscaras por conta própria, baixe os pesos pré-treinados sam_hq_vit_h.pth
aqui e coloque os pesos baixados na pasta: ./assets/
.
Após o download bem-sucedido, a estrutura de ./assets/
deve ser semelhante a
./
├── ...
└── assets/
├── daposesv2
├── -5.png
└── ...
├── SMPL_NEUTRAL.pkl
└── sam_hq_vit_h.pth (optional)
Fornecemos nossos modelos pré-treinados para todas as sequências OcMotion para permitir inferência/avaliação rápida. Faça o download da pasta ocmotion/
aqui e coloque as pastas baixadas em ./output/
.
O treinamento do OccFusion consiste em 4 etapas sequenciais. Os estágios 0 e 2 são opcionais e pintam o ser humano ocluído com modelos, avisos e prompts personalizados. Diferentes combinações podem impactar muito os resultados da pintura. Uma pose de alta qualidade condicionada à geração humana está fora do escopo deste trabalho. Fornecemos nosso código (veja Estágio 0 e Estágio 2 abaixo) para permitir que os usuários experimentem.
Fornecemos nossas gerações pré-computadas (para replicar nossos resultados no artigo) para download aqui. Descompacte e coloque a pasta oc_generations/
diretamente no diretório raiz. Se você usar nossos cálculos, os estágios 0 e 2 podem ser ignorados.
Antes do treinamento, é altamente recomendável especificar um diretório personalizado para armazenar em cache os modelos do Hugging Face, que será baixado automaticamente na primeira execução dos scripts de treinamento.
export HF_HOME= " YOUR_DIRECTORY "
export HF_HUB_CACHE= " YOUR_DIRECTORY "
Execute o Estágio 0 (o Estágio de Inicialização) para segmentar e pintar máscaras binárias para humanos completos com SAM e Difusão Estável. Para executar o Estágio 0 em uma sequência OcMotion, remova o comentário da variável SUBJECT
correspondente e
source run_oc_stage0.sh
As máscaras binárias segmentadas serão salvas no diretório ./oc_genertaions/$SUBJECT/gen_masks/
.
Execute o Estágio 1 para iniciar o Estágio de Otimização. Para executar o Estágio 1 em uma sequência OcMotion, remova o comentário da variável SUBJECT
correspondente e
source run_oc_stage1.sh
O ponto de verificação junto com as renderizações serão salvos em ./output/$SUBJECT/
.
Com um modelo otimizado, execute o Estágio 2 para iniciar a pintura incontextual. Para executar o Estágio 2 em uma sequência OcMotion, remova o comentário da variável SUBJECT
correspondente e
source run_oc_stage2.sh
As imagens RGB pintadas serão salvas no diretório ./oc_genertaions/$SUBJECT/incontext_inpainted/
.
Por último, com as imagens RGB pintadas e o ponto de verificação do modelo otimizado, execute o Estágio 3 para iniciar o Estágio de Refinamento. Para executar o Estágio 3 em uma sequência OcMotion, remova o comentário da variável SUBJECT
correspondente e
source run_oc_stage1.sh
O ponto de verificação junto com as renderizações serão salvos em ./output/$SUBJECT/
.
Nas Etapas 1 e 3, um processo de renderização será acionado automaticamente após o término do treinamento. Para renderizar explicitamente em um ponto de verificação treinado, execute
source render.sh
Esta base de código é construída no GauHuman. As orientações SDS são emprestadas do DreamGaussian.
Confira também nossos trabalhos anteriores sobre renderização humana ocluída! OccNeRF e Wild2Avatar.
Se você achar este repositório útil em seu trabalho ou pesquisa, 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 }
}