這是 NeurIPS 2023 論文:Language-driven Scene Synthesis using Multi-conditional Diffusion Model 的官方實作。
我們強烈建議您建立一個 Conda 環境,以便更好地管理所需的所有 Python 套件。
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 的擴充。請先造訪他們的網站以取得 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
中。如前所述,您可以在fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/best_obj_id.json
中取得<best_obj_id>
。
我們的部分程式碼庫是基於 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}
}