Ini adalah implementasi resmi makalah NeurIPS 2023: Sintesis Adegan Berbasis Bahasa menggunakan Model Difusi Multi-kondisional.
Kami sangat menyarankan Anda untuk membuat lingkungan Conda untuk mengelola semua paket Python yang diperlukan dengan lebih baik.
conda create -n lsdm python=3.8
conda activate lsdm
Setelah Anda membuat lingkungan, silakan instal pytorch dengan CUDA. Anda dapat melakukannya dengan berlari
conda install pytorch pytorch-cuda=11.6 -c pytorch -c nvidia
Ketergantungan lain yang diperlukan untuk pekerjaan ini tercantum di persyaratan.txt. Kami merekomendasikan perintah berikut untuk menginstal dependensi:
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 adalah perpanjangan dari PROXD. Silakan kunjungi situs web mereka untuk mendapatkan dataset PROXD terlebih dahulu. Kami menyediakan ekstensi PRO-teXt seperti pada link. Anda juga perlu mendapatkan HUMANISE melalui halaman proyek mereka. Hierarki kumpulan data harus mengikuti templat ini:
|- data/
|- protext
|- mesh_ds
|- objs
|- proxd_test
|- proxd_test_edit
|- proxd_train
|- proxd_valid
|- scenes
|- supp
|- proxd_train
|- proxd_valid
Semua model checkpoint yang digunakan sebagai benchmark di makalah tersedia di tautan ini.
Untuk bagian visualisasi, kami menggunakan subset dataset 3D-Future. Subset dapat diunduh dari tautan yang diberikan kepada penulis.
Untuk melatih baseline, gunakan perintah berikut:
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 >
Misalnya jika Anda ingin melatih LSDM, gunakan perintah berikut:
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
Untuk menguji garis dasar, gunakan perintah berikut:
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
Misalnya, Anda dapat menggunakan:
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
untuk menguji pos pemeriksaan LSDM. Perhatikan bahwa, Anda juga dapat berlatih pada kumpulan data HUMANISE. Ganti saja jalur data/protext/proxd_train
dengan data/humanise/train
.
Untuk menghasilkan sequence video seperti pada makalah kami, Anda dapat melanjutkan dengan menggunakan langkah-langkah berikut:
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
dimana sequence_name
adalah nama gerak manusia dan interaction_name
adalah nama human_pose . Perhatikan bahwa, kami menamakan pose manusia sangat mirip dengan gerakan manusia yang bersangkutan. Selain itu, num_label
dapat ditemukan di bidang mpcat40.tsv
. Misalnya, Anda dapat menggunakan perintah berikut:
python vis_fitting_results.py
--fitting_results_path fitting_results/ < baseline > / < sequence_name > /
--vertices_path data/supp/proxd_valid/vertices/ < sequence_name > _verts.npy
Misalnya,
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
Skrip yang dijalankan di atas akan menyimpan bingkai yang dirender di fitting_results/N0Sofa_00034_02/rendering
. Perhatikan bahwa Anda memerlukan layar untuk menjalankan perintah ini. Jika Anda menguji proyek di server yang tidak memiliki layanan tampilan, Anda masih dapat memuat objek dan jaring manusia yang disimpan dan menggunakan pendekatan lain untuk memvisualisasikannya. Untuk mendapatkan human mesh, Anda masih dapat menjalankan perintah di atas dan menunggu hingga program keluar secara otomatis. Skrip akan menyimpan jerat manusia dari urutan gerakan yang Anda tentukan di fitting_results/<sequence name>/human/mesh
.
Objek yang paling pas disimpan di fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/<best_obj_id>/opt_best.obj
. Seperti disebutkan sebelumnya, Anda bisa mendapatkan <best_obj_id>
di fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/best_obj_id.json
.
Bagian dari basis kode kami didasarkan pada Ye dkk. Jika menurut Anda karya ini bermanfaat, harap pertimbangkan untuk mengutip:
@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}
}