これは、NeurIPS 2023 論文「多条件拡散モデルを使用した言語駆動型シーン合成」の正式な実装です。
必要なすべての Python パッケージをより適切に管理するために、Conda 環境を作成することを強くお勧めします。
conda create -n lsdm python=3.8
conda activate lsdm
環境構築が完了したら、CUDAでpytorchをインストールしてください。実行すれば実行できます
conda install pytorch pytorch-cuda=11.6 -c pytorch -c nvidia
この作業に必要なその他の依存関係は、requirements.txt にリストされています。依存関係をインストールするには、次のコマンドをお勧めします。
pip install git+https://github.com/openai/CLIP.git
pip install transformers
conda install -c pytorch3d -c conda-forge pytorch3d=0.7.3
pip install -r requirements.txt
PRO-teXt は PROXD の拡張機能です。まず Web サイトにアクセスして PROXD データセットを入手してください。 PRO-teXtの拡張機能をリンク先で提供しています。 HUMANISE もプロジェクトページから入手する必要があります。データセット階層は次のテンプレートに従う必要があります。
|- data/
|- protext
|- mesh_ds
|- objs
|- proxd_test
|- proxd_test_edit
|- proxd_train
|- proxd_valid
|- scenes
|- supp
|- proxd_train
|- proxd_valid
この論文でベンチマークに使用されているすべてのモデル チェックポイントは、このリンクから入手できます。
視覚化部分には、3D-Future データセットのサブセットを利用します。サブセットはリンクからダウンロードでき、著者のクレジットが記載されています。
ベースラインをトレーニングするには、次のコマンドを使用します。
python -m run.train_ < baseline >
--train_data_dir data/protext/proxd_train
--valid_data_dir data/protext/proxd_valid
--fix_ori
--epochs 1000
--out_dir training
--experiment < baseline >
たとえば、LSDM をトレーニングする場合は、次のコマンドを使用します。
python -m run.train_sdm
--train_data_dir data/protext/proxd_train
--valid_data_dir data/protext/proxd_valid
--fix_ori
--epochs 1000
--out_dir training
--experiment sdm
ベースラインをテストするには、次のコマンドを使用します。
python -m run.test_ < baseline > data/protext/proxd_test/
--load_model training/ < baseline > /model_ckpt/best_model_cfd.pt
--model_name < baseline >
--fix_ori --test_on_valid_set
--output_dir training/ < baseline > /output
たとえば、次のように使用できます。
python -m run.test_sdm data/protext/proxd_test/
--load_model training/sdm/model_ckpt/best_model_cfd.pt
--model_name sdm
--fix_ori
--test_on_valid_set
--output_dir training/sdm/output
LSDM チェックポイントをテストします。 HUMANISE データセットでトレーニングすることもできることに注意してください。 data/protext/proxd_train
のパスをdata/humanise/train
に置き換えるだけです。
この論文のようにビデオ シーケンスを生成するには、次の手順を実行します。
python fit_custom_obj.py
--sequence_name < sequence_name >
--vertices_path data/supp/proxd_valid/vertices/ < sequence_name > _verts.npy
--contact_labels_path data/supp/proxd_valid/semantics/ < sequence_name > _cfs.npy
--output_dir fitting_results/ < baseline >
--label < num_label >
--file_name training/sdm/output/predictions/ < interaction_name > .npy
ここで、 sequence_name
はヒューマン モーションの名前、 interaction_name
はhuman_poseの名前です。人間のポーズは、対応する人間の動きに非常に近い名前を付けていることに注意してください。さらに、 num_label
フィールドmpcat40.tsv
にあります。たとえば、次のコマンドを使用できます。
python vis_fitting_results.py
--fitting_results_path fitting_results/ < baseline > / < sequence_name > /
--vertices_path data/supp/proxd_valid/vertices/ < sequence_name > _verts.npy
例えば、
python vis_fitting_results.py
--fitting_results_path fitting_results/sdm/N0Sofa_00034_02/
--vertices_path data/supp/proxd_valid/vertices/N0Sofa_00034_02_verts.npy
上記で実行されたスクリプトは、レンダリングされたフレームをfitting_results/N0Sofa_00034_02/rendering
に保存します。このコマンドを実行するには画面が必要であることに注意してください。表示サービスを持たないサーバーでプロジェクトをテストしている場合でも、保存されたオブジェクトとヒューマン メッシュをロードし、他のアプローチを使用してそれらを視覚化できます。人間のメッシュを取得するには、上記のコマンドを実行し、プログラムが自動的に終了するまで待つことができます。スクリプトは、指定したモーション シーケンスのヒューマン メッシュをfitting_results/<sequence name>/human/mesh
に保存します。
最も適合するオブジェクトはfitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/<best_obj_id>/opt_best.obj
に保存されます。前に述べたように、 <best_obj_id>
fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/best_obj_id.json
で取得できます。
私たちのコードベースの一部は Ye らの研究に基づいています。この研究が役立つと思われる場合は、次の引用を検討してください。
@article{vuong2023language,
title={Language-driven Scene Synthesis using Multi-conditional Diffusion Model},
author={Vuong, An Dinh and Vu, Minh Nhat and Nguyen, Toan and Huang, Baoru and Nguyen, Dzung and Vo, Thieu and Nguyen, Anh},
journal={arXiv preprint arXiv:2310.15948},
year={2023}
}