Dies ist die offizielle Implementierung des Dokuments „CommonScenes: Generating Commonsense 3D Indoor Scenes with Scene Graph Diffusion“ . Basierend auf dem Diffusionsmodell schlagen wir eine Methode zur Generierung einer gesamten 3D-Szene aus Szenendiagrammen vor, die deren Layout und 3D-Geometrien ganzheitlich umfasst.
Website | Arxiv
Guangyao Zhai *, Evin Pınar Örnek *, Shun-Cheng Wu, Yan Di, Federico Tombari, Nassir Navab und Benjamin Busam. (*Gleicher Beitrag.)
NeurIPS 2023
Laden Sie den Code herunter und gehen Sie zum Ordner.
Git-Klon https://github.com/ymxlzgy/commonscenescd commonscenes
Wir haben es auf Ubuntu 20.04 mit Python 3.8, PyTorch 1.11.0, CUDA 11.3 und Pytorch3D getestet.
conda create -n commonscenes python=3.8conda activate commonscenespip install -r require.txt pip install einops omegaconf tensorboardx open3d
Um CLIP zu installieren, folgen Sie diesem OpenAI CLIP-Repo:
pip install ftfy regex tqdmpip install git+https://github.com/openai/CLIP.git
Richten Sie eine zusätzliche Berechnung des Fasenabstands zur Auswertung ein:
cd ./extensionpython setup.py installieren
Laden Sie den 3D-FRONT-Datensatz von der offiziellen Website herunter.
Verarbeiten Sie den Datensatz gemäß ATISS vor.
Laden Sie 3D-FUTURE-SDF herunter. Dies wird von uns selbst auf den 3D-FUTURE-Netzen mit Werkzeugen in SDFusion verarbeitet.
Folgen Sie dieser Seite, um SG-FRONT herunterzuladen und auf weitere Informationen zuzugreifen.
Erstellen Sie einen Ordner mit dem Namen FRONT
und kopieren Sie alle Dateien dorthin.
Der Aufbau sollte etwa so aussehen:
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)
Wichtig: Laden Sie das vorab trainierte VQ-VAE-Modell von hier in den Ordner scripts/checkpoint
herunter.
Optional: Wir stellen hier zwei trainierte Modelle von CommonScenes zur Verfügung.
Um die Modelle zu trainieren, führen Sie Folgendes aus:
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
: Zu trainierende Räume, z. B. Wohnzimmer, Esszimmer, Schlafzimmer und alle. Wir schulen alle Räume gemeinsam in der Umsetzung.
--network_type
: das zu trainierende Netzwerk. v1_box
ist Graph-to-Box, v1_full
ist Graph-to-3D (DeepSDF-Version), v2_box
ist der Layoutzweig von CommonScenes und v2_full
ist CommonScenes. (Hinweis: Wenn Sie v1_full
trainieren möchten, sollten zusätzliche rekonstruierte Netze und Codes von DeepSDF ebenfalls von hier heruntergeladen und auch nach FRONT
kopiert werden.)
--with_SDF
: auf True
gesetzt, wenn train v2_full.
--with_CLIP
: Wird auf True
gesetzt, wenn v2_box oder v2_full trainiert wird, und wird in anderen Fällen nicht verwendet.
--batch_size
: Die Stapelgröße für das Layout-Branch-Training. ( Hinweis: Der für den Shape-Zweig befindet sich in v2_full.yaml
und v2_full_concat.yaml
. Die Bedeutung der einzelnen Batch-Größen finden Sie im Zusatzmaterial G.1.)
--large
: Der Standardwert ist False
. True
bedeutet konkretere Kategorien.
Wir stellen hier drei Beispiele zur Verfügung: Graph-to-3D (DeepSDF-Version), Graph-to-Box, CommonScenes. Die empfohlene GPU ist eine einzelne A100 für CommonScenes, obwohl 3090 das Netzwerk auch mit einer geringeren Stapelgröße im Formzweig trainieren kann.
Um die Modelle auszuwerten, führen Sie Folgendes aus:
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
: Hier speichern Sie die Modelle.
--gen_shape
: Setzen Sie True
, wenn der diffusionsbasierte Formzweig funktionieren soll.
--evaluate_diversity
: Setzen Sie True
wenn Sie Diversität berechnen möchten. Dies dauert eine Weile und ist daher standardmäßig deaktiviert.
--num_samples
: Die Anzahl der Experimentrunden, wenn die Vielfalt bewertet wird.
Diese Metrik zielt darauf ab, die Wiedergabetreue auf Szenenebene zu bewerten. Um FID/KID auszuwerten, müssen Sie zunächst Top-Down-GT-gerenderte Bilder für Abrufmethoden und SDF-gerenderte Bilder für generative Methoden herunterladen oder Renderings sammeln, indem Sie collect_gt_sdf_images.py
ändern und ausführen. Beachten Sie, dass das Flag without_lamp
in unserem Experiment auf True
gesetzt ist.
Stellen Sie sicher, dass Sie alle Dateien herunterladen und die 3D-FRONT vorverarbeiten. Die Renderings der generierten Szenen können in eval_3dfront.py
abgerufen werden.
Nachdem Sie sowohl Ground-Truth-Bilder als auch generierte Szenen-Renderings erhalten haben, führen Sie compute_fid_scores_3dfront.py
aus.
Diese Metrik zielt darauf ab, die Wiedergabetreue auf Objektebene zu bewerten. Bitte folgen Sie der Implementierung in PointFlow. Um dies auszuwerten, müssen Sie Objekt für Objekt in den generierten Szenen speichern, was in eval_3dfront.py
erfolgen kann.
Nachdem Sie Objektnetze erhalten haben, führen Sie compute_mmd_cov_1nn.py
aus, um die Ergebnisse zu erhalten.
Wenn Sie diese Arbeit für Ihre Forschung nützlich finden, zitieren Sie sie bitte
@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} }
Dieses Repository basiert auf Graph-to-3D und SDFusion. Wir danken den Autoren für die Bereitstellung ihres Codes.
Müde Schüler haben an arbeitsreichen Tagen die Pipeline fertiggestellt ...