★FANBOX記事の前半部分までを無料公開しています
こんばんは、スタジオ真榊です。今回はStableDiffusionwebUIに大きな革命をもたらした拡張機能群「Controlnet」の大型解説記事です。2023年春に登場した「ver1.1」について、2023年4月27日時点で使用できるモデル14種とプリプロセッサ全35種のそれぞれの特徴とできることを検証しました。
Controlnetには、線画だけを抽出できる「Lineart」やポーズだけを抽出できる「Openpose」といったさまざまなモデルがあり、それらを有効に動かすための下ごしらえをする「プリプロセッサ(前処理機能)」というものが用意されています。
今回の記事は、それぞれの組み合わせやパラメータ設定、それによってできることなどを詳しく解説していく「総論」的な解説。「各論」に当たる各モデルの詳しい検証記事もリンクしてありますので、ぜひご活用ください。
目次
インストール&アップデート方法
モデルのダウンロード
モデルの種類とできること
プリプロセッサとは
プリプロセッサ一覧
操作画面の見方
【解説】Controlnetでできること
- invert(from white bg & black line)
- キャニー法
- 深度シリーズ
- inpaint global harmonious
- Lineartシリーズ
- openposeシリーズ
- mediapipe_face
- mlsd
- normal bae
- scribbleシリーズ
- segmentation(seg)シリーズ
- shuffle
- softedgeシリーズ(旧Hed)
- しきい値
- Tile resample
- なし-Pix2pix
終わりに
インストール&アップデート方法
まずは基本のインストール方法から。
インストールボタンを押して少し待つと、入力欄の下にインストール完了を告げるメッセージが表示されるので、2つ隣の「インストール済」タブに移動し、「アップデートを確認」ボタンをクリック。読み込みが終了したら、「適用して UI を再起動」ボタンを押せばOKです。再読み込みに失敗したらF5キーなどでブラウザ画面を更新してください。txt2txtの画面の下の方に「controlnet ◀」というタブができていれば成功です。
既にcontrolnetを導入している場合は、webUIの「拡張機能」から「アップデートを確認」をクリック。「sd-webui-controlnet」の欄の右端にある「アップデート」のところに「更新あり」と出たら、「適用してUIを再起動」すればOKです。
【!】Controlnetのタブが表示されないときは
インストールやアップデートの後、webUIが再読み込みしたのに、txt2txtの画面にControlnetのタブが表示されないことがあります。そんなときは慌てずに、いったんブラウザのwebUIタブと黒いコマンドプロンプト画面を閉じてみましょう。「再読み込み」でなく「再起動」でwebUIを立ち上げ直せば、再びいつもの場所にウィンドウが出現しているはずです。
・それでも表示されない場合は、Controlnetのアップデートもしくはインストール作業が完了していない可能性があります。もう一度「アップデートを確認」して、「最新版」と表示されるかどうか確かめてみましょう。
モデルのダウンロード
次に、controlnet1.1用の各抽出モデルをダウンロードしましょう。まずはこちらのURLにアクセス。
こちらに並んでいる「.pth」で終わるモデルファイルをダウンロードし、下記のいずれかのフォルダに入れましょう。どちらでも同じですが、①のmodelsフォルダの方が浅いし、他のモデルと同じ場所なのでおすすめ。
①「stable-diffusion-webui\models\ControlNet」
②「stable-diffusion-webui\extensions\sd-webui-controlnet\models」
それぞれのpthファイルの「1.45GB LFS↓」をクリックすればダウンロードできます。
かなり大きいサイズなので、最初から全てDLせず、試したいものだけでもいいかもしれません。これらの公式pthファイルを初めて使う場合、「yaml」ファイルはダウンロードする必要はありません。(モデルにアップデートがあり、新しいものに置き換えた場合はyamlファイルもダウンロードしましょう)
【中上級者向け】
容量が半分の723MBに抑えられたfp16版も既に出ているので、わかる方は始めからこちらを試してもOKです。ただ、1.45GBの公式版と違い、対応するyamlファイル名とモデルのファイル名を手動変更で一致させる必要がありますので、その点だけご注意ください。また、一部で公式版と異なる挙動をすることがあるようです。
【mediapipe faceのモデルは別の場所に】
表情抽出モデル「mediapipe face」は別の場所で配布されています。こちらの一覧から「control_v2p_sd15_mediapipe_face.safetensors」を同じフォルダにダウンロードしてください。
モデルの種類とできること
さて、Controlnetは、元となる画像からさまざまな学習モデルを使って情報を抽出・継承し、新たな画像を出力する技術です。2023年4月23日現在、次の各モデルを利用することができます。いずれもβテスト版で、一部は実験段階の機能であることに注意してください。
Pix2pix:control_v11e_sd15_ip2p.pth
→「髪を赤くして」「彼女をカウボーイ風にして」「葛飾北斎調のイラストにして」などと指示することで、元画像に任意の変化を起こせる
シャッフル:control_v11e_sd15_shuffle.pth
→元画像をパズルのピースのようにして「再構成」することで、同じ色合いの別の絵を生成できる
深度抽出:control_v11f1p_sd15_depth.pth
→元画像に描かれているもののうち、何が手前にあり、どこが奥にあるかの「深度情報」を推測して抽出することで、同じ構図の絵を生成できる
キャニー法(輪郭抽出):control_v11p_sd15_canny.pth
→元画像の輪郭(エッジ)を継承した別のイラストを生成できる。元イラストの被写体をおおむねそのまま引き継げる。
ソフトエッジ(旧Hed):control_v11p_sd15_softedge.pth
→キャニーとは別の輪郭抽出技術。キャニーよりもおおまかなエッジを抽出し、元イラストの被写体をおおむね引き継いだイラストを生成できる。
インペイント:control_v11p_sd15_inpaint.pth
→マスクした部分を別のものに変えられる。i2iの「inpaint」と似ているが、周囲に描かれているものを強く意識して「続き」を描けるので、工夫すると途切れたキャンバス外の続きを描かせる(=アウトペイント)こともできる。i2iのinpaintと異なり、マスクしていない部分が変容する点に注意が必要。
Lineart(線画抽出):control_v11p_sd15_lineart.pth
→元となる写真やイラストの主線を引き継いだ別のイラストを生成できる。Cannyとよく似ているが、非常に正確に主線を再現できるCN1.1からの新機能。
LineartAnime(アニメ線画抽出):control_v11p_sd15s2_lineart_anime.pth
→アニメ調イラストの線画を着色するのに適したlineartモデル。既存のカラーイラストから線画を継承するだけでなく、自分で用意した線画を着色することもできる。
mlsd(直線抽出):control_v11p_sd15_mlsd.pth
→元画像の中の「直線部分だけ」を継承する特殊なモデル。曲線で構成されるキャラクターなどは無視されるので、パース構造やカクカクした背景(ビルなど)のみを引き継ぎたいときに。
法線マップ抽出:control_v11p_sd15_normalbae.pth
→元イラストの陰影を元に立体を表現した「法線マップ」を抽出することで、元画像と同じ凹凸の画像を生成できる。深度情報を読み込むdepthに似ている。
オープンポーズ(表情・ポーズ抽出):control_v11p_sd15_openpose.pth
→読み込んだ画像の表情やポーズ、手の位置や形といった位置情報だけを継承して、同じ表情・ポーズの全く別の画像を生成できる。キャニーや線画抽出だと同じ「外形」のイラストしか作れないが、こちらは「口を大きく開けている」とか「こんなポーズをしている」といった情報のみを引き継げる違いがある。表情抽出ができるモデルでは、openpose faceの他に「mediapipe_face」もある。
mediapipe face(表情抽出):openposeとは別の手法で画像内の顔面を認識し、表情を写し取れる技術。openposeはイラストから表情抽出するのがやや苦手だが、こちらは比較的抽出できるようだ。
scribble(手描き入力):control_v11p_sd15_scribble.pth
→手描きした落書きやラフを元に完成イラストを出力できるように学習したモデル。5秒で描いたマウス絵からでも、AIが完成品を推測し、整った絵を生成してもらえる。
segmentation(領域分析抽出):control_v11p_sd15_seg.pth
→「描いて欲しい場所」と「描いて欲しいもの」を同時注文できる機能。入力した画像の「どこに何が描かれているか」を分析して、塗り絵のように「Person」「Sky」「Ground」などと色分けした上で、それぞれを継承した同じ構図の絵を生成できる。一見難解だが、使いこなせると非常に便利。
Tile(描き直しアップスケール):control_v11f1e_sd15_tile.pth
→試作品として公開されていたが、2023年4月25日にめでたく完成。入力した画像をタイルのように分割し、それぞれを個別に詳細化して元の形にくっつけることで、同じ構図の画像を高精細に生成できる「描き直し」機能。従来のアップスケールに比べ、大胆に拡大・高精細化しても画像が分裂しにくい。
※「MultiControlnet」という機能を使えば、複数のモデルを使って1枚の画像を生成することもできます。例えば、cannyとdepthでそれぞれ別々の画像から輪郭と深度情報を同時抽出して、1枚の画像として合体させることなども可能です。詳しい設定方法などはこちらの記事をご参照ください。
プリプロセッサとは
プリプロセッサは、読み込ませる画像をControlnetの各モデルが理解できる形に前処理する「下ごしらえ」担当の機能です。例えば、「lineart」というcontrolnetモデルは黒地に白で描かれた線画を読み込んで同じ線のイラストを生成できるようトレーニングしているので、通常の白地に黒の画像をそのまま読み込ませるとネガポジ反転した変な画像ができあがってしまいます。そこで、「lineart anime」などの白黒反転できるプリプロセッサに下ごしらえをさせる必要がでてくるわけです。
こちらの画像は、「depth midas」というプリプロセッサでカラーイラストから深度情報を抽出したスクリーンショット。これを「control_v11f1p_sd15_depth.pth」に読み込ませることで、深度情報を継承した新しい画像を生成することができるわけです。左の画像をそのままで読み込ませても、depthモデルは処理することができません。
「なし(none)」を選択すると、読み込ませた画像をあえて下処理せず、そのままControlnetのモデルに送ることができます。例えばOpenpose用のポーズ情報を自分で用意した場合、既に自分で下処理済みなわけですから、プリプロセッサに掛ける必要がないため「なし」を選ぶことになります。「Pix2pix」や「Shuffle」のように、下処理をせずに読み込めるモデルもあります。
前段階のプリプロセッサと本番の各モデルの組み合わせは必ずしも一つだけではなく、求めている処理・完成像によって使い分ける必要があります。
プリプロセッサ一覧
次に、それぞれのモデルに応じたプリプロセッサ一覧を見てみます。※2023年4月27日現在
invert(from white bg & black line):ネガポジ反転用
キャニー法:元画像の輪郭を抽出する
softedgeシリーズ(旧Hed):Cannyよりソフトに輪郭を抽出する
深度シリーズ:深度情報を抽出する
inpaint global harmonious:「inpaint.pth」用
lineartシリーズ:線画抽出用
mediapipe_face:表情抽出用
mlsd:元画像の直線部分のみを抽出する
normal bae:法線マップ抽出用。※normal midasはCN1.0のnormalmap用
openposeシリーズ:表情・手・ポーズ抽出用。「full」で全て適用される。
scribbleシリーズ:既存画像を落書き風に抽出する
segmentation(seg)シリーズ:領域分析用。描かれているものと場所を色分けする
shuffle:「シャッフル」用。元画像を渦状にゆがませる
しきい値:二値化処理(白と黒に分ける)
tile resample:「敷き詰めアップスケール」用
操作画面の見方
有効化
ここにチェックを入れることで、Controlnet機能を発動できる。入れ忘れに注意。
低VRAM
グラフィックボードのメモリ(VRAM)が8GB以下の場合はこちらにチェックを入れると、画像の生成速度が大きく下がる代わりに、VRAM不足の環境でもエラーを回避して生成することができる。VRAM4GBでも動作したとの報告あり。
推測(Guess)モード→削除
「非プロンプトモード」のような機能で、プロンプト欄に何も描き込まずとも、参照画像から抽出された情報に最大限注目して同様のものを自由に描くようAIに指示するモード。アップデートにより、後述する「制御モード」に吸収された。
Pixel Perfect
CN1.1から新設。プリプロセッサは使用する際に解像度(Preprocessor resolution)を手動で設定する必要があるが、ここにチェックを入れておくと、自動で最適なプリプロセッサ解像度が計算される。
Allow Preview
CN1.1から新設。ここにチェックを入れて、プリプロセッサ欄とモデル欄の中間にある爆発ボタンをクリックすることで、プリプロセッサが元画像から何を抽出したかプレビューすることができる。プレビュー画像は右上の「↓」ボタンでダウンロード可能。Lineartで抽出した線画は、画像編集ソフトで黒白反転させると通常の線画として画像編集に使える。
Controlnet weight
Controlnetの「重み」を調整できる。1が基本で、それ以下に弱めるとControlnetで入力した抽出情報の参照度が下がる。プリプロセッサやモデルの組み合わせ、どんな画像を作りたいか等によって適切な設定は異なる。詳しくは各モデルの各論参照。
StartingControlStep / EndingControlStep
Controlnetの効果がステップ全体のどの範囲に効かせるか選ぶことができる。
0が0%、1が100%を意味しており、デフォルトでは「0でスタート、1でエンド」。こうしておくとノイズ状態(0%)から生成終了(100%)まで全てのステップにControlnetが影響するが、例えばスタートを「0.8」にすることで、全体の80%に当たるステップ数から影響が出始める。(画像生成の最後の20%だけ影響するという意味)
なぜこんな機能が必要かというと、ステップ全体に効かせると画像生成に制約が掛かりすぎて品質が低下してしまうことがあったり、手の輪郭だけを指示したいのに、全ステップにその輪郭が効いてしまうと「手しかないイラスト」ができてしまったり…という不都合をなくすため。モデルによって適切な設定は異なるが、基本は「スタート0エンド1」もしくは「スタート0エンド0.6」程度にしておき、品質低下や不都合が生じたら調整するといい。
Preprocessor resolution
プリプロセッサ(前処理)を行って生成する下処理画像の解像度。Pixel PerfectをONにすることで入力を省略することができる。手動で入力する場合、数値が64の倍数でないと自動で近似値に調整されて横縦のサイズがおかしくなるなど不都合が起きるので注意。特に線画を抽出する際は、元画像と重ならなくなってしまう。
制御(control)モード
旧Guessモードの後継機能。プロンプト指示とControlnetの指示のどちらかをより強く影響させることができる。デフォルトでは両方を取り入れる「バランス」モードになっているが、例えば「my prompt is more important」を選ぶとControlnetの指示よりもプロンプト再現を優先してくれる。
【解説】Controlnetでできること
ここからは、いよいよ本題の「それぞれのモデルとプリプロセッサを使って何ができるのか」を具体的に解説していきます。モデルよりプリプロセッサの種類から見ていく方が組み合わせや使用目的を理解しやすいので、順番に見ていきましょう!
invert(from white bg & black line)
組み合わせるモデル:canny,lineartシリーズ
できること:ネガポジ反転が必要なデータを読み込ませられる
概要:元画像をネガポジ反転させるだけのプリプロセッサ。手元にある「白地に黒い線で描かれたモノクロ画像」をControlnetで読み込ませる場合はこちらを使って、黒字に白線の画像にしてから読み込ませる。Controlnet1.1では、「背景:黒、主線:白」で読み込むモデルが多いため、自分で用意した線画やマップなどが白黒逆になっている場合はこちらを使って反転させる必要がある。
LineartAnimeで生成した結果▼
▼関連記事
※ちなみに、「白地に黒」の画像を反転しないまま入力するとこのようになります
キャニー法
組み合わせるモデル:canny
できること:元画像の輪郭を継承した別のイラストを生成できる。被写体をおおむね引き継げる。
概要:元画像の「輪郭(エッジ)」を抽出するプリプロセッサ。キャニー法とは、ジョン・F・キャニー氏が1986年に編み出したアルゴリズムのこと。抽出された輪郭情報はきれいな線画にはならないので、多少がちゃがちゃして見えるが、これをCanny法を学習させたモデル(canny.pth)に読み込ませることで、元画像と同じ輪郭を引き継いだ画像が生成できる。「Lineart」シリーズの登場によって上位互換されたと思われるが、Cannyの方にアドバンテージがある場面もあるかもしれない。今後の研究課題。
パラメータ解説:Canny low/high thresholdというパラメータを操作することで、輪郭をどれほど詳細に抽出するか調整可能。
生成結果▼
深度シリーズ
・depth leres
・depth midas(旧depth)
・depth zoe
組み合わせるモデル:depth
できること:元画像に描かれているもののうち、何が手前にあり、どこが奥にあるかの情報を推測して抽出することで、同じ構図の絵を生成できる
概要:抽出画像は、白いものほど手前に、黒に近づくほど奥にあることを示している。3種類のプリプロセッサによって抽出結果に差があり、「depth leres」のみ「Remove Near %」「Remove Background %」というパラメータにより背景と手前にあるものの濃さを調整可能。引き継ぐのは位置関係のみで、何が描かれているかまでは継承しないので、プロンプトによって大きく変容させられる。
生成結果(zoe)▼
▼手の修正に使う方法も
「depth」にこのような素材を送り込んで、破綻した手などをきれいに修正するSDwebUIの拡張機能がある。細かいパラメータ設定にコツがあるため、詳しくは関連記事をご参照ください。
▼関連記事
inpaint global harmonious
組み合わせるモデル:inpaint
できること:マスクした部分を別のものに変えられる。i2iの「inpaint」と似ているが、周囲に描かれているものを強く意識して「続き」を描けるので、途切れたキャンバス外の続きを描かせることもできる。i2i画面のinpaintモードで使用するものと思いがちだが、t2i画面でも使用できる。(controlnetの画面上でマスクできる)
マスクしていない部分が変容してしまう不具合(?)があることに注意が必要。詳細は個別記事を参照のこと。
▼関連記事
▼生成結果
Lineartシリーズ
組み合わせるモデル:lineart、lineart anime
できること:元イラストの主線(線画)を引き継いだ別のイラストを生成できる。自分で用意した線画を着色することもできる。
概要:「canny」とよく似ているが、CN1.1から登場したLineartシリーズはより元画像に忠実な輪郭を抽出することができる。プリプロセッサは「Lineart anime」「Lineart realistic」「Lineart coarse」「Lineart standard(白黒反転)」の4種があり、それぞれ抽出される線画の特徴が異なる。具体的な設定などは関連記事を参照のこと。
▼関連記事
①Lineart anime(アニメ調線画抽出)
アニメ調イラストの線画抽出に特化したプリプロセッサで、CN1.1の目玉と言っても過言ではないほど便利。線がガタガタするCannyと違い・・・
(※無料公開分はここまでです)
- 関連記事
-