IT3D: ปรับปรุงการสร้างข้อความเป็น 3D พร้อมการสังเคราะห์มุมมองที่ชัดเจน (AAAI 2024)
อี้เหวิน เฉิน, จี้จาง, เสี่ยวเฟิง หยาง, จงคัง ไค, กังหยู, เล่ยหยาง, กัวเซิง หลิน
อาร์ซิฟ
ความก้าวหน้าล่าสุดในเทคนิคการแปลงข้อความเป็น 3 มิติได้รับการขับเคลื่อนโดยการกลั่นกรองความรู้จากโมเดลการแพร่กระจายข้อความเป็นภาพขนาดใหญ่ (LDM) อันทรงพลัง อย่างไรก็ตาม วิธีแปลงข้อความเป็น 3D ที่มีอยู่มักจะต่อสู้กับความท้าทาย เช่น ความอิ่มตัวของสีมากเกินไป รายละเอียดไม่เพียงพอ และผลลัพธ์ที่ไม่สมจริง การศึกษานี้นำเสนอกลยุทธ์ใหม่ที่ใช้ประโยชน์จากภาพหลายมุมมองที่สังเคราะห์ขึ้นอย่างชัดเจนเพื่อแก้ไขปัญหาเหล่านี้ แนวทางของเราเกี่ยวข้องกับการใช้ไปป์ไลน์แบบภาพต่อภาพ ซึ่งเสริมศักยภาพโดย LDM เพื่อสร้างภาพคุณภาพสูงที่ถูกวางโดยอิงจากการเรนเดอร์โมเดล 3 มิติแบบหยาบ แม้ว่าภาพที่สร้างขึ้นส่วนใหญ่จะบรรเทาปัญหาที่กล่าวมาข้างต้น แต่ความท้าทายต่างๆ เช่น ความไม่สอดคล้องกันของมุมมองและความแปรปรวนของเนื้อหาที่มีนัยสำคัญยังคงมีอยู่ เนื่องจากลักษณะกำเนิดโดยธรรมชาติของแบบจำลองการแพร่กระจายขนาดใหญ่ ทำให้เกิดความยากลำบากอย่างกว้างขวางในการใช้ประโยชน์จากภาพเหล่านี้อย่างมีประสิทธิภาพ เพื่อเอาชนะอุปสรรคนี้ เราสนับสนุนการบูรณาการผู้เลือกปฏิบัติควบคู่ไปกับกลยุทธ์การฝึกอบรมคู่ Diffusion-GAN เพื่อเป็นแนวทางในการฝึกอบรมโมเดล 3 มิติ สำหรับเครื่องมือแยกแยะที่รวมเข้าด้วยกัน รูปภาพหลายมุมมองที่สังเคราะห์ขึ้นจะถือเป็นข้อมูลจริง ในขณะที่การเรนเดอร์ของโมเดล 3 มิติที่ได้รับการปรับปรุงจะทำหน้าที่เป็นข้อมูลปลอม เราทำชุดการทดลองที่ครอบคลุมซึ่งแสดงให้เห็นถึงประสิทธิผลของวิธีการของเราเหนือแนวทางพื้นฐาน
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 จะใช้เวลาประมาณ 30G สำหรับการฝึกโมเดลหยาบ (vanilla Stable Dreamfusion) และ 35G สำหรับการปรับแต่งด้วย IT3D คุณสามารถลดการใช้หน่วยความจำได้โดย:
--h
และ --w
แม้ว่าสิ่งนี้จะลดการใช้หน่วยความจำลงอย่างมาก แต่ก็จะทำให้ประสิทธิภาพลดลงอย่างมากเช่นกัน ใช้เวลาประมาณ 10G สำหรับ IT3D ที่ความละเอียด 64--nerf l1
การตั้งค่าเริ่มต้นของเราคือ --nerf l2
--max_steps
การตั้งค่าเริ่มต้นของเราคือ --max_steps 384
--ctn_sample_batch_size
--text
และ --seed
น่าเศร้าที่การฝึกโมเดลหยาบที่ปราศจากปัญหา Janus มักต้องใช้ความพยายามหลายครั้ง--latent_iter_ratio 0.1
--g_loss_weight
คุณต้องลด --g_loss_weight
เมื่อชุดข้อมูลที่สร้างขึ้นมีความหลากหลายเกินไป คุณสามารถขยาย --g_loss_weight
สำหรับชุดข้อมูลคุณภาพสูงได้--g_loss_decay_begin_step
และ --g_loss_decay_step
ในการตั้งค่าเริ่มต้นของเรา เราปรับ GAN เป็น 7,500 ขั้นตอนแล้วละทิ้งไป เราปล่อยจุดตรวจแบบจำลองหยาบของเรา แตกไฟล์ลงในโฟลเดอร์ 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
ไฮเปอร์พารามิเตอร์ที่เป็นไปได้ที่คุณต้องเปลี่ยน:
รหัสของเราอิงตาม repos ที่ยอดเยี่ยมเหล่านี้:
มีเสถียรภาพ-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}
}