IT3D: улучшенное преобразование текста в 3D с помощью явного синтеза представлений (AAAI 2024) .
Ивэнь Чен, Чи Чжан, Сяофэн Ян, Чжунган Цай, Ган Юй, Лэй Ян, Гошэн Линь
Арксив
Недавние успехи в технологиях преобразования текста в 3D были обусловлены извлечением знаний из мощных больших моделей диффузии текста в изображение (LDM). Тем не менее, существующие подходы к преобразованию текста в 3D часто сталкиваются с такими проблемами, как перенасыщение, недостаточная детализация и нереалистичные результаты. В этом исследовании представлена новая стратегия, которая использует явно синтезированные многопроекционные изображения для решения этих проблем. Наш подход предполагает использование конвейеров преобразования изображений в изображения, поддерживаемых LDM, для создания постановочных высококачественных изображений на основе визуализации грубых 3D-моделей. Хотя сгенерированные изображения в основном решают вышеупомянутые проблемы, такие проблемы, как несогласованность представлений и значительная вариативность контента, сохраняются из-за присущей генеративной природе больших диффузионных моделей, что создает значительные трудности в эффективном использовании этих изображений. Чтобы преодолеть это препятствие, мы выступаем за интеграцию дискриминатора вместе с новой стратегией двойного обучения Diffusion-GAN для управления обучением 3D-моделей. Для встроенного дискриминатора синтезированные многоракурсные изображения считаются реальными данными, а визуализация оптимизированных 3D-моделей действует как поддельные данные. Мы проводим комплексный набор экспериментов, которые демонстрируют эффективность нашего метода по сравнению с базовыми подходами.
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 для обучения грубой модели (ванильный Stable Dreamfusion) и 35G для ее уточнения с помощью IT3D. Вы можете снизить потребление памяти следующими способами:
--h
и --w
. Хотя это значительно сократит использование памяти, это также приведет к существенному снижению производительности. Для IT3D в разрешении 64 требуется около 10G.--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 создание набора данных из 640 изображений с использованием SD-I2I занимает 6 минут, а с помощью Controlnet — 25 минут соответственно.
# # 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
Возможные гиперпараметры, которые вам необходимо изменить:
Наш код основан на этих замечательных репозиториях:
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}
}
ЭГ3D
@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}
}