이것은 NeurIPS 2023 논문: 다중 조건 확산 모델을 사용한 언어 기반 장면 합성의 공식 구현입니다.
필요한 모든 Python 패키지를 더 잘 관리하려면 Conda 환경을 생성하는 것이 좋습니다.
conda create -n lsdm python=3.8
conda activate lsdm
환경을 만든 후 CUDA로 pytorch를 설치해주세요. 실행하면 가능해요
conda install pytorch pytorch-cuda=11.6 -c pytorch -c nvidia
이 작업에 필요한 기타 종속성은 요구사항.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
에 저장됩니다. 앞서 언급한 것처럼 fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/best_obj_id.json
에서 <best_obj_id>
얻을 수 있습니다.
우리 코드베이스의 일부는 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}
}