ContorolNetは、StableDiffusionでのAI生成イラストを、指示画像を与えることでポーズや輪郭、奥行き情報などを指定できるテクノロジーだ。
ControlNetの使い方
具体的に、どんな画像を渡したらどう生成される?
左の画像(DAZ STUDIOのレンダリング画像)をStableDiffusionにわたすと、右の画像画生成される。
StableDiffusionのデフォルトで使える「Img2Img」とも違って、渡した画像をAIが参考にするのではなく、ポーズや奥行き情報、輪郭を「まんま使って生成する」という技術である。
上の例では、ポーズが完全再現しているほか、指の曲げ方向もちゃんと合っている。(Img2Imgだと、指が反対側に曲がるホラー絵が生成されることがあるのだ)
ControlNetの種類
ControlNetにはいくつもの種類がある。私はControlNet=openposeの棒人間での指定だと思っていたが、それだけではないようだ。
▲StableDiffusion Web UIから使えるControlnet
- canny 輪郭検出して、同じ輪郭で描画する
- depth 深度情報を検出して、正しい奥行きで画像生成。指や腕の曲げ方向が正しくなる
- hed ソフトな輪郭検出。元絵とは微妙にテイストが違う画像になる?
- mlsd 直線の輪郭検出が得意。背景絵などの取り込みに良い?
- normal 法線マップを検出。あらゆる方向のへこみ、でっぱりがリアルに。
- openpose 人間のポーズを検出して、同じポーズで描画。棒人間での指定も可能。
- scribble フリーハンドで描いた線をもとに画像生成する
- seg 領域を検出して、画像生成
私個人としては、指定通りのポーズになるのはもちろん嬉しいけどもそれよりも「手がマトモに描画される」のが一番メリットだと思った。
それぞれにうまい使い道があると思うのだが、私個人としては「canny」(輪郭取るやつ)「depth」(奥行き情報取るやつ)、「scribble」(落書きからイラスト作るやつ)あたりが、スゲーと思った。
「posenpose」(ポーズ取るやつ)は、controlnet1.1になってから表情と手が破綻しにくくなってパワーアップして、使いやすくなってた。
Controlnetには、画像生成とは別にControlnet用のモデルが必要になる。たとえば、canny機能を使うにはcanny用のモデルが必要になるのだ。その分、VRAM消費量が増える。
Controlnetは複数を同時に使うことができるが、VRAM量枯渇には要注意。(ただ、動かないだけなのだけど)
ControlNetの導入(インストール)
ControlNetは、Automatic1111(ユーザインタフェース)のExtension(拡張機能)としてインストールする。Automatic1111の基本的なとこは以下の記事で。
関連)Stable DiffusionのWEBUI Automatic1111の使い方
Automatic1111の画面のtxt2imgの下の方に「ControlNet」っていうのが出てれば、ControlNetはすでにインストールされてる。
「ControlNet」が出てないぞ…というあなたは、Exteionsions→Available→Load fromをクリックして、一覧の中から「sd-webui-controlnet」を探し出し、右側のInstallボタンをクリックしよう。
さらに、各ControlNetのモデルをダウンロードする必要がある。
モデルっていうとピンとこないけど、モジュールとかパーツみたいなもんだと考えておくといいんじゃないだろうか。フツーに画像生成用のbasil mixモデルにcontrolnetのdepthモデルを組み合わせるみたいなことができる。
まあ全部入れてもいいんだけど、そこそこサイズが大きいので、まずは使いたいものを1つだけ入れるのがいいだろう。
>webui/ControlNet-modules-safetensors at main (ControlNet用のモデルのダウンロードページ)
ファイルは、以下のフォルダにそのまま入れておけばOK。
Automatic1111のインストールフォルダの、sd.webui\webui\extensions\sd-webui-controlnet\models
controlnetをインストールしたら、Automatic1111を再起動しよう。(UIのリロードではなく、Automatic1111自体の再起動)
ControlNetの簡単な使い方
以下の画像をControlNetのdepthに渡してみよう。StableDiffusionが苦手な、手足が複雑に絡んだポーズだ。
Z Fierce Wrestling Couple Poses for Genesis 8 and 9 (DAZのレスリングのポーズ集)
結果はこちら。ところどころ変だけど、だいぶいいセン行っているんじゃないだろうか。
DAZ STUDIOの描画する3D画像は、手足が絶対に破綻しない上に、オリジナルポーズをつけることができる。しかも、ポーズ集もたくさんあるのでStableDiffusionに「食わせる」元ネタとしては最強だろう。
なお、DAZ STUDIOは無料機能だけでも十分にAI元ネタとして使えるので、ざっと使い方を覚えておくといいんじゃないだろうか。
使い方は、こんな感じ。
- ControlNetの欄に画像をドラッグ&ドロップ
- 処理と対応するモデルを指定
- 渡す画像のサイズを指定
上の画像では「Control model-0」と「Control model-1」というタブが出現しているが、設定によってControlnetを複数組み合わせることができる(multi controlnet)のだ。※ContronetのExtensionを最新版にする必要あり。
設定は、Settings→ControlNetをクリックして、「Multi ControlNet:Max models amount」を2以上にする。
「Apply settings」(設定を保存)をクリックして、Automatic1111を再起動する(Reload UIではダメ)
これで、ControlNetの「canny」と「depth」あたりを組み合わせると、輪郭と奥行き情報が正確に伝わるというわけだ。
何個も組み合わせるとその分メモリを食うので、せいぜい2つ程度にしておくのが無難かも。
ControlnetのCannyの例
与えられた画像から、輪郭線を抽出し、輪郭線に沿った画像を生成する。
GitHub – lllyasviel/ControlNet: Let us control diffusion models!
とくに、指などAIが不得意な部位を正確に描いてくれる。ただし、何もない立ちポーズなら問題ないけど、複雑なポーズや3次元的に物が前後に配置された画像だと、変な解釈をしてしまう。
ControlNetのCannyは元画像の線画情報を利用して、輪郭を維持しつつ、様々なバリエーションの画像を作り出せるのが特徴。
- 元画像から線画(エッジ)情報を抽出し、その線画に沿った画像を生成することができる。
- 元画像の輪郭はそのままに、髪の毛や目の色、服の色などの部分的な詳細情報を変更するのに便利。
- Cannyは低閾値と高閾値の2つのパラメータを調整することで、抽出する線画の詳細度を変更できる。
- ControlNetのCannyモデルは300万枚のエッジ画像とキャプションのペアを使って学習された。
Contronetのdepthの例
画像から奥行き情報を推論して、奥行き情報に沿って新しい画像を生成する。
手前にあるのか、奥にあるのかをけっこう正確に認識する。複雑な絵を指定通りに描かせるには必須かも。ただし、指先は破綻しがち。
cannyとdepthを組み合わせることで、ほぼ想定通りの画像が生成できる。
ControlNet depth モデルを使うことで、深度マップを変化させることで、生成画像のレイアウトや遠近感をコントロールできるのが特徴。
- 深度マップを入力として利用する。深度マップは、画像内の各ピクセルの深度(カメラからの距離)を表すグレースケール画像。白に近いほど手前、黒に近いほど奥を表す。
- Stable Diffusion のような画像生成モデルと組み合わせて使用する。ControlNet の層が深度マップを条件として Stable Diffusion モデルを制御し、深度情報を反映した画像を生成する。
- 512×512 の高解像度の深度マップを利用できる。Stability AI の SD2 depth モデルが 64×64 の深度マップを使うのに対し、ControlNet は細部まで深度情報を保持できる。
- 深度情報を手がかりに、テキストプロンプトなしでも画像の内容を「推測」して生成できる “Guess Mode” がある。
Controlnetのscribble(落書き)の例
scribbleは「落書き」の意味。フリーハンドで描いたテキトー画像が、AIの手によって超絶イラストや実写画像に転生してしまうという恐ろしい技術である。
これがこうなる。
モデルは、イラスト系生成に強いAbyss Orange Mix2を使用。
Automatic1111のControlnetの設定箇所で、以下のように設定する。落書き画像は、ウェブ上でも描けるけど、私はペイントソフトで描いたものをドラッグ&ドロップでアップロードした。
手直しの試行錯誤が楽だから。
- Enableにチェック
- 落書き画像をドラッグ&ドロップ
- Preprocessorにscribble
- modelにcontrol_scrible-fp16を指定
- Weightを0.5くらいにする
Weightは、落書き画像をどのくらい尊重するか…というパラメータ。デフォの1だと「落書きが落書きのまま清書されてしまう」感じ。0.5くらいにするといい具合に描きなおしてくれるのだ。
なお、絵が上手い人は、1のままにしておくと、「絵柄が残る」
別の例。
棒人間レベルだと、人物の位置関係くらいしか指定できないかも。
プロンプトは以下の通り。
2girls,manga,sketch drawing, view from side,black and white,fight,line art
なんか効いてないワードとか入ってるけど、「view from side」なんかは「横から見た構図」の指定ができてると思う。
scribbleは、ユーザーの手描きのガイドをもとに、stable diffusionによるAI画像生成をインタラクティブにコントロールできるため、絵を描くのが苦手な人でも、簡単なスケッチから思い通りのイラストを作れる…可能性がある。
- 3種類のプリプロセッサー(HED、PiDiNet、XDoG)が用意されており、入力スケッチの特徴を抽出する。HEDとPiDiNetは手書き風の太めの線を検出し、XDoGは細い線を検出する。
- 生成画像のレイアウトや構図をスケッチで指定でき、プロンプトで指定したスタイルに合わせて画像が作られる。
controlnetのopenposeの例
画像を渡すとポーズを取り込んでくれるopenpose。バージョン上がって、精度が向上した。手や表情も認識してくれるようになった。
Automatic1111(web ui)からcontrolnetを使いやすくなってた。(最新バージョンにする必要あり)以下は、web uiのバージョン1.5.2の画面。
生成された画像がこれ。
ポーズ再現度は完璧。
ControlNetのOpenPoseモデルを活用することで、人物画像の生成においてポーズや表情、手の動きなどを細かく制御することが可能になる。
- OpenPoseは人体の主要な関節点(頭、肩、肘、手首、膝、足首など)の位置を検出し、人物のポーズを再現。髪型や服装、背景などの詳細は無視する。
- 顔の向きや目鼻口などの特徴も認識できるため、表情の再現も可能。手の構造も検出できる。
- ControlNetのOpenPoseモデルを使うことで、入力画像の人物ポーズを維持しつつ、プロンプトに応じて服装や背景を変更した画像を生成できる。
- 人物の手足の動きを細かく制御したい場合に適している。
- ControlNetのOpenPoseのプリプロセッサを選択ではopenpose, face, faceonly, full, handの5種類が選べる。検出する部位に応じて使い分けると、よりよい結果が出せる。
Controlnetの種類
Controlnetの種類はたくさんあるけど、よく使われるのはcanny、depth、scrible、openpose、inpaintあたり。
個人的な感覚だけど、それ以外は廃れていっているような気がする。
ControlNetのまとめ
- ControlNetは、Automatic1111のextensionインストールで使えるようになる
- ControlNet使用には、対応する「ControlNetのモデル」ダウンロードが必要。
- 最新版のControlNetでは、2つ以上のControlnetを併用できる(multi controlnet)