这是论文CommonScenes: Generating Commonsense 3D Indoor Scenes with Scene Graph Diffusion的官方实现。基于扩散模型,我们提出了一种从场景图生成整个 3D 场景的方法,全面涵盖其布局和 3D 几何形状。
网站 | Arxiv
Guangyao Zhai *、Evin Pınar Örnek *、Shun-Cheng Wu、Yan Di、Federico Tombari、Nassir Navab 和 Benjamin Busam。 (*同等贡献。)
神经IPS 2023
下载代码并进入文件夹。
git克隆 https://github.com/ymxlzgy/commonscenescd commonscenes
我们已经在 Ubuntu 20.04 上使用 Python 3.8、PyTorch 1.11.0、CUDA 11.3 和 Pytorch3D 对其进行了测试。
conda create -n commonscenes python=3.8conda activate commonscenespip install -rrequirements.txt pip install einops omegaconf tensorboardx open3d
要安装 CLIP,请遵循此 OpenAI CLIP 存储库:
pip install ftfy regex tqdmpip install git+https://github.com/openai/CLIP.git
设置额外的倒角距离计算以进行评估:
cd ./extensionpython setup.py install
从其官方网站下载 3D-FRONT 数据集。
按照 ATISS 预处理数据集。
下载 3D-FUTURE-SDF。这是我们自己使用 SDFusion 中的工具在 3D-FUTURE 网格上进行处理的。
请按照此页面下载 SG-FRONT 并访问更多信息。
创建一个名为FRONT
的文件夹,并将所有文件复制到其中。
结构应该类似于这样:
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)
要点:从此处下载预训练的 VQ-VAE 模型到文件夹scripts/checkpoint
。
可选:我们在此处提供两个经过训练的 CommonScenes 模型。
要训练模型,请运行:
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
:训练房间,例如客厅、餐厅、卧室等。我们在实施过程中一起培训所有房间。
--network_type
:要训练的网络。 v1_box
是Graph-to-Box, v1_full
是Graph-to-3D(DeepSDF版本), v2_box
是CommonScenes的布局分支, v2_full
是CommonScenes。 (注意:如果你想训练v1_full
,还应该从这里下载 DeepSDF 的附加重建网格和代码,并复制到FRONT
)。
--with_SDF
:如果训练 v2_full,则设置为True
。
--with_CLIP
:如果训练 v2_box 或 v2_full,则设置为True
,其他情况下不使用。
--batch_size
:布局分支训练的批量大小。 (注意:形状分支位于v2_full.yaml
和v2_full_concat.yaml
中。每个批量大小的含义可以在补充材料 G.1 中找到。)
--large
:默认为False
, True
表示更具体的类别。
我们在这里提供三个示例:Graph-to-3D(DeepSDF 版本)、Graph-to-Box、CommonScenes。对于 CommonScenes,推荐的 GPU 是单个 A100,尽管 3090 也可以在形状分支上以较小的批量大小训练网络。
要评估模型,请运行:
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
:存储模型的位置。
--gen_shape
:如果要使基于扩散的形状分支工作,请设置True
。
--evaluate_diversity
:如果要计算多样性,请设置True
。这需要一段时间,因此默认情况下它是禁用的。
--num_samples
:评估多样性时的实验轮数。
该指标旨在评估场景级保真度。要评估 FID/KID,您首先需要下载用于检索方法的自上而下的 gt 渲染图像和用于生成方法的 sdf 渲染图像,或者通过修改并运行collect_gt_sdf_images.py
来收集渲染图像。请注意,在我们的实验中, without_lamp
标志设置为True
。
确保下载所有文件并预处理 3D-FRONT。生成场景的效果图可以在eval_3dfront.py
中获取。
获得地面实况图像和生成的场景渲染后,运行compute_fid_scores_3dfront.py
。
该指标旨在评估对象级保真度。请遵循PointFlow中的实现。为了评估这一点,您需要在生成的场景中逐个存储对象,这可以在eval_3dfront.py
中完成。
获得对象网格后,运行compute_mmd_cov_1nn.py
即可获得结果。
如果您发现这项工作对您的研究有用,请引用
@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} }
该存储库基于 Graph-to-3D 和 SDFusion。我们感谢作者提供他们的代码。
疲惫的同学们在忙碌的日子里完成了管道……