見出し画像

SD-webui-ForgeのブランチxDepth FM : paperspaceのコマンドと検証的なもの

最近、Forgeのアップデートがあまりありませんよね(2024/3末時点)。
Githubページを見ると、作者の方が非常に忙しいようです。これだけ優秀なアプリをたくさん開発出来る方ですから仕方がないのかもしれません。
そういった中で、他の方が作成したいくつかのブランチがあります。
その中で、新しいDepthプリプロセッサーを入れたブランチがあり、それを試してみるコマンドを作成しました。

修正点がいくつかあったため、コマンド全体を修正しています。
一時ディレクトリでの使用を前提としたものになります。

①Forgeブランチのインストールコマンド

#(1) webui forge DepthFMブランチ
%cd /tmp
!git clone --branch depth_fm https://github.com/lllyasviel/stable-diffusion-webui-forge.git stable-diffusion-webui

②モデル、VAEのインストールコマンド

# ChromaXL
!cd /tmp/stable-diffusion-webui/models/Stable-diffusion && \
wget -nc https://huggingface.co/zzzAI19/ChromaXL/resolve/main/ChromaXL_v1b.safetensors?download=true -O ChromaXL_v1b.safetensors

# VAE
!cd /tmp/stable-diffusion-webui/models/VAE && \
wget -nc https://huggingface.co/stabilityai/sdxl-vae/resolve/main/sdxl_vae.safetensors?download=true -O sdxl_vae.safetensors


# Embeddings
!cd /tmp/stable-diffusion-webui/embeddings && wget -nc https://civitai.com/api/download/models/264111 -O negative_v2.safetensors

!cd /tmp/stable-diffusion-webui/embeddings && wget -nc https://civitai.com/api/download/models/159184 -O ImgFixerPre0.3.safetensors

③WebUIの起動コマンド:xformersなどを入れたもの。起動を確認済。

#(2) WebUI起動
!apt update
!apt -y install python3.10 libpython3.10-dev build-essential
!curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10

# CUDA対応のPyTorch関連パッケージをインストール(例)
!python3.10 -m pip install torch==2.1.2+cu121 torchvision==0.16.2+cu121 torchaudio==2.1.2+cu121 torchtext==0.16.2 torchdata==0.7.1 xformers==0.0.23.post1 --extra-index-url https://download.pytorch.org/whl/cu121 -U

!python3.10 -m pip show pydantic fastapi
!python3.10 -m pip install --upgrade pydantic fastapi

# その他必要なライブラリをインストール
!python3.10 -m pip install httpx==0.24.1 matplotlib ipython insightface timm==0.6.7 -U

%cd /tmp/stable-diffusion-webui
!python3.10 launch.py --pin-shared-memory --cuda-malloc --cuda-stream --xformers --enable-insecure-extension-access --share --gradio-queue --unet-in-fp8-e4m3fn 

④FP8を設定した後、一度webuiを閉じる。

Depth FMモデルをインストールに関してですが、モデルのダウンロード先から直接ダウンロードしようとすると、ものすごく時間がかかります。huggingfaceのプライベートモデルにDepthfmモデルをアップロードして、コマンドでダウンロードするのが一番良いと思います。
そうでない場合は、webuiを立ち上げて、depth_fmのプレビューを作成するか使用するかすると自動的にダウンロードされます。
こちらは20分くらいかかりました。

# 必要なディレクトリを作成
!mkdir -p /tmp/stable-diffusion-webui/models/ControlNetPreprocessor/depth_fm

# depthFM モデルファイルをダウンロード ※修正して使用
!cd /tmp/stable-diffusion-webui/models/ControlNetPreprocessor/depth_fm && \
curl -L -H "Authorization: Bearer APIキー" "モデルのURL" -o depthfm-v1.ckpt

⑤コントロールネットのモデルのダウンロード

# コントロールネットDEPTH
!cd /tmp/stable-diffusion-webui/models/ControlNet && \
wget -nc https://huggingface.co/lllyasviel/sd_control_collection/resolve/main/diffusers_xl_depth_full.safetensors?download=true -O diffusers_xl_depth_full.safetensors

⑥再起動して完成

コントロールネットのプリプロセッサーを確認すると「depth_fm」が「depth_anything」の上に増えているのが確認できます。

「Depth FM」の特徴とは?

Githubサイトです。論文のリンクも貼っておきます。

<論文のGPTさんの要約>

どんなもの? DepthFMは、流れ(matching)モデルを用いて、高速かつ正確に単眼画像から深度推定を行う技術です。このモデルは、合成データのみを使って訓練され、未見の実画像に対しても優れた一般化能力を示します。
先行研究と比べてどこがすごい? DepthFMは、最先端の生成法に比べてサンプリング速度が非常に速く、ディスクリミネーション(識別)モデルと比べてよりシャープで詳細な深度マップを生成します。また、合成データのみで訓練されているにも関わらず、現実の画像に対して高い一般化性能を持つ点も特徴です。
技術や手法のキモはどこ? キモは、流れ(matching)モデルを使用して入力画像から深度マップへの直接マッピングを学習することにあります。また、事前に訓練された画像拡散モデルを使用して、訓練の効率化とモデルの一般化能力の向上を実現しています。
どうやって有効だと検証した? 標準的なベンチマークデータセット上での実験により、合成データのみを使用して訓練されたにもかかわらず、DepthFMが現実の画像に対して優れた一般化能力を持つことを実証しました。また、異なる解像度やアスペクト比の実画像に対しても、リアルな深度マップを生成できることを示しています。
議論はある? 合成データと実データの間のギャップをいかに効果的に橋渡しするかが議論のポイントです。DepthFMはこの問題を、画像拡散モデルから流れモデルへの知識の転送を通じて解決しており、実画像の特徴を捉えることに成功しています。

このモデルはMarigoldモデルと比較しているようです。
「Marigold」と今回の「DepthFM」の違いはGPTさんに聞いたところ、以下のようになりました。
「DepthFM」と比較して、「Marigold」は異なるアプローチを採用しています。「DepthFM」が合成データに基づく訓練と流れモデルに重点を置いているのに対し、「Marigold」は既存の画像生成モデルを再利用し、合成データによるファインチューニングによって深度推定を実現しています。両者ともに一般化性能が高く、未見の実データに対する適応能力を示していますが、技術的なアプローチと重点を置く点で差異があります。

この2者の比較で、DepthFMモデルがMarigoldモデルと比較して顕著なサンプリング速度を示していること、そしてMarigoldが少なくとも2回の関数評価を必要とするのに対し、DepthFMは1回の関数評価で非常に良い結果を達成できることが述べられているようです。

Marigoldについては、下の記事で少し言及していますが、Depth Mapはとてもきれいですが、生成に他モデルの倍以上時間がかかる難点がありました。ここの改善が期待できます。

<実際に試してみた>

試してみたプロンプト
1girl, child, japanese, upper half body,  flat chest, yellow dress, (cityscape), street, in public

Depth Mapと生成画像の比較
DPM++SDE  step 6 CFG5.5
こちらが元画像です。1024x1024

① depth fm 13-14s / 枚

② marigold 17.1s / 枚


③ anything  8.3s/枚

④ depth zoe 8.4s / 枚

生成時間を見る限りでは、marigoldよりは早くなっていますが、zoeやanythingよりは長いです。倍近い。。。

出来上がりの画像の質は使用しているモデルとの相性もありますが、depth fmとdepth zoeが良い感じになりました。

Depth Map的には、Marigoldが一番良いのですが、細かすぎるからか、この実写系モデルだとノイズみたいな感じになってしまいました。
ステップ数やサンプラーなどを調整すると良いかも知れませんが、もともと生成時間が長いので挑戦しにくいですね。

Depth fmにあるパラメーターについて

コントロールネットでは、他のDepthモデルと違い、2つのパラメーターが追加されています。

「Num Steps」「Ensemble Size」ですね。

公式の説明を見ると、これらの項目は以下のように書いてあります。
num_steps:関数の評価回数の設定。このモデルは、わずか1~2ステップですでに非常に良い結果を出しているとのこと
ensemble_size:パフォーマンスも向上させるもの。現在のところ、推論コードはアンサンブルのバッチサイズを1しかサポートしていない

「Num Steps」を上げるとDepth Mapがより詳細な感じになりますが、その分より時間がかかります。2か3にするのが良いと思われます。

「Ensemble Size」は1以外だとエラーで作動しません。公式の説明の記載に相当している?

しかし、論文を見る感じだと、ensemble sizeは2以上の方が良さそうに見えます。

公式のページのデフォルトはnum_stepが2、ensemble sizeが4なので、今後の改善が期待されるということなのでしょうか。

このdepth fmですが、deforumでも使用可能です。

この記事が気に入ったらサポートをしてみませんか?