Il s'agit de l'implémentation officielle de l'article CommonScenes : Générer des scènes d'intérieur 3D Commonsense avec diffusion de graphes de scènes . Basé sur un modèle de diffusion, nous proposons une méthode pour générer une scène 3D entière à partir de graphiques de scène, englobant sa disposition et ses géométries 3D de manière holistique.
Site Web | Arxiv
Guangyao Zhai*, Evin Pınar Örnek*, Shun-Cheng Wu, Yan Di, Federico Tombari, Nassir Navab et Benjamin Busam. (*Contribution égale.)
NeurIPS 2023
Téléchargez le code et allez dans le dossier.
git clone https://github.com/ymxlzgy/commonscenescd scènes communes
Nous l'avons testé sur Ubuntu 20.04 avec Python 3.8, PyTorch 1.11.0, CUDA 11.3 et Pytorch3D.
conda create -n commonscenes python=3.8conda activate commonscenespip install -r conditions.txt pip install einops omegaconf tensorboardx open3d
Pour installer CLIP, suivez ce dépôt OpenAI CLIP :
pip installer ftfy regex tqdmpip installer git+https://github.com/openai/CLIP.git
Configurez un calcul supplémentaire de distance de chanfrein pour l'évaluation :
cd ./extensionpython setup.py installer
Téléchargez l'ensemble de données 3D-FRONT depuis leur site officiel.
Prétraitez l’ensemble de données après ATISS.
Téléchargez 3D-FUTURE-SDF. Ceci est traité par nos soins sur les maillages 3D-FUTURE à l'aide des outils de SDFusion.
Suivez cette page pour télécharger SG-FRONT et accéder à plus d’informations.
Créez un dossier nommé FRONT
et copiez-y tous les fichiers.
La structure devrait être similaire à ceci :
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)
Essentiel : téléchargez le modèle VQ-VAE pré-entraîné à partir d'ici dans le dossier scripts/checkpoint
.
Facultatif : nous proposons deux modèles entraînés de CommonScenes disponibles ici.
Pour entraîner les modèles, exécutez :
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
: pièces à entraîner, par exemple, salon, salle à manger, chambre, et tout. Nous formons toutes les pièces ensemble à la mise en œuvre.
--network_type
: le réseau à former. v1_box
est Graph-to-Box, v1_full
est Graph-to-3D (version DeepSDF), v2_box
est la branche de mise en page de CommonScenes et v2_full
est CommonScenes. (Remarque : si vous souhaitez entraîner v1_full
, des maillages et des codes reconstruits supplémentaires par DeepSDF doivent également être téléchargés à partir d'ici, et également copiés sur FRONT
).
--with_SDF
: défini sur True
si train v2_full.
--with_CLIP
: défini sur True
si train v2_box ou v2_full, et non utilisé dans les autres cas.
--batch_size
: la taille du lot pour la formation de la branche de mise en page. ( Remarque : celle de la branche de forme se trouve dans v2_full.yaml
et v2_full_concat.yaml
. La signification de chaque taille de lot peut être trouvée dans le matériel supplémentaire G.1.)
--large
: la valeur par défaut est False
, True
signifie des catégories plus concrètes.
Nous fournissons ici trois exemples : Graph-to-3D (version DeepSDF), Graph-to-Box, CommonScenes. Le GPU recommandé est un seul A100 pour CommonScenes, bien que le 3090 puisse également entraîner le réseau avec une taille de lot inférieure sur la branche shape.
Pour évaluer l'exécution des modèles :
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
: où vous stockez les modèles.
--gen_shape
: définissez True
si vous souhaitez faire fonctionner la branche de forme basée sur la diffusion.
--evaluate_diversity
: définissez True
si vous souhaitez calculer la diversité. Cela prend un certain temps, c'est donc désactivé par défaut.
--num_samples
: le nombre de tours d'expérimentation, lors de l'évaluation de la diversité.
Cette métrique vise à évaluer la fidélité au niveau de la scène. Pour évaluer FID/KID, vous devez d'abord télécharger les images rendues gt de haut en bas pour les méthodes de récupération et les images rendues sdf pour les méthodes génératives, ou collecter les rendus en modifiant et en exécutant collect_gt_sdf_images.py
. Notez que l'indicateur without_lamp
est défini sur True
dans notre expérience.
Assurez-vous de télécharger tous les fichiers et de prétraiter le 3D-FRONT. Les rendus des scènes générées peuvent être obtenus dans eval_3dfront.py
.
Après avoir obtenu à la fois les images de vérité terrain et les rendus de scènes générés, exécutez compute_fid_scores_3dfront.py
.
Cette métrique vise à évaluer la fidélité au niveau de l'objet. Veuillez suivre l'implémentation dans PointFlow. Pour évaluer cela, vous devez stocker objet par objet dans les scènes générées, ce qui peut être fait dans eval_3dfront.py
.
Après avoir obtenu les maillages d'objets, exécutez compute_mmd_cov_1nn.py
pour avoir les résultats.
Si vous trouvez ce travail utile dans votre recherche, veuillez citer
@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} }
Ce référentiel est basé sur Graph-to-3D et SDFusion. Nous remercions les auteurs d'avoir mis leur code à disposition.
Des étudiants fatigués ont terminé le pipeline au cours de journées chargées...