Il s'agit de la mise en œuvre officielle de l'article NeurIPS 2023 : Synthèse de scène basée sur le langage utilisant un modèle de diffusion multiconditionnelle.
Nous vous recommandons fortement de créer un environnement Conda pour mieux gérer tous les packages Python nécessaires.
conda create -n lsdm python=3.8
conda activate lsdm
Après avoir créé l'environnement, veuillez installer pytorch avec CUDA. Vous pouvez le faire en exécutant
conda install pytorch pytorch-cuda=11.6 -c pytorch -c nvidia
Les autres dépendances nécessaires à ce travail sont répertoriées dans le fichierRequirements.txt. Nous recommandons les commandes suivantes pour installer les dépendances :
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 est une extension de PROXD. Veuillez visiter leur site Web pour obtenir d'abord l'ensemble de données PROXD. Nous fournissons l'extension de PRO-teXt comme dans le lien. Vous devez également obtenir HUMANISE via leur page de projet. La hiérarchie de l'ensemble de données doit suivre ce modèle :
|- data/
|- protext
|- mesh_ds
|- objs
|- proxd_test
|- proxd_test_edit
|- proxd_train
|- proxd_valid
|- scenes
|- supp
|- proxd_train
|- proxd_valid
Tous les points de contrôle des modèles utilisés pour l'analyse comparative dans le document sont disponibles sur ce lien.
Pour les parties de visualisation, nous utilisons un sous-ensemble de l'ensemble de données 3D-Future. Le sous-ensemble peut être téléchargé via le lien, crédité aux auteurs.
Pour entraîner une ligne de base, utilisez la commande suivante :
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 >
Par exemple, si vous souhaitez entraîner LSDM, utilisez la commande suivante :
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
Pour tester une ligne de base, utilisez la commande suivante :
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
Par exemple, vous pouvez utiliser :
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
pour tester un point de contrôle LSDM. Notez que vous pouvez également vous entraîner sur l’ensemble de données HUMANISE. Remplacez simplement le chemin de data/protext/proxd_train
par data/humanise/train
.
Pour générer une séquence vidéo comme dans notre article, vous pouvez procéder en suivant les étapes suivantes :
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
où sequence_name
est le nom du mouvement humain et interaction_name
est le nom de la pose_humaine . Notez que nous nommons la pose humaine de manière très proche du mouvement humain correspondant. De plus, num_label
se trouve dans le fil mpcat40.tsv
. Par exemple, vous pouvez utiliser la commande suivante :
python vis_fitting_results.py
--fitting_results_path fitting_results/ < baseline > / < sequence_name > /
--vertices_path data/supp/proxd_valid/vertices/ < sequence_name > _verts.npy
Par exemple,
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
Le script exécuté ci-dessus enregistrera les images rendues dans fitting_results/N0Sofa_00034_02/rendering
. Notez que vous avez besoin d'un écran pour exécuter cette commande. Si vous testez le projet sur un serveur qui ne dispose pas de service d'affichage, vous pouvez toujours charger les objets enregistrés et les maillages humains et utiliser d'autres approches pour les visualiser. Pour obtenir les maillages humains, vous pouvez toujours exécuter la commande ci-dessus et attendre que le programme se ferme automatiquement. Le script enregistrera les maillages humains de votre séquence de mouvements spécifiée dans fitting_results/<sequence name>/human/mesh
.
Les objets les mieux adaptés sont stockés dans fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/<best_obj_id>/opt_best.obj
. Comme mentionné précédemment, vous pouvez obtenir <best_obj_id>
dans fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/best_obj_id.json
.
Une partie de notre base de code est basée sur Ye et al. Si vous trouvez ce travail utile, pensez à citer :
@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}
}