Ini adalah implementasi resmi dari makalah CommonScenes: Generating Commonsense 3D Indoor Scenes with Scene Graph Diffusion . Berdasarkan model difusi, kami mengusulkan metode untuk menghasilkan seluruh adegan 3D dari grafik pemandangan, yang mencakup tata letak dan geometri 3D secara holistik.
Situs web | Arxiv
Guangyao Zhai *, Evin Pınar Örnek *, Shun-Cheng Wu, Yan Di, Federico Tombari, Nassir Navab, dan Benjamin Busam. (*Kontribusi yang sama.)
NeuroIPS 2023
Unduh kodenya dan buka foldernya.
git clone https://github.com/ymxlzgy/commonscenescd commonscenes
Kami telah mengujinya di Ubuntu 20.04 dengan Python 3.8, PyTorch 1.11.0, CUDA 11.3 dan Pytorch3D.
conda create -n commonscenes python=3.8conda aktifkan commonscenespip install -r persyaratan.txt pip install einops omegaconf tensorboardx open3d
Untuk menginstal CLIP, ikuti repo OpenAI CLIP ini:
pip instal ftfy regex tqdmpip instal git+https://github.com/openai/CLIP.git
Siapkan perhitungan Jarak Talang tambahan untuk evaluasi:
cd ./extensionpython setup.py instal
Unduh kumpulan data 3D-FRONT dari situs resmi mereka.
Praproses kumpulan data berikut ATISS.
Unduh 3D-MASA DEPAN-SDF. Ini diproses sendiri pada mesh 3D-FUTURE menggunakan alat di SDFusion.
Ikuti halaman ini untuk mengunduh SG-FRONT dan mengakses informasi lebih lanjut.
Buat folder bernama FRONT
, dan salin semua file ke dalamnya.
Strukturnya harus serupa seperti ini:
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)
Penting: Unduh model VQ-VAE yang telah dilatih sebelumnya dari sini ke folder scripts/checkpoint
.
Opsional: Kami menyediakan dua model CommonScenes terlatih yang tersedia di sini.
Untuk melatih model, jalankan:
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
: ruangan untuk dilatih, misalnya ruang tamu, ruang makan, kamar tidur, dan semuanya. Kami melatih semua ruangan bersama-sama dalam implementasinya.
--network_type
: jaringan yang akan dilatih. v1_box
adalah Graph-to-Box, v1_full
adalah Graph-to-3D (versi DeepSDF), v2_box
adalah cabang tata letak CommonScenes, dan v2_full
adalah CommonScenes. (Catatan: Jika Anda ingin melatih v1_full
, jerat dan kode tambahan yang direkonstruksi oleh DeepSDF juga harus diunduh dari sini, dan juga disalin ke FRONT
).
--with_SDF
: disetel ke True
jika melatih v2_full.
--with_CLIP
: disetel ke True
jika melatih v2_box atau v2_full, dan tidak digunakan dalam kasus lain.
--batch_size
: ukuran batch untuk pelatihan cabang tata letak. ( Catatan: yang untuk cabang bentuk ada di v2_full.yaml
dan v2_full_concat.yaml
. Arti dari setiap ukuran batch dapat ditemukan di Materi Pelengkap G.1.)
--large
: defaultnya adalah False
, True
berarti kategori yang lebih konkret.
Kami memberikan tiga contoh di sini: Graph-to-3D (versi DeepSDF), Graph-to-Box, CommonScenes. GPU yang direkomendasikan adalah A100 tunggal untuk CommonScenes, meskipun 3090 juga dapat melatih jaringan dengan ukuran batch yang lebih rendah pada cabang bentuk.
Untuk mengevaluasi model yang dijalankan:
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
: tempat Anda menyimpan model.
--gen_shape
: setel True
jika Anda ingin membuat cabang bentuk berbasis difusi berfungsi.
--evaluate_diversity
: setel True
jika Anda ingin menghitung keragaman. Ini memerlukan waktu cukup lama, jadi ini dinonaktifkan secara default.
--num_samples
: jumlah putaran percobaan, saat mengevaluasi keragaman.
Metrik ini bertujuan untuk mengevaluasi fidelitas tingkat adegan. Untuk mengevaluasi FID/KID, pertama-tama Anda perlu mendownload gambar yang dirender gt dari atas ke bawah untuk metode pengambilan dan gambar yang dirender sdf untuk metode generatif, atau mengumpulkan rendering dengan memodifikasi dan menjalankan collect_gt_sdf_images.py
. Perhatikan bahwa tanda without_lamp
disetel ke True
dalam percobaan kami.
Pastikan Anda mengunduh semua file dan melakukan praproses 3D-FRONT. Rendering adegan yang dihasilkan dapat diperoleh di dalam eval_3dfront.py
.
Setelah mendapatkan gambar kebenaran dasar dan rendering adegan yang dihasilkan, jalankan compute_fid_scores_3dfront.py
.
Metrik ini bertujuan untuk mengevaluasi fidelitas tingkat objek. Silakan ikuti penerapannya di PointFlow. Untuk mengevaluasinya, Anda perlu menyimpan objek demi objek dalam adegan yang dihasilkan, yang dapat dilakukan di eval_3dfront.py
.
Setelah mendapatkan jerat objek, jalankan compute_mmd_cov_1nn.py
untuk mendapatkan hasilnya.
Jika Anda merasa karya ini bermanfaat dalam penelitian Anda, silakan kutip
@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} }
Repositori ini didasarkan pada Graph-to-3D dan SDFusion. Kami berterima kasih kepada penulis karena telah menyediakan kode mereka.
Siswa yang lelah menyelesaikan saluran pipa di hari-hari sibuk...