IT3D: Geração aprimorada de texto para 3D com síntese de visualização explícita (AAAI 2024) .
Yiwen Chen, Chi Zhang, Xiaofeng Yang, Zhongang Cai, Gang Yu, Lei Yang, Guosheng Lin
Arxiv
Avanços recentes nas técnicas de conversão de texto em 3D foram impulsionados pela destilação do conhecimento de grandes modelos de difusão de texto para imagem (LDMs) poderosos. No entanto, as abordagens existentes de conversão de texto em 3D muitas vezes enfrentam desafios como saturação excessiva, detalhamento inadequado e resultados irrealistas. Este estudo apresenta uma nova estratégia que aproveita imagens multi-visualização explicitamente sintetizadas para resolver esses problemas. Nossa abordagem envolve a utilização de pipelines imagem a imagem, habilitados por LDMs, para gerar imagens posicionadas de alta qualidade com base nas renderizações de modelos 3D grosseiros. Embora as imagens geradas aliviem principalmente os problemas acima mencionados, desafios como inconsistência de visualização e variação significativa de conteúdo persistem devido à natureza generativa inerente de grandes modelos de difusão, apresentando grandes dificuldades no aproveitamento eficaz dessas imagens. Para superar esse obstáculo, defendemos a integração de um discriminador juntamente com uma nova estratégia de treinamento duplo Diffusion-GAN para orientar o treinamento de modelos 3D. Para o discriminador incorporado, as imagens multivisualização sintetizadas são consideradas dados reais, enquanto as renderizações dos modelos 3D otimizados funcionam como dados falsos. Conduzimos um conjunto abrangente de experimentos que demonstram a eficácia do nosso método em relação às abordagens iniciais.
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
Você precisa registrar uma conta wandb se não tiver uma.
wandb login
Para pipeline imagem a imagem, implementamos Stadiffusion Image2Image e ControlNetv1.1.
Em nosso experimento, o Controlnet sempre oferece melhores resultados. Se quiser usar o Controlnet como pipeline imagem a imagem, você precisa baixar os modelos aqui seguindo as instruções do ControlNetv1.1.
Por exemplo, se você quiser usar o Controlnet condicionado ao softedge, você precisa baixar control_v11p_sd15_softedge.yaml
e control_v11p_sd15_softedge.pth
e colocá-los na pasta ctn_models
. Além disso, você precisa baixar o modelo Stable Diffusion 1.5 v1-5-pruned.ckpt
e colocá-lo na pasta ctn_models
.
Todas as nossas demonstrações (modelos grosseiros e modelos finos) são treinadas em resolução 512. Na resolução 512, são necessários cerca de 30G para treinar um modelo grosseiro (vanilla Stable Dreamfusion) e 35G para refiná-lo com IT3D. Você pode diminuir o consumo de memória:
--h
e --w
. Embora isso reduza significativamente o uso de memória, também levará a uma diminuição substancial no desempenho. São necessários cerca de 10G para IT3D em resolução 64.--nerf l1
. Nossa configuração padrão é --nerf l2
.--max_steps
. Nossa configuração padrão é --max_steps 384
--ctn_sample_batch_size
.--text
e --seed
. Infelizmente, treinar um modelo grosseiro livre do problema de Janus geralmente requer múltiplas tentativas.--latent_iter_ratio 0.1
.--g_loss_weight
. Você precisa diminuir --g_loss_weight
quando o conjunto de dados gerado é muito variado. Você pode ampliar --g_loss_weight
para um conjunto de dados de alta qualidade.--g_loss_decay_begin_step
e --g_loss_decay_step
. Em nossa configuração padrão, ajustamos o GAN para 7.500 etapas e depois o descartamos. Liberamos nossos pontos de verificação de modelo grosseiro. Descompacte na pasta ckpts
. Todos esses pontos de verificação são treinados em nossa configuração de modelo aproximado padrão.
Em nosso A6000, leva 6 minutos para gerar um conjunto de dados de 640 imagens usando SD-I2I e 25 minutos usando Controlnet, respectivamente.
# # 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
Possíveis hiperparâmetros que você precisa alterar:
Nosso código é baseado nestes repositórios maravilhosos:
Estável-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}
}
Rede de controle
@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}
}
Se você achar este trabalho útil, uma citação será apreciada por meio de:
@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}
}