IT3D: 明示的なビュー合成によるテキストから 3D への生成の改善 (AAAI 2024) 。
Yiwen Chen、Chi Zhang、Xiaofeng Yang、Zhongang Cai、Gang Yu、Lei Yang、Guosheng Lin
アルクシヴ
テキストから 3D への技術における最近の進歩は、強力な大規模なテキストから画像への拡散モデル (LDM) からの知識を抽出することによって推進されています。それにもかかわらず、既存の Text-to-3D アプローチは、過彩度、不十分なディテール、非現実的な出力などの課題に直面することがよくあります。この研究は、これらの問題に対処するために明示的に合成されたマルチビュー画像を活用する新しい戦略を提示します。私たちのアプローチには、LDM によって強化された画像間のパイプラインを利用して、粗い 3D モデルのレンダリングに基づいてポーズをとった高品質の画像を生成することが含まれます。生成された画像によって前述の問題はほとんど軽減されますが、大規模拡散モデルの固有の生成特性により、表示の不一致やコンテンツの大幅な差異などの課題が残り、これらの画像を効果的に活用する際に大きな困難が生じます。このハードルを克服するために、3D モデルのトレーニングをガイドする新しい Diffusion-GAN デュアル トレーニング戦略とディスクリミネーターを統合することを推奨します。組み込まれた識別器にとって、合成された多視点画像は本物のデータとみなされ、最適化された 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
wadb アカウントをお持ちでない場合は、登録する必要があります。
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 では、粗いモデル (バニラ Stable Dreamfusion) をトレーニングするのに約 30G、IT3D で改良するのに 35G かかります。次の方法でメモリ消費量を減らすことができます。
--h
および--w
設定してトレーニング解像度を下げます。これによりメモリ使用量が大幅に削減されますが、パフォーマンスも大幅に低下します。 IT3D 64 解像度では約 10G かかります。--nerf l1
を設定して軽量 NeRF を使用します。デフォルト設定は--nerf l2
です。--max_steps
を設定すると、レイごとのサンプリング ステップが低くなります。デフォルト設定は--max_steps 384
です。--ctn_sample_batch_size
を小さくします。--text
と--seed
設定して、プロンプトとシードを変更します。残念なことに、ヤヌス問題のない粗いモデルをトレーニングするには、多くの場合複数回の試行が必要です。--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
変更する必要がある可能性のあるハイパーパラメータ:
私たちのコードは、次の素晴らしいリポジトリに基づいています。
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}
}
コントロールネット
@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}
}