Giuseppe Vecchio、Renato Sortino、Simone Palazzo、Concetto Spampinato

紙「Matfuse:拡散モデルを備えた制御可能な材料生成」の公式Pytorch実装。
MatFuseは、SVBRDF(空間的に変化する双方向反射率分布機能)の作成を簡素化する新しいアプローチです。
拡散モデル(DM)の生成力を活用して、材料合成プロセスを合理化します。カラーパレット、スケッチ、テキスト、写真を含む複数のコンディショニングソースを統合することにより、材料生成において、きめ細かい制御と柔軟性を提供します。
さらに、Matfuseは、最初の生成後に合成された材料を編集または改良することを可能にしました。特定のマップまたは資料全体の特定の領域をマスキングすることにより、マップレベルの編集をサポートします。

コンピューターグラフィックスに高品質の素材を作成することは、挑戦的で時間のかかるタスクであり、優れた専門知識が必要です。このプロセスには、SVBRDFマップの作成を簡素化するために拡散モデルの生成力を活用する統一されたアプローチであるMatFuseを導入します。当社のパイプラインは、カラーパレット、スケッチ、テキスト、写真など、複数のコンディショニングソースを統合し、材料合成においてきめ細かい制御と柔軟性を得ています。この設計により、多様な情報ソース(スケッチ +テキストなど)の組み合わせが可能になり、構成の原則に沿った創造的な可能性が向上します。さらに、2倍の目的を持つマルチエンコーダー圧縮モデルを提案します。各マップの個別の潜在表現を学習することで再構築パフォーマンスを改善し、マップレベルの素材編集機能を有効にします。複数のコンディショニング設定でMatfuseの有効性を実証し、材料編集の可能性を調査します。また、Clip-IQAおよびFIDスコアの観点から生成された材料の品質を定量的に評価します。

このレポは、 MATFUSEペーパーに記載されている機能を含めるように変更された元の潜在拡散実装(https://github.com/compvis/stable-diffusion)に依存しています。元の安定した拡散コードベースに精通している場合は、これを実行するのに問題がないはずです。
最も関連性の高い変更は次のとおりです。
Matfuseは、Deschaintre et al。 (2018)およびポリヘブン図書館の材料。このようなデータセットは簡単に収集できるため、このようなデータセットをリリースする予定はありません。とにかく、独自のMATFUSEをトレーニングする予定がある場合は、幅広い高解像度の材料と注釈を含む最近リリースされたデータセットMatSynthを使用して強くお勧めします。
git clone https://github.com/giuvecchio/matfuse-sd.git
cd matfuse-sdこれは、クローン後にmatfuse-sdルートに移動したことを前提としています。
注:これはpython3.10でテストされています。他のPythonバージョンの場合、バージョンの競合に遭遇する可能性があります。
Pytorch 1.13.1
# create environment (can use venv instead of conda)
conda create -n matfuse python==3.10.13
conda activate matfuse
# install required packages
pip install -r requirements.txtMATFUSEのトレーニングには2つのステップが必要です。
どちらもsrcフォルダーのmain.pyスクリプトからアクセスされ、モデル、データセット、および損失をセットアップするための構成ファイルの使用に依存しています。
構成ファイルはsrc/configs/下にあり、 autoencoderとdiffusionサブフォルダーに分割されています。
トレーニングするモデルの部分に応じて、適切な構成ファイルを使用します。
トレーニングを開始する一般的なコマンドは次のとおりです。
python src/main.py --base src/configs/ < model > / < config.yaml > --train --gpus < indices, > Matfuseのトレーニングのためのデータセットクラスを提供します。このデータセットは、以下に示すようにデータフォルダーが構造化されることを期待しています。
./data/MatFuse/{split}/
├── bricks_045
│ ├── metadata.json
│ ├── diffuse.png
│ ├── normal.png
│ ├── roughness.png
│ ├── specular.png
│ ├── sketch.png
│ ├── renders
│ ├── render_00.png
│ ├── render_01.png
│ ├── ...
├── ...
データは、 trainとtestセットに分割される必要があります。各マテリアルフォルダーには、必要なSVBRDFマップ(拡散、通常、粗さ、鏡面)、テキストキャプションとカラーパレットを備えたmetadata.jsonファイルが含まれています。
data_rootプロパティを更新します。
src/scripts/dataフォルダーの下にあるレンダリングからカラーパレットを抽出するスクリプトを提供します。実行するには:
python src/scripts/data/extract_palette.py --data < path/to/dataset > トレーニング用の構成Autoencoderはsrc/configs/autoencoderで提供されます。
MATFUSEはVQ正規化モデルを使用します。詳細については、Taming-Transformersリポジトリを参照してください。
トレーニングは実行して開始できます
python src/main.py --base src/configs/autoencoder/multi-vq_f8.yaml --train --gpus 0,src/configs/diffusion/では、matfuse ldmsをトレーニングするための構成を提供します。matfuse-ldm-vq_f8.yamlのfirst_stage_configのckpt_pathを更新して、VQ-VAEチェックポイントを指します。
トレーニングは実行して開始できます
python src/main.py --base src/configs/diffusion/matfuse-ldm-vq_f8.yaml --train --gpus 0,トレーニングを再開するには、引数--resume <log/folder>トレーニングコマンドに追加します。
Windowsでトレーニングする場合は、分散バックエンドをglooに設定することを忘れないでください。他の人はサポートされていません!
$env :PL_TORCH_DISTRIBUTED_BACKEND= ' gloo '目に見えるGPUの使用数を制限するには:
CUDA_VISIBLE_DEVICES= < GPU_ID > python src/main.py ...実験は、重みとバイアスを使用して自動的に記録されます。独自のプロジェクトスペースとプロジェクト名を指定するには、次の環境変数を設定します。
WANDB_PROJECT= ' {YOUR_PROJECT_NAME} '
WANDB_ENTITY= ' {YOUR_PROJECT_SPACE_NAME} 'トレーニングされたモデルで推論を実行するには、モデルチェックポイントと構成へのパスを指定するgradio_app.pyスクリプトを実行します。
これにより、Webインターフェイスが開き、条件付きの生成と材料編集が実行されます。
python src/gradio_app.py --ckpt < path/to/checkpoint.ckpt > --config src/configs/diffusion/ < config.yaml > 

@inproceedings { vecchio2024matfuse ,
author = { Vecchio, Giuseppe and Sortino, Renato and Palazzo, Simone and Spampinato, Concetto } ,
title = { MatFuse: Controllable Material Generation with Diffusion Models } ,
booktitle = { Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) } ,
month = { June } ,
year = { 2024 } ,
pages = { 4429-4438 }
}