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}
}