今話題のcontrolnetをcolab&最低限&最速で試す方法 (stable-diffusion-webui)
前置き
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モデルを使っています。ポーズ画像によって使い分けてください
- モデルごと説明
- 別のモデルを使いたい場合は、ここにアクセスして、モデルを選びましょう。例えば、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
質問させてください。
webuiを別URLで立ち上げる(20分とか結構時間がかるかも??)
までcolabセルで実行をしましたが、URL(publicurlのhttps://(数字).gradio.app/ )が出てこないのでインターフェイスが出ません。
セルの実行カーソルにチェックは入っているのですが。
読んでいただきありがとうございます!
記事が読みづらくて、申し訳ないのですが、おそらく「ランタイムを変える」あたりで間違っているのかと思います。文章を修正したので、そちらをご確認いただければと思います🙇♂️
ありがとうございます。
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
パッと見た感じ後半文字列のファイル名が不要そうですね
ありがとうございます。
なんとか起動できました!
モデルを変更する前もした後も、2〜3回くらいで100%読み込んだあとで
フリーズしてしまいます。
設定の負荷なのかcolabの問題なのか・・・。
それはわからないですねぇ
blobをresolveに変えた理由って何かありますか?