ControlNetの使い方
ContorolNetは、StableDiffusionでのAI生成イラストを、指示画像を与えることでポーズや輪郭、奥行き情報などを指定できるテクノロジーだ。
StableDiffusionのデフォルトで使える「Img2Img」とも違って、渡した画像をAIが参考にするのではなく、ポーズや奥行き情報、輪郭を「まんま使う」という技術である。
上の例では、ポーズが完全再現しているほか、指の曲げ方向もちゃんと合っている。(Img2Imgだと、指が反対側に曲がるホラー絵が生成されることがあるのだ)
ControlNetの種類
▲StableDiffusion Web UIから使えるControlnet
私はControlNet=openposeの棒人間での指定だと思っていたが、ControlNetには種類がある。
- canny 輪郭検出して、同じ輪郭で描画する
- depth 深度情報を検出して、正しい奥行きで画像生成。指や腕の曲げ方向が正しくなる
- hed ソフトな輪郭検出。元絵とは微妙にテイストが違う画像になる?
- mlsd 直線の輪郭検出が得意。背景絵などの取り込みに良い?
- normal 法線マップを検出。あらゆる方向のへこみ、でっぱりがリアルに。
- openpose 人間のポーズを検出して、同じポーズで描画。棒人間での指定も可能。
- scribble フリーハンドで描いた線をもとに画像生成する
- seg 領域を検出して、画像生成
私個人としては、指定通りのポーズになるのはもちろん嬉しいけどもそれよりも「手がマトモに描画される」のが一番メリットだと思った。
それぞれにうまい使い道があると思うのだが、私個人としては「canny」(輪郭取るやつ)「depth」(奥行き情報取るやつ)、「scribble」(落書きからイラスト作るやつ)あたりが、スゲーと思った。
「posenpose」(ポーズ取るやつ)は、controlnet1.1になってから表情と手が破綻しにくくなってパワーアップして、使いやすくなってた。
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の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」なんかは「横から見た構図」の指定ができてると思う。
controlnetのopenposeの例
画像を渡すとポーズを取り込んでくれるopenpose。バージョン上がって、精度が向上した。手や表情も認識してくれるようになった。
Automatic1111(web ui)からcontrolnetを使いやすくなってた。(最新バージョンにする必要あり)以下は、web uiのバージョン1.5.2の画面。
生成された画像がこれ。
ControlNetのまとめ
- ControlNetは、Automatic1111のextensionインストールで使えるようになる
- ControlNet使用には、対応する「ControlNetのモデル」ダウンロードが必要。
- 最新版のControlNetでは、2つ以上のControlnetを併用できる(multi controlnet)