이것은 CommonScenes: 장면 그래프 확산을 사용하여 Commonsense 3D 실내 장면 생성 문서의 공식 구현입니다. 확산 모델을 기반으로 장면 그래프로부터 레이아웃과 3차원 형상을 전체적으로 포함하는 전체 3차원 장면을 생성하는 방법을 제안합니다.
웹사이트 | 아르크시브
Guangyao Zhai *, Evin Pınar Örnek *, Shun-Cheng Wu, Yan Di, Federico Tombari, Nassir Navab 및 Benjamin Busam. (*동등 기여)
NeurIPS 2023
코드를 다운로드하고 폴더로 이동하세요.
자식 클론 https://github.com/ymxlzgy/commonscenescd commonscenes
Python 3.8, PyTorch 1.11.0, CUDA 11.3 및 Pytorch3D를 사용하여 Ubuntu 20.04에서 테스트했습니다.
conda create -n commonscenes python=3.8conda 활성화 commonscenespip 설치 -r 요구 사항.txt pip 설치 einops omegaconf tensorboardx open3d
CLIP을 설치하려면 다음 OpenAI CLIP 저장소를 따르세요.
pip 설치 ftfy 정규식 tqdmpip 설치 git+https://github.com/openai/CLIP.git
평가를 위해 추가 모따기 거리 계산을 설정합니다.
cd ./extensionpython setup.py 설치
공식 사이트에서 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의 세 가지 예를 제공합니다. 권장되는 GPU는 CommonScenes용 단일 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을 기반으로 합니다. 코드를 사용할 수 있게 해준 작성자에게 감사드립니다.
바쁜 나날 속에 지친 학생들이 파이프라인을 완성했습니다...