IT3D: Verbesserte Text-zu-3D-Generierung mit expliziter Ansichtssynthese (AAAI 2024) .
Yiwen Chen, Chi Zhang, Xiaofeng Yang, Zhonggang Cai, Gang Yu, Lei Yang, Guosheng Lin
Arxiv
Die jüngsten Fortschritte bei Text-zu-3D-Techniken wurden durch die Destillation von Wissen aus leistungsstarken großen Text-zu-Bild-Diffusionsmodellen (LDMs) vorangetrieben. Dennoch kämpfen bestehende Text-zu-3D-Ansätze oft mit Herausforderungen wie Übersättigung, unzureichender Detaillierung und unrealistischen Ergebnissen. Diese Studie stellt eine neuartige Strategie vor, die explizit synthetisierte Mehransichtsbilder nutzt, um diese Probleme anzugehen. Unser Ansatz beinhaltet die Nutzung von Bild-zu-Bild-Pipelines, die durch LDMs unterstützt werden, um gestellte, qualitativ hochwertige Bilder basierend auf den Renderings grober 3D-Modelle zu generieren. Obwohl die generierten Bilder die oben genannten Probleme größtenteils lindern, bestehen aufgrund der inhärenten generativen Natur großer Diffusionsmodelle weiterhin Herausforderungen wie Ansichtsinkonsistenz und erhebliche Inhaltsvarianz, was zu erheblichen Schwierigkeiten bei der effektiven Nutzung dieser Bilder führt. Um diese Hürde zu überwinden, empfehlen wir die Integration eines Diskriminators neben einer neuartigen Diffusion-GAN-Dual-Trainingsstrategie, um das Training von 3D-Modellen zu steuern. Für den integrierten Diskriminator gelten die synthetisierten Multi-View-Bilder als echte Daten, während die Renderings der optimierten 3D-Modelle als Fake-Daten fungieren. Wir führen eine umfassende Reihe von Experimenten durch, die die Wirksamkeit unserer Methode gegenüber Basisansätzen demonstrieren.
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
Sie müssen ein wandb-Konto registrieren, falls Sie noch keins haben.
wandb login
Für die Bild-zu-Bild-Pipeline haben wir Stadiffusion Image2Image und ControlNetv1.1 implementiert.
In unserem Experiment liefert Controlnet immer bessere Ergebnisse. Wenn Sie Controlnet als Bild-zu-Bild-Pipeline verwenden möchten, müssen Sie Modelle von hier herunterladen und dabei den Anweisungen von ControlNetv1.1 folgen.
Wenn Sie beispielsweise Controlnet bedingt durch Softedge verwenden möchten, müssen Sie control_v11p_sd15_softedge.yaml
und control_v11p_sd15_softedge.pth
herunterladen und im Ordner ctn_models
ablegen. Darüber hinaus müssen Sie Stable Diffusion 1.5 model v1-5-pruned.ckpt
herunterladen und im Ordner ctn_models
ablegen.
Alle unsere Demos (Grobmodelle und Feinmodelle) werden in einer Auflösung von 512 trainiert. Bei einer Auflösung von 512 sind etwa 30 G für das Training eines groben Modells (Vanilla Stable Dreamfusion) und 35 G für die Verfeinerung mit IT3D erforderlich. Sie können den Speicherverbrauch senken, indem Sie:
--h
und --w
festlegen. Dies führt zwar zu einer erheblichen Reduzierung der Speichernutzung, führt aber auch zu einer erheblichen Leistungseinbuße. Für IT3D in 64-Auflösung sind etwa 10 G erforderlich.--nerf l1
festlegen. Unsere Standardeinstellung ist --nerf l2
.--max_steps
festlegen. Unsere Standardeinstellung ist --max_steps 384
--ctn_sample_batch_size
.--text
und --seed
festlegen. Leider erfordert das Training eines groben Modells ohne das Janus-Problem oft mehrere Versuche.--latent_iter_ratio 0.1
.--g_loss_weight
. Sie müssen --g_loss_weight
verringern, wenn der generierte Datensatz zu vielfältig ist. Sie können --g_loss_weight
vergrößern, um einen qualitativ hochwertigen Datensatz zu erhalten.--g_loss_decay_begin_step
und --g_loss_decay_step
. In unserer Standardeinstellung optimieren wir das GAN auf 7500 Schritte und verwerfen es dann. Wir geben unsere groben Modellkontrollpunkte frei. In den Ordner ckpts
entpacken. Alle diese Prüfpunkte werden in unserer standardmäßigen groben Modelleinstellung trainiert.
Auf unserem A6000 dauert die Generierung eines Datensatzes mit 640 Bildern mit SD-I2I 6 Minuten bzw. 25 Minuten mit 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
Mögliche Hyperparameter, die Sie ändern müssen:
Unser Code basiert auf diesen wunderbaren Repos:
Stabil-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}
}
Kontrollnetz
@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}
}
Wenn Sie diese Arbeit nützlich finden, freuen wir uns über eine Zitierung an:
@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}
}