これは、論文CommonScenes: Generating Commonsense 3D Indoor Scenes with Scene Graph Diffusionの公式実装です。拡散モデルに基づいて、シーングラフからレイアウトと 3D ジオメトリを包括的に含む 3D シーン全体を生成する方法を提案します。
ウェブサイト |アルクシヴ
Guangyao Zhai *、Evin Pınar Örnek *、Shun-Cheng Wu、Yan Di、Federico Tombari、Nassir Navab、Benjamin Busam。 (*均等寄付。)
NeurIPS 2023
コードをダウンロードしてフォルダーに移動します。
git clone 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 インストール
公式サイトから 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 の 2 つのトレーニング済みモデルを提供しています。
モデルをトレーニングするには、次を実行します。
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 の 3 つの例を示します。推奨される 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 に基づいています。コードを公開してくださった作者に感謝します。
忙しい日々の中で、疲れ果てた学生たちがパイプラインを完成させました...