IT3D:通过显式视图合成改进文本到 3D 的生成 (AAAI 2024) 。
陈一文、张驰、杨晓峰、蔡忠刚、余刚、杨雷、林国胜
Arxiv
从强大的大型文本到图像扩散模型 (LDM) 中提取知识,推动了文本到 3D 技术的最新进展。尽管如此,现有的文本转 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 帐户。
wandb login
对于图像到图像的管道,我们实现了 Stadiffusion Image2Image 和 ControlNetv1.1。
在我们的实验中,Controlnet 总是提供更好的结果。如果您想使用 Controlnet 作为图像到图像管道,您需要按照 ControlNetv1.1 的说明从此处下载模型。
例如,如果您想在 softedge 上使用 Controlnet,则需要下载control_v11p_sd15_softedge.yaml
和control_v11p_sd15_softedge.pth
并将它们放在文件夹ctn_models
中。此外,您需要下载 Stable Diffusion 1.5 模型v1-5-pruned.ckpt
并将其放入文件夹ctn_models
中。
我们所有的演示(粗略模型和精细模型)都是在 512 分辨率下进行训练的。在 512 分辨率下,训练粗略模型(vanilla Stable Dreamfusion)大约需要 30G,使用 IT3D 对其进行细化需要 35G。您可以通过以下方式降低内存消耗:
--h
和--w
降低训练分辨率。虽然这会显着减少内存使用量,但也会导致性能大幅下降。 64分辨率的IT3D大约需要10G。--nerf l1
使用轻量级 NeRF。我们的默认设置是--nerf l2
。--max_steps
降低每条射线的采样步数。我们的默认设置是--max_steps 384
--ctn_sample_batch_size
。--text
和--seed
更改提示和种子。遗憾的是,训练一个没有 Janus 问题的粗略模型通常需要多次尝试。--latent_iter_ratio 0.1
在粗略模型训练的早期阶段将 NeRF 渲染为潜在特征。--g_loss_weight
。当生成的数据集种类过多时,需要降低--g_loss_weight
。您可以放大--g_loss_weight
以获得高质量数据集。--g_loss_decay_begin_step
和--g_loss_decay_step
。在我们的默认设置中,我们将 GAN 调整为 7500 步,然后丢弃它。我们发布了粗略模型检查点。解压到文件夹ckpts
中。所有这些检查点都在我们默认的粗略模型设置中进行训练。
在我们的 A6000 上,使用 SD-I2I 生成包含 640 张图像的数据集分别需要 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
您可能需要更改的超参数:
我们的代码基于这些精彩的存储库:
稳定梦融合
@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}
}