こんにちは!悠です!
今回は「Stable Diffusion」で、生成されるAIイラストのポーズを指定することができる拡張機能「ControlNet」の使い方についてまとめていきます。
「Stable Diffusion WebUI」の全拡張機能の中でも間違いなく1番有名で、より高品質なAIイラストを作る上で必須級の拡張機能なので、ぜひとも忘れずに導入しておきましょう!

なお、今回のアイキャッチ画像は「RealDosMix」で生成いたしました!
「ControlNet」とは?

出典:https://github.com/Mikubill/sd-webui-controlnet
「ControlNet」とは、Stable Diffusion WebUIの拡張機能の1つで、あらかじめ用意した画像からポージングだけを抜き出して、生成されるAIイラストに反映させることができます。
出力画像の構図をかなりの精度で指定することができるので、専用のプロンプトをわざわざ準備しなくても高確率で特定の構図やポーズを再現することが可能になりますよ!
「ControlNet」の導入方法
それではStable Diffuision WebUIに「ControlNet」を導入していきましょう。
ローカル版の場合
Extensions → Install from URL → URL for extensions’s git repositoryの欄に、下記のURLを入力します。
https://github.com/Mikubill/sd-webui-controlnet
入力し終わったらオレンジ色のInstallボタンをクリックし、Loadが終わるまで待ちましょう。
インストールが完了したらWebUIを再起動すると、txt2imgの下部にControlNetの欄が表示されます。
「ControlNet」専用モデルのダウンロード
次に「ControlNet」専用のモデルデータをダウンロードしていきます。
「ControlNet 1.1」のモデルデータは下記のURLからダウンロードできます。

なお、ファイルサイズが約半分の軽量化されたモデルデータも登場しています。

ダウンロードしたファイルは、「\webui\extensions\sd-webui-controlnet\models」に保存しましょう。
各モデル(プリプロセッサ)の用途
「ControlNet」を使う際は、上の項でダウンロードしたモデルデータごとの手法に応じて、画像からポーズ(構図)を抽出します。
手法によって2次元イラストからのポーズ抽出が得意だったり、逆に実写画像からの抽出に優れていたりと特性があります。
各モデルの特徴は以下の通りです。
- canny: 素材から輪郭線を抽出してポーズを再現する。主に2次元イラストに使用する。
- depth: 素材から深度マップを抽出してポーズを再現する。立体的な位置関係の処理に優れ、実写・2次元ともに強い。
- hed(softedge): Mov2mov以外ではまず使わない。
- normal: 素材から法線情報を抽出してポーズを再現する。まず使わない。
- openpose: 素材から棒人間の画像を抽出してポーズを再現する。人体の関節・指・顔の表情などを再現可能なopenpose fullが人気。
- MLSD: 素材から直線のみを抽出する。人工物(建物など)専用で、人体のポーズ再現には使えない。
- lineart: 素材を線画に変換してポーズを再現する。1.1で追加されたモデルで、cannyにとてもよく似ている。
- Scribble: マウス等で書いた落書き(手書き)の線を元に、画像を生成するモデル。
- Seg: Segmentation(セグメンテーション)という技術で、画像を複数の領域(顔の領域・服の領域・背景の領域など)に分け、それをもとに構図を再現する。inpaintのマスクに近いイメージ。
- Shuffle: 素材の画像を一度バラバラにして(シャッフルして)再構成し、別の画像を生み出すモデル。個人的にはほぼ使わない。
- Tile: アップスケール専用のモデル。MultiDiffutionと合わせて使う。(参考記事)
- Inpaint: ControlNetでinpaintを行う。画像の外側を自然に拡張するOutpaintingも可能。
- IP2P: 素材にプロンプトで指示を与えて(例: make her angry=彼女を怒らせろ)修正を加えるモデル。詳しくはこちら。
- Reference: プロンプト無しで素材とほぼ同じ雰囲気(顔・髪型・服装・背景など)の画像を出力できるモデル。超有能。詳しくはこちら。
- T2IA: 低VRAM向けのモデル。VRAM6GBでもMulti ControlNetを使いたい場合はこれ。詳しくはこちら。
より詳しく見たい方は、下記の記事が非常に参考になります。

Google Colaboratory版の場合
下記の方法で紹介している「maintained by Akaibu」のノートブックを使って、拡張機能「ControlNet」を導入していきます。
まだご覧になっていない方は、まず最初にこちらを準備しておいてください。


Google Driveからモデルデータを読み込むセルの下に新しくセルを作成し、下記のコードを入力してください。
#ControlNetの環境をインストール %cd /content/stable-diffusion-webui/extensions/ !git clone https://github.com/Mikubill/sd-webui-controlnet /content/stable-diffusion-webui/extensions/sd-webui-controlnet #ControlNetで使用するモデルをダウンロード %cd /content/stable-diffusion-webui/extensions/sd-webui-controlnet/models/ !wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_canny.pth !wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11f1p_sd15_depth.pth !wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_openpose.pth !wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_seg.pth %cd /content/stable-diffusion-webui
!wget以下に、下記のHugging FaceにあるControlNetのモデルデータ(1.4GBあるファイル)のダウンロードリンクをコピペしましょう。

場所は下の画像を参考にしてください。
「ControlNet」の使い方
では、実際にControlNetを使っていきましょう。今回は例として、openposeモデルを使用します。
まず、ポージングを抜き出したい画像を用意します。
今回は私が作成した下記のAIイラストからポーズを抽出してみます。(モデルにはYuzuを使用しています)
WebUIを起動してControlNetのタブを開き、用意した画像をドラッグアンドドロップしましょう。
Enableにチェックを入れ、Preprocessorにopenpose_full、Modelにcontrol_v11p_sd15_openposeを指定します。
※Openposeのチェックボックスをクリックすると、自動で最適なモデルを選択してくれます。
なお、別のモデル(手法)を使う場合は、Preprocessorの欄とModelの欄に同じ手法のデータが来るように揃えて設定しましょう。
難しく考えなくても、チェックボックスを使っておけばとりあえず問題ありません。
これで準備完了なので、例として下記のプロンプトでAIイラストを生成してみます。モデルはMomijiMixです。
masterpiece, best quality, highres, 1girl, black hair
(worst quality, low quality:1.4), (monochrome, greyscale:1.4), nude, bad anatomy, EasyNegative, text, logo, watermark, bad_prompt_version2
生成された画像は次のようになりました。ほとんどプロンプトで指定を入れていませんが、ほぼ同じ構図の画像が出力されているのがわかると思います。
Cannyについての補足
素材に使う画像の線画を抽出して、それをポーズに反映します。
そのため、線がはっきりしている2次元イラストからのポーズの抽出に優れています。
例として、私が好きなゲームのとある1シーンの画像から線画を抽出した例を紹介します。
生成された画像は次のようになります。なお、モデルデータにはHassakuを使用しています。
Depthについての補足
素材に使った画像から深度情報を抽出して、それをポーズに反映します。
こちらはフォトリアル系・写真のような画像からの抽出に適しているといわれています。
例として、ダブルピースしている女性の写真から深度マップを抽出した画像が次のものです。
生成された画像は次のようになります。なお、モデルデータにはHassakuを使用しています。
Openposeについての補足
素材に使ったイラストから棒人間の画像を抽出して、それをポーズに反映します。
複数のプリプロセッサがありますが、指の構図や顔の表情まで再現できるOpenpose fullを使うのがおすすめです。
以下、棒人間の画像の例です。
【素材画像】
【抽出した棒人間の画像】
VRAM6GBのGPUでdepthやopenposeを使う方法
GTX1660Ti(VRAM6GB)等の低スペックGPUでも、CUDA out of memoryエラーが出ることなくdepthやopenposeを使う方法について下の記事でまとめました。

Multi ControlNetを使って複数のモデルを使う方法
デフォルトの「ControlNet」では一度に1つのモデル(cannyだけ、depthだけなど)を使うことしかできませんが、Multi ControlNetという機能を有効化することで複数のモデルを組み合わせて複雑な構図を指定することができます。
下の記事で詳しく紹介しています。

ControlNet Tileを使ったアップスケール方法
ControlNet v1.1で追加された「ControlNet Tile」と「MultiDiffusion」を組み合わせて、素材画像に忠実にアップスケールを行う方法について、下の記事で紹介しています。

reference_onlyを使って顔を固定する方法
「ControlNet」のv1.1.153以降に追加された新機能「reference_only」を使って、素材に使う画像の顔や画風をある程度固定したまま、別の構図でイラストを出力する方法について、下の記事でまとめています。

「instruct-pix2pix」モデルの使い方
img2imgにアップロードした画像に対し、ポジティブプロンプト内で指示を与えることで、元画像をその指示に則って改変・修正することができる「instruct-pix2pix」について下の記事で紹介しています。
ControlNetの専用モデルを使うことで、簡単にWebUIで試すことができますよ!

拡張機能「Openpose Editor」の使い方
Openposeのプリプロセッサで出力した棒人間の画像を、WebUI上でリアルタイム編集できるようになる拡張機能「Openpose Editor」の使い方に関して下の記事でまとめています。

まとめ
以上が「Stable Diffusion」で、生成されるAIイラストのポーズを指定することができる拡張機能「ControlNet」の使い方でした。
拡張機能の導入はそれほど難しくないのにもかかわらず、AIイラストの作成を大きく助けてくれるので、ぜひ参考にして導入してみてください!
では、ここまで読んでいただきありがとうございました。
コメント
Controlnetは気になっていたので嬉しいです!
ありがとうございます!
僕も調べて思ったのですが、自分で生成した画像(loraは使用せずプロンプトのみで生成)の顔を使って好きなポーズをさせるというものではなく、
新たに作るキャラクターのポーズを指定するというイメージでしょうか?
もちろんloraを使用すればその顔にはなると思うのですが。。
コメントありがとうございます!
なるほど~、同一seed値でcontrolnetを使うとどうなるかは未確認でした!
仰るように、新たに作成するイラストのポーズを指定する機能だと今のところ私も思っています。
でも保存している画像と同一プロンプト、同一seed値を使うと、その画像とポーズ以外の要素はほぼ同じ画像も作れそうですよね。
これはあとで試してみます!
これをインストールしたら顔が歪むのですが、みなさんどうですか??
ポーズはつくりやすいのですが。。。
悠さん、おはようございます。
コントロールネットについてお話がございます。
ただ今の私のローカルのバージョンは、
version: v1.4.1 • python: 3.10.6 • torch: 2.0.1+cu118 • xformers: 0.0.20 です。
初期バージョンで使っていました時は、依然ご紹介して下さいましたもので使えましたが、
今回同じ様にExtensionsからURLを入力してみましたが処理が終わった後、
WebUIのUIにOPEN POSEとか出て来なかったので、CMDを見ると色つきの文字で使えないと書いてありました。
これはどうすればよろしいでしょうか?
ちなみにxformersが最新バージョンの0.0.20なのですが、生成がかなり速くなりましたね。(RTX3060 12GbCO仕様です)
コントロールネット他使えなくなっている物もあるかも知れませんから、教えて頂けないでしょうか?
何卒よろしくお願い申し上げます。
コメントありがとうございます!お久しぶりです!
Cmd(コマンドプロンプト)に表示されているエラーメッセージ(色つき文字)を教えていただいてもよろしいでしょうか?