Dies ist die offizielle Implementierung des NeurIPS 2023-Papiers: Language-driven Scene Synthesis using Multi-conditional Diffusion Model.
Wir empfehlen Ihnen dringend, eine Conda-Umgebung zu erstellen, um alle benötigten Python-Pakete besser verwalten zu können.
conda create -n lsdm python=3.8
conda activate lsdm
Nachdem Sie die Umgebung erstellt haben, installieren Sie bitte Pytorch mit CUDA. Sie können es durch Laufen tun
conda install pytorch pytorch-cuda=11.6 -c pytorch -c nvidia
Die anderen für diese Arbeit erforderlichen Abhängigkeiten sind in der Datei „requirements.txt“ aufgeführt. Wir empfehlen die folgenden Befehle, um Abhängigkeiten zu installieren:
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 ist eine Erweiterung von PROXD. Bitte besuchen Sie zunächst deren Website, um den PROXD-Datensatz zu erhalten. Die Erweiterung von PRO-teXt stellen wir wie im Link zur Verfügung. Sie müssen HUMANISE auch über deren Projektseite beziehen. Die Datensatzhierarchie sollte dieser Vorlage folgen:
|- data/
|- protext
|- mesh_ds
|- objs
|- proxd_test
|- proxd_test_edit
|- proxd_train
|- proxd_valid
|- scenes
|- supp
|- proxd_train
|- proxd_valid
Alle Modellprüfpunkte, die im Artikel zum Benchmarking verwendet werden, sind unter diesem Link verfügbar.
Für Visualisierungsteile verwenden wir eine Teilmenge des 3D-Future-Datensatzes. Der Teilsatz kann unter dem Link heruntergeladen werden, der den Autoren genannt wird.
Um eine Baseline zu trainieren, verwenden Sie den folgenden Befehl:
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 >
Wenn Sie beispielsweise LSDM trainieren möchten, verwenden Sie den folgenden Befehl:
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
Um eine Baseline zu testen, verwenden Sie den folgenden Befehl:
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
Sie können beispielsweise Folgendes verwenden:
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
um einen LSDM-Checkpoint zu testen. Beachten Sie, dass Sie auch mit dem HUMANISE-Datensatz trainieren können. Ersetzen Sie einfach den Pfad von data/protext/proxd_train
durch data/humanise/train
.
Um eine Videosequenz wie in unserem Artikel zu erstellen, können Sie mit den folgenden Schritten vorgehen:
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
Dabei ist sequence_name
der Name der menschlichen Bewegung und interaction_name
der Name der menschlichen Pose . Beachten Sie, dass wir die menschliche Pose sehr eng mit der entsprechenden menschlichen Bewegung benennen. Darüber hinaus ist num_label
im Feld mpcat40.tsv
zu finden. Sie können beispielsweise den folgenden Befehl verwenden:
python vis_fitting_results.py
--fitting_results_path fitting_results/ < baseline > / < sequence_name > /
--vertices_path data/supp/proxd_valid/vertices/ < sequence_name > _verts.npy
Zum Beispiel,
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
Das oben ausgeführte Skript speichert gerenderte Frames in fitting_results/N0Sofa_00034_02/rendering
. Beachten Sie, dass Sie zum Ausführen dieses Befehls einen Bildschirm benötigen. Falls Sie das Projekt auf einem Server testen, der über keinen Anzeigedienst verfügt, können Sie dennoch die gespeicherten Objekte und menschlichen Netze laden und andere Ansätze zur Visualisierung verwenden. Um die menschlichen Netze zu erhalten, können Sie weiterhin den obigen Befehl ausführen und warten, bis das Programm automatisch beendet wird. Das Skript speichert die menschlichen Netze Ihrer angegebenen Bewegungssequenz in fitting_results/<sequence name>/human/mesh
.
Am besten passende Objekte werden in fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/<best_obj_id>/opt_best.obj
gespeichert. Wie bereits erwähnt, können Sie <best_obj_id>
in fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/best_obj_id.json
abrufen.
Ein Teil unserer Codebasis basiert auf Ye et al.. Wenn Sie diese Arbeit hilfreich finden, denken Sie bitte darüber nach, Folgendes zu zitieren:
@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}
}