IT3D : génération de texte en 3D améliorée avec synthèse de vue explicite (AAAI 2024) .
Yiwen Chen, Chi Zhang, Xiaofeng Yang, Zhongang Cai, Gang Yu, Lei Yang, Guosheng Lin
Arxiv
Les progrès récents dans les techniques de conversion texte-3D ont été propulsés par la distillation des connaissances issues de puissants grands modèles de diffusion texte-image (MLD). Néanmoins, les approches Text-to-3D existantes sont souvent confrontées à des défis tels qu'une sursaturation, des détails inadéquats et des résultats irréalistes. Cette étude présente une nouvelle stratégie qui exploite des images multi-vues explicitement synthétisées pour résoudre ces problèmes. Notre approche implique l'utilisation de pipelines image à image, optimisés par les LDM, pour générer des images posées de haute qualité basées sur les rendus de modèles 3D grossiers. Bien que les images générées atténuent pour l’essentiel les problèmes susmentionnés, des problèmes tels que l’incohérence des vues et la variance significative du contenu persistent en raison de la nature générative inhérente aux modèles de grande diffusion, ce qui pose d’importantes difficultés pour exploiter efficacement ces images. Pour surmonter cet obstacle, nous préconisons l'intégration d'un discriminateur aux côtés d'une nouvelle stratégie de double formation Diffusion-GAN pour guider la formation des modèles 3D. Pour le discriminateur incorporé, les images multi-vues synthétisées sont considérées comme des données réelles, tandis que les rendus des modèles 3D optimisés fonctionnent comme de fausses données. Nous menons un ensemble complet d'expériences qui démontrent l'efficacité de notre méthode par rapport aux approches de base.
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
Vous devez créer un compte wandb si vous n’en avez pas.
wandb login
Pour le pipeline image à image, nous avons implémenté Stadiffusion Image2Image et ControlNetv1.1.
Dans notre expérience, Controlnet fournit toujours de meilleurs résultats. Si vous souhaitez utiliser Controlnet comme pipeline image à image, vous devez télécharger les modèles à partir d'ici en suivant les instructions de ControlNetv1.1.
Par exemple, si vous souhaitez utiliser Controlnet conditionné sur softedge, vous devez télécharger control_v11p_sd15_softedge.yaml
et control_v11p_sd15_softedge.pth
et les placer dans le dossier ctn_models
. De plus, vous devez télécharger le modèle Stable Diffusion 1.5 v1-5-pruned.ckpt
et le placer dans le dossier ctn_models
.
Toutes nos démos (modèles grossiers et modèles fins) sont formées en résolution 512. En résolution 512, il faut environ 30G pour entraîner un modèle grossier (vanilla Stable Dreamfusion) et 35G pour l'affiner avec IT3D. Vous pouvez réduire la consommation de mémoire en :
--h
et --w
. Même si cela réduira considérablement l’utilisation de la mémoire, cela entraînera également une diminution substantielle des performances. Il faut environ 10G pour IT3D en résolution 64.--nerf l1
. Notre paramètre par défaut est --nerf l2
.--max_steps
. Notre paramètre par défaut est --max_steps 384
--ctn_sample_batch_size
.--text
et --seed
. Malheureusement, la formation d'un modèle grossier exempt du problème Janus nécessite souvent plusieurs tentatives.--latent_iter_ratio 0.1
.--g_loss_weight
. Vous devez réduire --g_loss_weight
lorsque l'ensemble de données généré est trop varié. Vous pouvez agrandir --g_loss_weight
pour un ensemble de données de haute qualité.--g_loss_decay_begin_step
et --g_loss_decay_step
. Dans notre paramètre par défaut, nous ajustons le GAN sur 7 500 étapes, puis nous le supprimons. Nous publions nos points de contrôle de modèle grossier. Décompressez dans le dossier ckpts
. Tous ces points de contrôle sont entraînés dans notre paramètre de modèle grossier par défaut.
Sur notre A6000, il faut respectivement 6 minutes pour générer un ensemble de données de 640 images en utilisant SD-I2I et 25 minutes en utilisant 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
Hyperparamètres possibles que vous devez modifier :
Notre code est basé sur ces merveilleux dépôts :
Stable-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}
}
Réseau de contrôle
@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}
}
Si vous trouvez ce travail utile, une citation sera appréciée via :
@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}
}