Esta es la implementación oficial del documento NeurIPS 2023: Síntesis de escenas basada en el lenguaje utilizando un modelo de difusión multicondicional.
Le recomendamos encarecidamente que cree un entorno Conda para administrar mejor todos los paquetes de Python necesarios.
conda create -n lsdm python=3.8
conda activate lsdm
Después de crear el entorno, instale pytorch con CUDA. Puedes hacerlo ejecutando
conda install pytorch pytorch-cuda=11.6 -c pytorch -c nvidia
Las otras dependencias necesarias para este trabajo se enumeran en requisitos.txt. Recomendamos los siguientes comandos para instalar dependencias:
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-texto es una extensión de PROXD. Visite su sitio web para obtener primero el conjunto de datos PROXD. Proporcionamos la extensión de PRO-teXt como en el enlace. También debes obtener HUMANISE a través de la página de su proyecto. La jerarquía del conjunto de datos debe seguir esta plantilla:
|- data/
|- protext
|- mesh_ds
|- objs
|- proxd_test
|- proxd_test_edit
|- proxd_train
|- proxd_valid
|- scenes
|- supp
|- proxd_train
|- proxd_valid
Todos los puntos de control del modelo que se utilizan como punto de referencia en el documento están disponibles en este enlace.
Para las piezas de visualización, utilizamos un subconjunto del conjunto de datos 3D-Future. El subconjunto se puede descargar en el enlace acreditado a los autores.
Para entrenar una línea base, use el siguiente comando:
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 >
Por ejemplo, si desea entrenar LSDM, use el siguiente comando:
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
Para probar una línea base, use el siguiente comando:
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
Por ejemplo, puedes utilizar:
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
para probar un punto de control LSDM. Tenga en cuenta que también puede entrenar con el conjunto de datos HUMANISE. Simplemente reemplace la ruta de data/protext/proxd_train
por data/humanise/train
.
Para generar una secuencia de video como en nuestro artículo, puede continuar siguiendo los siguientes pasos:
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
donde sequence_name
es el nombre del movimiento humano y interaction_name
es el nombre de pose_humana . Tenga en cuenta que denominamos pose humana muy de cerca a su correspondiente movimiento humano. Además, num_label
se puede encontrar en el campo mpcat40.tsv
. Por ejemplo, puede utilizar el siguiente comando:
python vis_fitting_results.py
--fitting_results_path fitting_results/ < baseline > / < sequence_name > /
--vertices_path data/supp/proxd_valid/vertices/ < sequence_name > _verts.npy
Por ejemplo,
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
El script ejecutado anteriormente guardará los fotogramas renderizados en fitting_results/N0Sofa_00034_02/rendering
. Tenga en cuenta que necesita una pantalla para ejecutar este comando. En caso de que estés probando el proyecto en un servidor que no tiene un servicio de visualización, aún puedes cargar los objetos guardados y las mallas humanas y utilizar otros métodos para visualizarlos. Para obtener las mallas humanas, aún puedes ejecutar el comando anterior y esperar hasta que el programa se cierre automáticamente. El script guardará las mallas humanas de su secuencia de movimiento especificada en fitting_results/<sequence name>/human/mesh
.
Los objetos que mejor se ajustan se almacenan en fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/<best_obj_id>/opt_best.obj
. Como se mencionó anteriormente, puede obtener <best_obj_id>
en fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/best_obj_id.json
.
Parte de nuestro código base se basa en Ye et al. Si encuentra útil este trabajo, considere citar:
@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}
}