Это официальная реализация документа NeurIPS 2023: Синтез сцен на основе языка с использованием модели мультиусловной диффузии.
Мы настоятельно рекомендуем вам создать среду Conda, чтобы лучше управлять всеми необходимыми пакетами Python.
conda create -n lsdm python=3.8
conda activate lsdm
После создания среды установите pytorch с CUDA. Вы можете сделать это, запустив
conda install pytorch pytorch-cuda=11.6 -c pytorch -c nvidia
Другие зависимости, необходимые для этой работы, перечислены в файле require.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
— это имя позы человека . Обратите внимание, что мы называем человеческую позу очень близко к соответствующему человеческому движению. Кроме того, 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 et al.. Если вы найдете эту работу полезной, пожалуйста, процитируйте:
@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}
}