🚀

今話題のcontrolnetをcolab&最低限&最速で試す方法 (stable-diffusion-webui)

2023/02/18に公開
7

前置き

controlnetとは、画像生成時にポーズを指定して、画像生成できるようになったなんかすごいやつです。
Twitterで話題になっているので、気になって試そうとしてみると、stable-diffusion素人の自分にはわかりやすい記事はなく、謎エラーで苦しみました。
同じ思いをしてほしくないので、ノウハウを残しておきます。

前提知識

controlnetは、stable-diffusion-webui上で、拡張機能として動かせます。
stable-diffusion-webuiは、stable-diffusionをいい感じにUIで操作できるやつです。
stable-diffusion-webuiはPythonで動くので、Pythonの実行環境が必要です。
ColabというPython実行環境(GPUも使える)サービスを使って実行します。stable-diffusionなどの画像生成系のは、GPUやメモリを激しく消費するので、ローカルよりもcolabを使うのがいいかと思います。

早速始める

colabにアクセスする

https://colab.research.google.com/ からcolabにアクセスしましょう。
colabは、googleが提供してくれるPython実行環境です。Googleアカウントがあれば誰でも無料で使えます。GPUまで無料で使わせてもらえます。ですが、有料プランで使ったほうがいいです。自分の場合無料版だと実行に失敗しました。
アクセスしたら、ノートブックを新規作成しましょう。

ランタイムを変える

画像生成系は、GPUを使います。有料プランへの契約する必要があります。ランタイム>ランタイムタイプの変更から、ハードウェアランタイムのGPUを使うようにしましょう。「GPUクラスをプレミアムする」or「ランタイムをハイメモリにする」かしましょう。「ランタイムをハイメモリにする」を選んだほうが消費されるコンピューティングのユニット数が少ないのでおすすめです。
(↑ 2023/03/01更新: わかりづらいので文章を修正しました。)


そして以下のコマンドを実行します。GPUが獲得できることがわかり、スペックを見ることができます。

!nvidia-smi

以下のコマンドを実行していく

# webuiをインストール
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

# sd-webui-controlnet のダウンロード
!git clone https://github.com/Mikubill/sd-webui-controlnet /content/stable-diffusion-webui/extensions/sd-webui-controlnet

# 作業ディレクトリを移動させておく
%cd /content/stable-diffusion-webui
# モデルダウンロード関数の定義
!apt-get -y install -qq aria2 # aria2を使うと爆速で、モデルをダウンロードできる
def download_model(download_model_url, output_dir):
  # urlの最後がモデル名として、ファイル名を取得する
  file_name_path = download_model_url.split('/')[-1]
  # ダウンロードの実行
  !aria2c --console-log-level=error -c -x 16 -s 16 -k 1M {download_model_url} -d {output_dir} -o {file_name_path}
  # ダウンロード後の配置されたディレクトリを一応確認
  !ls -lh {output_dir}
# stable-diffsion v1.5 のモデルのダウンロード
download_model("https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors", "/content/stable-diffusion-webui/models/Stable-diffusion")

(2023/03/01 更新: モデルを1.4→1.5にしました)

# sd-webui-controlnet cannyモデル をダウンロード
download_model("https://huggingface.co/lllyasviel/ControlNet/resolve/main/models/control_sd15_canny.pth", "/content/stable-diffusion-webui/extensions/sd-webui-controlnet/models")

# sd-webui-controlnet openposeモデルをダウンロード
download_model("https://huggingface.co/lllyasviel/ControlNet/resolve/main/models/control_sd15_openpose.pth", "/content/stable-diffusion-webui/extensions/sd-webui-controlnet/models")
# webuiを別URLで立ち上げる(20分とか結構時間がかるかも??)
!python launch.py --share --xformers --enable-insecure-extension-access

uiでの操作

出力にURLが出るのでクリックします。

Running on public URL: https://**.gradio.live

あとは、ざっくりこんな感じで、できると思います。
(2023/03/01 更新: 以前はimg2imgでやっていましたが、text2imgでも可能かつ簡単なので、更新しました)

ポイント解説

  • 一番のstable-diffsionのモデル1.5を使っているところです。2.1で動かず、いろいろ試した結果v1.5だと動くことがわかりました。(2023/03/01 更新: 前まで1.4で試してましたが、1.5でも動くことがわかったので更新しました。)
  • モデルダウンロード関数の定義を定義して、内部でaria2を使ってモデルのダウンロードを爆速にしています。計測していませんが、体感ですが、wgetなどよりも3倍以上早いんじゃないかなと思います。モデルは5GBサイズとかそのオーダーで、ダウンロード待ち時間がエグいので、aria2は必須です。
  • sd-webui-controlnetは、拡張機能なので、/stable-diffusion-webui/extensions/配下にダウンロードしています
  • sd-webui-controlnetのモデルのダウンロード先は、/content/stable-diffusion-webui/extensions/sd-webui-controlnet/models/なのも注意が必要です。
  • sd-webui-controlnetでは、openposeモデルを使っています。ポーズ画像によって使い分けてください
    • モデルごと説明
      • cannyモデル、アニメや写真など実際の肉がついた人や動物の入力から、絵を生成します。参考
      • openposeモデル、色付き棒人間っぽいopenposeや人の写真を入力として、人の姿勢を検出し、その人の絵を出力します。参考
      • scribbleモデル、落書きのようなラフな手書きの絵を入力として、絵を生成します。参考
      • hedモデル、色やスタイルの変更に使うモデルです。参考
      • depthモデル、写真に奥行きをいい感じに出せるようです。参考
    • 別のモデルを使いたい場合は、ここにアクセスして、モデルを選びましょう。例えば、openposeを選びたい場合は、openposeをクリックすると、https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_openpose.pth というURLに遷移すると思います。このURLのblobをresolveに変更して、それをdownload_model関数に与えるとモデルがダウンロードできます。下みたいな感じです。
    download_model("https://huggingface.co/lllyasviel/ControlNet/resolve/main/models/control_sd15_openpose.pth", "/content/stable-diffusion-webui/extensions/sd-webui-controlnet/models")
    

まとめ

雑ですが、ざっくりcontrolnetを実行できるところまで解説しました。
気になる点などあればコメントしてもらえると嬉しいです!
お読みいただきありがとうございました!

Discussion

aiartsaiarts

質問させてください。

webuiを別URLで立ち上げる(20分とか結構時間がかるかも??)

までcolabセルで実行をしましたが、URL(publicurlのhttps://(数字).gradio.app/ )が出てこないのでインターフェイスが出ません。
セルの実行カーソルにチェックは入っているのですが。

z9nekoz9neko

読んでいただきありがとうございます!
記事が読みづらくて、申し訳ないのですが、おそらく「ランタイムを変える」あたりで間違っているのかと思います。文章を修正したので、そちらをご確認いただければと思います🙇‍♂️

aiartsaiarts

ありがとうございます。
z9nekoさんのでやりたかったので、課金してランタイムを変更しました。
ポーズのフリーアプリ等がよくわからず、ネットに落ちているポーズを使い
無事成功しました。

こちらはモデルを変更する場合は、

stable-diffsion v1.5 のモデルのダウンロードを変えれば良いのでしょうか?

AbyssOrangeMix2〜3を使いたいのです。
"https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3.safetensors -O /content/stable-diffusion-webui/models/Stable-diffusion/AOM3.safetensors"

書き換えるだけでは、エラーが出てしまいました。
アドバイスを頂けないでしょうか?orz

z9nekoz9neko

パッと見た感じ後半文字列のファイル名が不要そうですね

aiartsaiarts

ありがとうございます。
なんとか起動できました!

モデルを変更する前もした後も、2〜3回くらいで100%読み込んだあとで
フリーズしてしまいます。
設定の負荷なのかcolabの問題なのか・・・。

aaaa

blobをresolveに変えた理由って何かありますか?