这是 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}
}