Stable Diffusion WebUI (on Colab) : ControlNet (1) 深度マップ

Stable Diffusion WebUI (on Colab) : ControlNet (1) 深度マップ (ブログ)

作成 : Masashi Okumura (@ClassCat)
作成日時 : 04/18/2023

* サンプルコードの動作確認はしておりますが、動作環境の違いやアップグレード等によりコードの修正が必要となるケースはあるかもしれません。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Website: www.classcat.com  ;   ClassCatJP

 

 

Stable Diffusion WebUI (on Colab) : ControlNet (1) 深度マップ

Stable Diffusion の研究は生成過程の結果に対して更に制御を持てる方法を模索してきました。ControlNet はユーザが生成過程をかなりカスタマイズすることを可能にする最小限のインターフェイスを提供します。ControlNet を使用して、ユーザは、深度マップ, セグメンテーション・マップ, 走り描き, キー・ポイント, 等々のような様々な空間的コンテキストにより生成を簡単に条件付けることができます。

この記事では Stable Diffusion WebUI で ControlNet を使用する方法について簡単に説明します。最初は深度マップによる条件付けを扱います。🤗 Diffusers を使用した ControlNet の詳細については以下をご覧ください :

 
前提条件 :

Stable Diffusion WebUI で ControlNet を試すには、別途 WebUI の動作環境が必要です。その構築方法については以下の 1 を参照してください :

  1. PyTorch 2.0 : Google Colab で Stable Diffusion WebUI 入門
  2. Stable Diffusion WebUI (on Colab) : HuggingFace モデル / VAE の導入
  3. Stable Diffusion WebUI (on Colab) : LoRA の利用
  4. Stable Diffusion WebUI (on Colab) : 🤗 Diffusers による LoRA 訓練

 

深度マップの作成

今回は深度マップを条件とする ControlNet を扱いますので初期画像の深度マップの作成が必要となりますが、その方法は 🤗 Diffusers の深度推定モデルを利用すれば簡単です。

ここでは Intel/dpt-large を利用しましょう。モデルカードのサンプルコードをそのまま実行してみます :

from transformers import DPTImageProcessor, DPTForDepthEstimation
import torch
import numpy as np
from PIL import Image
import requests

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

processor = DPTImageProcessor.from_pretrained("Intel/dpt-large")
model = DPTForDepthEstimation.from_pretrained("Intel/dpt-large")

# prepare image for the model
inputs = processor(images=image, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs)
    predicted_depth = outputs.predicted_depth

# interpolate to original size
prediction = torch.nn.functional.interpolate(
    predicted_depth.unsqueeze(1),
    size=image.size[::-1],
    mode="bicubic",
    align_corners=False,
)

# visualize the prediction
output = prediction.squeeze().cpu().numpy()
formatted = (output * 255 / np.max(output)).astype("uint8")
depth = Image.fromarray(formatted)

 

ControlNet 用拡張ライブラリのインストール

Stable Diffusion WebUI で ControlNet を利用するためには、必要な拡張ライブラリとモデルチェックポイントのインストールが必要です。Stable Diffusion WebUI の構築は完了しているものとします。

◇ まず、ControlNet 用の WebUI 拡張 Mikubill/sd-webui-controlnet をインストールします。この拡張は、ControlNet を元の Stable Diffusion モデルに追加することを WebUI に可能にします。

この拡張は WebUI からでもインストールできますが、extensions ディレクトリに “git clone” すれば簡単です :

%cd /content/stable-diffusion-webui/extensions/

!git clone https://github.com/Mikubill/sd-webui-controlnet

 
◇ そして、lllyasviel/ControlNet のモデルチェックポイントは extensions/sd-webui-controlnet/models に配備します。ここでは safetensors 形式に変換されたチェックポイントを使用しています :

%cd /content/stable-diffusion-webui/extensions/sd-webui-controlnet/models/

!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_canny-fp16.safetensors
!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_depth-fp16.safetensors
!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_hed-fp16.safetensors
!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_mlsd-fp16.safetensors
!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_normal-fp16.safetensors
!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_openpose-fp16.safetensors
!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_scribble-fp16.safetensors
!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_seg-fp16.safetensors

今回は深度マップを扱いますので、以下だけでも十分です :

%cd /content/stable-diffusion-webui/extensions/sd-webui-controlnet/models/

!wget https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_depth-fp16.safetensors

 

WebUI での ControlNet (深度マップ) の使用方法

基本的な使い方は簡単です。(“Seed” のすぐ下の) “ControlNet” をクリックすると、ControlNet の設定に必要な UI が展開されます :

 
最小限必要な設定は以下です :

  • 深度マップ画像のアップロード
  • “Enable” ボタンをクリックして有効にする。
  • Preprocessor を “depth_xxx” のいずれかに設定します。上の画像では、”depth_midas” が選択されています。
  • Model として “control_depth-fp16” を選択します。

以上を設定した上で、例えばプロンプトを “two sleeping cats” として “Generate” ボタンをクリックすれば画像生成されます :

 

以上