Esta é a implementação oficial do artigo CommonScenes: Generating Commonsense 3D Indoor Scenes with Scene Graph Diffusion . Com base no modelo de difusão, propomos um método para gerar cenas 3D inteiras a partir de gráficos de cenas, abrangendo seu layout e geometrias 3D de forma holística.
Site | Arxiv
Guangyao Zhai *, Evin Pınar Örnek *, Shun-Cheng Wu, Yan Di, Federico Tombari, Nassir Navab e Benjamin Busam. (*Contribuição igual.)
NeuroIPS 2023
Baixe o código e vá para a pasta.
clone do git https://github.com/ymxlzgy/commonscenescd commonscenes
Nós testamos no Ubuntu 20.04 com Python 3.8, PyTorch 1.11.0, CUDA 11.3 e Pytorch3D.
conda create -n commonscenes python = 3.8conda ativar commonscenespip instalar -r requisitos.txt pip instalar einops omegaconf tensorboardx open3d
Para instalar o CLIP, siga este repositório OpenAI CLIP:
pip instalar ftfy regex tqdmpip instalar git+https://github.com/openai/CLIP.git
Configure o cálculo adicional da distância do chanfro para avaliação:
cd ./extensionpython setup.py instalar
Baixe o conjunto de dados 3D-FRONT de seu site oficial.
Pré-processe o conjunto de dados seguindo ATISS.
Baixe 3D-FUTURO-SDF. Isso é processado por nós mesmos nas malhas 3D-FUTURE usando ferramentas do SDFusion.
Siga esta página para baixar o SG-FRONT e acessar mais informações.
Crie uma pasta chamada FRONT
e copie todos os arquivos para ela.
A estrutura deve ser semelhante a esta:
FRONT |--3D-FRONT |--3D-FRONT_preprocessed (by ATISS) |--threed_front.pkl (by ATISS) |--3D-FRONT-texture |--3D-FUTURE-model |--3D-FUTURE-scene |--3D-FUTURE-SDF |--All SG-FRONT files (.json and .txt)
Essencial: Baixe o modelo VQ-VAE pré-treinado daqui para a pasta scripts/checkpoint
.
Opcional: fornecemos dois modelos treinados de CommonScenes disponíveis aqui.
Para treinar os modelos, execute:
cd scripts python train_3dfront.py --exp /media/ymxlzgy/Data/graphto3d_models/balancing/all --room_type livingroom --dataset /path/to/FRONT --residual True --network_type v2_full --with_SDF True --with_CLIP True --batchSize 4 --workers 4 --loadmodel False --nepoch 10000 --large False
--room_type
: salas para treinar, por exemplo, sala de estar, sala de jantar, quarto e tudo mais. Treinamos todas as salas juntas na implementação.
--network_type
: a rede a ser treinada. v1_box
é Graph-to-Box, v1_full
é Graph-to-3D (versão DeepSDF), v2_box
é o ramo de layout do CommonScenes e v2_full
é CommonScenes. (Observação: se você deseja treinar v1_full
, malhas e códigos reconstruídos adicionais pelo DeepSDF também devem ser baixados aqui e também copiados para FRONT
).
--with_SDF
: definido como True
se treinar v2_full.
--with_CLIP
: definido como True
se treinar v2_box ou v2_full, e não usado em outros casos.
--batch_size
: o tamanho do lote para o treinamento da ramificação de layout. ( Nota: o da ramificação da forma está em v2_full.yaml
e v2_full_concat.yaml
. O significado de cada tamanho de lote pode ser encontrado no Material Suplementar G.1.)
--large
: o padrão é False
, True
significa categorias mais concretas.
Fornecemos três exemplos aqui: Graph-to-3D (versão DeepSDF), Graph-to-Box, CommonScenes. A GPU recomendada é uma única A100 para CommonScenes, embora 3090 também possa treinar a rede com um tamanho de lote menor na ramificação de forma.
Para avaliar os modelos, execute:
cd scripts python eval_3dfront.py --exp /media/ymxlzgy/Data/graphto3d_models/balancing/all --epoch 180 --visualize False --evaluate_diversity False --num_samples 5 --gen_shape False --no_stool True
--exp
: onde você armazena os modelos.
--gen_shape
: defina True
se quiser fazer com que a ramificação da forma baseada em difusão funcione.
--evaluate_diversity
: defina True
se desejar calcular a diversidade. Isso demora um pouco, então está desabilitado por padrão.
--num_samples
: o número de rodadas do experimento, ao avaliar a diversidade.
Esta métrica visa avaliar a fidelidade no nível da cena. Para avaliar FID/KID, primeiro você precisa baixar imagens renderizadas gt de cima para baixo para métodos de recuperação e imagens renderizadas sdf para métodos generativos ou coletar renderizações modificando e executando collect_gt_sdf_images.py
. Observe que o sinalizador without_lamp
está definido como True
em nosso experimento.
Certifique-se de baixar todos os arquivos e pré-processar o 3D-FRONT. As renderizações das cenas geradas podem ser obtidas dentro de eval_3dfront.py
.
Depois de obter imagens reais e renderizações de cenas geradas, execute compute_fid_scores_3dfront.py
.
Esta métrica visa avaliar a fidelidade em nível de objeto. Siga a implementação no PointFlow. Para avaliar isso, é necessário armazenar objeto por objeto nas cenas geradas, o que pode ser feito em eval_3dfront.py
.
Depois de obter malhas de objetos, execute compute_mmd_cov_1nn.py
para obter os resultados.
Se você achar este trabalho útil em sua pesquisa, cite
@inproceedings{ zhai2023commonscenes, title={CommonScenes: Generating Commonsense 3D Indoor Scenes with Scene Graph Diffusion}, author={Zhai, Guangyao and {"O}rnek, Evin P{i}nar and Wu, Shun-Cheng and Di, Yan and Tombari, Federico and Navab, Nassir and Busam, Benjamin}, booktitle={Thirty-seventh Conference on Neural Information Processing Systems}, year={2023}, url={https://openreview.net/forum?id=1SF2tiopYJ} }
Este repositório é baseado em Graph-to-3D e SDFusion. Agradecemos aos autores por disponibilizarem seu código.
Alunos cansados terminaram o pipeline em dias agitados...