Dale Decatur、Itai Lang、Kfir Aberman、Rana Hanocka



この作業では、3Dペイントブラシを開発します。これは、テキストの説明を介してメッシュ上のローカルセマンティック領域を自動的にテクスチャリングするための手法です。私たちの方法は、メッシュで直接動作するように設計されており、標準のグラフィックパイプラインにシームレスに統合するテクスチャマップを生成します。同時に、ローカリゼーションマップ(編集領域を指定する)とそれに準拠するテクスチャマップを作成することを選択します。この相乗的アプローチは、局在化と様式化の両方の品質を改善します。テクスチャ領域の詳細と解像度を強化するために、カスケードされた拡散モデルの複数の段階を活用して、さまざまな解像度で画像から学習した生成前の編集技術を監督します。カスケードスコア蒸留(CSD)と呼ばれる私たちの手法は、同時にカスケードされた方法で複数の解像度でスコアを蒸留し、監督の粒度とグローバルな理解の両方を制御できます。さまざまなセマンティック地域内のさまざまな形状をローカルなテクスチャーにするための3Dペイントブラシの有効性を示します。
カスケードスコア蒸留(CSD)損失のデモを見るには、画像の生成と画像編集にCSDを適用するこのノートブックをご覧ください。 CSDを使用すると、標準SDSで使用されるベースステージのみではなく、拡散モデルの複数のカスケード段階で最適化を監督できます。最初の段階のグローバルな認識と後の段階に含まれるより高いレベルの詳細の両方を活用するために、カスケード拡散モデルの複数の段階でスコアを同時に蒸留します。

GPUメモリが48 GB未満の場合は、コードを実行できます。詳細については、メモリ最適化に関するセクションをご覧ください。
最初にコンドラ環境を作成します:
conda create -n "3d-paintbrush" python=3.10
でアクティブにします:
conda activate 3d-paintbrush
次に、インストールスクリプトを実行して、必要なパッケージをインストールします。 GPUへのアクセスでこのスクリプトを実行してください。
bash ./install_environment.sh
Deepfloydからの指示の場合:
huggingface_hubをインストールします pip install huggingface_hub --upgrade
Pythonシェルでログイン関数を実行します
from huggingface_hub import login
login()
そして、あなたの抱き合っている顔のハブアクセストークンを入力します。
事前に訓練されたモデルを使用するには、ここからtrained_modelsとinverse_map_cacheフォルダーの両方をダウンロードし、データフォルダーの下に追加して、次のディレクトリ構造を作成します。
├── data
│ ├── inverse_map_cache
│ ├── trained_models
│ ├── hand.obj
...
│ ├── spot.obj
事前に訓練されたモデルを実行するには、以下のコマンドを使用します。結果はresults/[name-of-mesh]/[name-of-edit]/renders/infernce.pngで保存されます。
スポット:
python src/main.py --config_path demo/spot/gold_chain_necklace.yaml --log.inference true --log.model_path ./data/trained_models/spot/gold_chain_necklace.pth
python src/main.py --config_path demo/spot/heart-shaped_sunglasses.yaml --log.inference true --log.model_path ./data/trained_models/spot/heart-shaped_sunglasses.pth
python src/main.py --config_path demo/spot/colorful_crochet_hat.yaml --log.inference true --log.model_path ./data/trained_models/spot/colorful_crochet_hat.pth






人:
python src/main.py --config_path demo/person/tie-dye_apron.yaml --log.inference true --log.model_path ./data/trained_models/person/tie-dye_apron.pth
python src/main.py --config_path demo/person/colorful_polo_shirt.yaml --log.inference true --log.model_path ./data/trained_models/person/colorful_polo_shirt.pth
python src/main.py --config_path demo/person/superman_chest_emblem.yaml --log.inference true --log.model_path ./data/trained_models/person/superman_chest_emblem.pth






レゴミンフィギュア:
python src/main.py --config_path demo/lego_minifig/barcelona_jersey.yaml --log.inference true --log.model_path ./data/trained_models/lego_minifig/barcelona_jersey.pth
python src/main.py --config_path demo/lego_minifig/blue_denim_overalls.yaml --log.inference true --log.model_path ./data/trained_models/lego_minifig/blue_denim_overalls.pth
python src/main.py --config_path demo/lego_minifig/red_bow_tie.yaml --log.inference true --log.model_path ./data/trained_models/lego_minifig/red_bow_tie.pth






手:
python src/main.py --config_path demo/hand/fancy_gold_watch.yaml --log.inference true --log.model_path ./data/trained_models/hand/fancy_gold_watch.pth


紙から結果をゼロから再現するには、事前定義されたデモ構成ファイルを渡すだけです。結果はresults/[name-of-mesh]/[name-of-edit]で保存されます。
スポット:
python src/main.py --config_path demo/spot/gold_chain_necklace.yaml
python src/main.py --config_path demo/spot/heart-shaped_sunglasses.yaml
python src/main.py --config_path demo/spot/colorful_crochet_hat.yaml
人:
python src/main.py --config_path demo/person/tie-dye_apron.yaml
python src/main.py --config_path demo/person/colorful_polo.yaml
python src/main.py --config_path demo/person/superman_chest_emblem.yaml
レゴミニフィギュア:
python src/main.py --config_path demo/lego_minifig/barcelona_jersey.yaml
python src/main.py --config_path demo/lego_minifig/blue_denim_overalls.yaml
python src/main.py --config_path demo/lego_minifig/red_bow_tie.yaml
手:
python src/main.py --config_path demo/hand/fancy_gold_watch.yaml
独自の例を実行するには、独自の構成ファイルを作成し、前のセクションで行われたように渡すことができます。さらに、代わりに、 src/configs/train_configのフィールドのいずれかの値をコマンドライン引数として渡すことができます。たとえば、構成ファイルを渡さずに手例を実行するには、次のことを呼び出すことができます。
python src/main.py --log.exp_dir results/hand/fancy_gold_watch --mesh.path ./data/spot.obj --guidance.object_name "hand" --guidance.style "fancy gold" --guidance.edit "watch"
48 GB GPUにアクセスできない場合は...
cpu_offload src/configs/guidance_config.pyでTrueに設定して、cpuオフロードを有効にします。これにより、メモリの使用量が大幅に削減されますが、速度が犠牲になります。--optim.batch_sizeまたはカスタム構成ファイルのいずれかでbatch_sizeパラメーターを変更して、より小さなバッチサイズを使用します。これによりメモリの使用が削減されますが、精度に影響を与える可能性があります。sample_pointsをTrueに設定し、 mlp_batch_sizeを調整します)。これによりメモリの使用が削減されますが、精度に影響を与える可能性があります。batched_sdをFalseに設定します)。これにより、メモリの使用量が減少しますが、速度が犠牲になります。 私たちのコードベースは、潜在的な信号/潜在ペイントに基づいており、CSDガイダンスコードはThreestudioのガイダンスモジュールの形式で構成されています。これらの著者の驚くべき仕事に感謝します。
このコードがあなたの研究に役立つと思う場合は、私たちの論文を引用してください
@article{decatur2023paintbrush,
author = {Decatur, Dale and Lang, Itai and Aberman, Kfir and Hanocka, Rana},
title = {3D Paintbrush: Local Stylization of 3D Shapes with Cascaded Score Distillation},
journal = {arXiv},
year = {2023}
}