هذا هو التنفيذ الرسمي لورقة NeurIPS 2023: تركيب المشهد المعتمد على اللغة باستخدام نموذج الانتشار متعدد الشروط.
نوصيك بشدة بإنشاء بيئة Conda لإدارة جميع حزم Python المطلوبة بشكل أفضل.
conda create -n lsdm python=3.8
conda activate lsdm
بعد إنشاء البيئة، يرجى تثبيت pytorch باستخدام CUDA. يمكنك القيام بذلك عن طريق الجري
conda install pytorch pytorch-cuda=11.6 -c pytorch -c nvidia
تم إدراج التبعيات الأخرى اللازمة لهذا العمل في ملف require.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
. كما ذكرنا من قبل، يمكنك الحصول على <best_obj_id>
في fitting_results/<sequence name>/fit_best_obj/<object category>/<object index>/best_obj_id.json
.
يعتمد جزء من قاعدة التعليمات البرمجية الخاصة بنا على 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}
}