IT3D: إنشاء تحويل النص إلى ثلاثي الأبعاد بشكل محسّن باستخدام تركيب العرض الصريح (AAAI 2024) .
يوين تشن، تشي تشانغ، شياو فنغ يانغ، تشونغانغ كاي، قانغ يو، لي يانغ، غوشينغ لين
أركسيف
تم دفع الخطوات الأخيرة في تقنيات تحويل النص إلى ثلاثية الأبعاد من خلال استخلاص المعرفة من نماذج نشر النص إلى الصورة الكبيرة القوية (LDMs). ومع ذلك، فإن أساليب تحويل النص إلى ثلاثية الأبعاد الحالية غالبًا ما تواجه تحديات مثل التشبع الزائد، وعدم كفاية التفاصيل، والمخرجات غير الواقعية. تقدم هذه الدراسة استراتيجية جديدة تستفيد من الصور متعددة العرض المركبة بشكل واضح لمعالجة هذه المشكلات. يتضمن نهجنا استخدام خطوط الأنابيب من صورة إلى صورة، التي يتم تمكينها بواسطة LDMs، لإنشاء صور مطروحة عالية الجودة استنادًا إلى عروض النماذج ثلاثية الأبعاد الخشنة. على الرغم من أن الصور التي تم إنشاؤها تخفف في الغالب من المشكلات المذكورة أعلاه، إلا أن التحديات مثل عدم اتساق العرض والتباين الكبير في المحتوى لا تزال قائمة بسبب الطبيعة التوليدية المتأصلة لنماذج الانتشار الكبيرة، مما يشكل صعوبات كبيرة في الاستفادة من هذه الصور بشكل فعال. للتغلب على هذه العقبة، ندعو إلى دمج أداة التمييز جنبًا إلى جنب مع استراتيجية التدريب المزدوجة Diffusion-GAN الجديدة لتوجيه تدريب النماذج ثلاثية الأبعاد. بالنسبة للمميز المدمج، تعتبر الصور المركبة متعددة العرض بيانات حقيقية، في حين تعمل عروض النماذج ثلاثية الأبعاد المحسنة كبيانات مزيفة. نحن نجري مجموعة شاملة من التجارب التي تثبت فعالية طريقتنا على النهج الأساسي.
git clone https://github.com/buaacyw/IT3D-text-to-3D.git
cd IT3D-text-to-3D
conda create -n it3d python==3.8
conda activate it3d
pip install -r requirements.txt
pip install ./raymarching
pip install ./shencoder
pip install ./freqencoder
pip install ./gridencoder
تحتاج إلى تسجيل حساب Wandb إذا لم يكن لديك حساب.
wandb login
بالنسبة لخط الأنابيب من صورة إلى صورة، قمنا بتطبيق Stadiffusion Image2Image وControlNetv1.1.
في تجربتنا، يوفر Controlnet دائمًا نتائج أفضل. إذا كنت تريد استخدام Controlnet كخط أنابيب من صورة إلى صورة، فأنت بحاجة إلى تنزيل النماذج من هنا باتباع الإرشادات من ControlNetv1.1.
على سبيل المثال، إذا كنت تريد استخدام Controlnet المشروط على softedge، فأنت بحاجة إلى تنزيل control_v11p_sd15_softedge.yaml
و control_v11p_sd15_softedge.pth
ووضعهما في المجلد ctn_models
. بالإضافة إلى ذلك، تحتاج إلى تنزيل نموذج Stable Diffusion 1.5 v1-5-pruned.ckpt
ووضعه في المجلد ctn_models
.
يتم تدريب جميع العروض التوضيحية لدينا (النماذج الخشنة والنماذج الدقيقة) بدقة 512. في دقة 512، يستغرق الأمر حوالي 30 جيجا لتدريب نموذج خشن (Vanilla Stable Dreamfusion) و35 جيجا لتحسينه باستخدام IT3D. يمكنك تقليل استهلاك الذاكرة عن طريق:
--h
و --w
. وفي حين أن هذا سيؤدي إلى تقليل استخدام الذاكرة بشكل كبير، إلا أنه سيؤدي أيضًا إلى انخفاض كبير في الأداء. يستغرق الأمر حوالي 10 جيجا بايت لـ IT3D بدقة 64.--nerf l1
. الإعداد الافتراضي لدينا هو --nerf l2
.--max_steps
. الإعداد الافتراضي لدينا هو --max_steps 384
--ctn_sample_batch_size
.--text
و --seed
. للأسف، غالبًا ما يتطلب تدريب نموذج خشن خالٍ من مشكلة يانوس محاولات متعددة.--latent_iter_ratio 0.1
.--g_loss_weight
. تحتاج إلى خفض --g_loss_weight
عندما تكون مجموعة البيانات التي تم إنشاؤها مختلفة جدًا. يمكنك تكبير --g_loss_weight
للحصول على مجموعة بيانات عالية الجودة.--g_loss_decay_begin_step
و --g_loss_decay_step
. في الإعداد الافتراضي لدينا، نقوم بضبط GAN على 7500 خطوة ثم نتجاهلها. نحن نحرر نقاط التفتيش النموذجية الخشنة. قم بفك الضغط في مجلد ckpts
. يتم تدريب كل نقاط التفتيش هذه في إعداد النموذج الخشن الافتراضي الخاص بنا.
على جهازنا A6000، يستغرق الأمر 6 دقائق لإنشاء مجموعة بيانات مكونة من 640 صورة باستخدام SD-I2I، و25 دقيقة باستخدام Controlnet، على التوالي.
# # Refine a coarse NeRF
# --no_cam_D: camera free discriminator, camera pose won't be input to discriminator
# --g_loss_decay_begin_step: when to decay the weight of discrimination loss
# --real_save_path: path to generated dataset
# Jasmine
python main.py -O --text " a bunch of white jasmine " --workspace jas_ctn --ckpt ckpts/jas_df_ep0200.pth --no_cam_D --gan --ctn --g_loss_decay_begin_step 25000 --real_save_path generated_dataset/jas_ctn
# Use stable diffusion img2img pipeline instead of Controlnet
python main.py -O --text " a bunch of white jasmine " --workspace jas_sd --ckpt ckpts/jas_df_ep0200.pth --no_cam_D --gan --g_loss_decay_begin_step 25000 --real_save_path generated_dataset/jas_sd
# Iron Man
python main.py -O --text " a 3D model of an iron man, highly detailed, full body " --workspace iron_ctn --ckpt ckpts/iron_man_df_ep0400.pth --no_cam_D --gan --ctn --g_loss_decay_begin_step 45000 --real_save_path generated_dataset/iron_ctn
# Darth Vader
python main.py -O --text " Full-body 3D model of Darth Vader, highly detailed " --workspace darth_ctn --ckpt ckpts/darth_df_ep0200.pth --no_cam_D --gan --ctn --g_loss_decay_begin_step 25000 --real_save_path generated_dataset/darth_ctn
# Hulk
python main.py -O --text " 3D model of hulk, highly detailed " --workspace hulk_ctn --ckpt ckpts/hulk_df_ep0200.pth --no_cam_D --gan --ctn --g_loss_decay_begin_step 25000 --real_save_path generated_dataset/hulk_ctn
# Ablation Experiment in Paper
# Note: our default setting is sds loss + decayed gan loss. gan loss weight will be decayed to zero after 7500 steps (depending on g_loss_decay_begin_step)
# only l2 loss
python main.py -O --text " 3D model of hulk, highly detailed " --workspace hulk_ctn_l2 --ckpt ckpts/hulk_df_ep0200.pth --no_cam_D --gan --ctn --l2_weight 100.0 --l2_decay_begin_step 25000 --l2_decay_step 2500 --l2_weight_end 0.0 --sds_weight_end 0.0 --g_loss_decay_begin_step 0 --real_save_path generated_dataset/hulk_ctn
# l2 loss + sds loss
python main.py -O --text " 3D model of hulk, highly detailed " --workspace hulk_ctn_l2_sds --ckpt ckpts/hulk_df_ep0200.pth --no_cam_D --gan --ctn --l2_weight 100.0 --l2_decay_begin_step 25000 --l2_decay_step 2500 --l2_weight_end 0.0 --g_loss_decay_begin_step 0 --real_save_path generated_dataset/hulk_ctn
# only GAN
python main.py -O --text " 3D model of hulk, highly detailed " --workspace hulk_ctn_only_gan --ckpt ckpts/hulk_df_ep0200.pth --no_cam_D --gan --ctn --sds_weight_end 0.0 --real_save_path generated_dataset/hulk_ctn
# Edit to red Hulk, change --text
python main.py -O --text " a red hulk, red skin, highly detailed " --workspace hulk_red_ctn --ckpt ckpts/hulk_df_ep0200.pth --no_cam_D --gan --ctn --g_loss_decay_begin_step 25000 --real_save_path generated_dataset/hulk_ctn
# # Generate Dataset and DMTET Mesh
# generate dataset
python main.py -O --text " a bunch of blue rose, highly detailed " --workspace rose_blue_ctn --ckpt ckpts/rose_df_ep0200.pth --gan --ctn --no_cam_D --iters 0 --real_save_path generated_dataset/rose_blue_ctn
# DMTET Mesh
python main.py -O --text " a bunch of blue rose, highly detailed " --workspace rose_blue_ctn_dm --gan --ctn --no_cam_D --g_loss_decay_begin_step 5000 --g_loss_decay_step 5000 --init_with ckpts/rose_df_ep0200.pth --dmtet --init_color --real_save_path generated_dataset/rose_blue_ctn
# # Train your own coarse NeRF
python main.py -O --text " a bunch of white jasmine " --workspace jas
# Refine it
python main.py -O --text " a bunch of white jasmine " --workspace jas_ctn --ckpt jas/checkpoints/df_ep0200.pth --no_cam_D --gan --ctn --g_loss_decay_begin_step 25000 --real_save_path generated_dataset/jas_ctn
المعلمات الفائقة المحتملة التي تحتاج إلى تغييرها:
يعتمد الكود الخاص بنا على هذه المستودعات الرائعة:
مستقرة Dreamfusion
@misc{stable-dreamfusion,
Author = {Jiaxiang Tang},
Year = {2022},
Note = {https://github.com/ashawkey/stable-dreamfusion},
Title = {Stable-dreamfusion: Text-to-3D with Stable-diffusion}
}
EG3D
@inproceedings{Chan2022,
author = {Eric R. Chan and Connor Z. Lin and Matthew A. Chan and Koki Nagano and Boxiao Pan and Shalini De Mello and Orazio Gallo and Leonidas Guibas and Jonathan Tremblay and Sameh Khamis and Tero Karras and Gordon Wetzstein},
title = {Efficient Geometry-aware {3D} Generative Adversarial Networks},
booktitle = {CVPR},
year = {2022}
}
شبكة التحكم
@misc{zhang2023adding,
title={Adding Conditional Control to Text-to-Image Diffusion Models},
author={Lvmin Zhang and Maneesh Agrawala},
year={2023},
eprint={2302.05543},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
إذا وجدت هذا العمل مفيدًا، فسيكون موضع تقدير الاقتباس عبر:
@misc{chen2023it3d,
title={IT3D: Improved Text-to-3D Generation with Explicit View Synthesis},
author={Yiwen Chen and Chi Zhang and Xiaofeng Yang and Zhongang Cai and Gang Yu and Lei Yang and Guosheng Lin},
year={2023},
eprint={2308.11473},
archivePrefix={arXiv},
primaryClass={cs.CV}
}