今回もStable DiffusionのControlNetに関する話題で
を一通りまとめてご紹介するという内容になっています。
ControlNetは生成する画像のポーズ指定など幅広い用途に使える技術であり、すでに活用なさっている方も多いと思います。そのような中で、つい先日ControlNetの新しいバージョンがStable Diffusion web UI用の拡張機能に実装されて色々な新機能・改善が盛り込まれたので早速使ってみることにしました。
ここではこのCotrolNet 1.1の新機能や改善点について分かりやすく解説していきますね。
細かいアップデートによりさらに新機能が増えているので、その辺についても折を見てご紹介しようと思います。とりあえず下記の内容は5月頭くらいまでの情報です。
※なお「ControlNetって何?」という方は、下記の記事で詳しくご説明していますのでまずはそちらをご覧ください。
ControlNet 1.1で新しく追加されたモデルについて
まずControlNet 1.1では新しく次の6つのモデルが追加されました。
- Lineart
- Anime Lineart
- Shuffle
- Instruct Pix2Pix
- Inpaint
- Tile
それぞれサンプルイラストを交えながらご紹介します。
Lineart
- モデル:control_v11p_sd15_lineart
- プリプロセッサ:
- lineart_coarse
- lineart_realistic
- lineart_standard
入力画像を一旦線画に変換し、それを元に画像生成を行うモデルです。プリプロセッサを無効にして手描きの線画を入力することもできます。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
1枚目はかなり上手く描けていますが、2枚目の画像ではピースサインが上手く反映されなかったようで別のオブジェクトにすり替わってしまいました。
Anime Lineart
- モデル:control_v11p_sd15s2_lineart_anime
- プリプロセッサ:lineart_anime
先ほどのLineartのイラスト向けのモデルです。線画の色塗り等に適していると思います。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
きれいな線画を入力画像にすることが前提になっているようなので、落書きみたいな線画しか用意できない場合は一旦Scribbleで清書してから色を塗るやり方(下記の記事)を採用するといいでしょう。
Shuffle(実験的機能)
- モデル:control_v11e_sd15_shuffle
- プリプロセッサ:shuffle(「なし」でも可)
入力画像をシャッフルして再構成するモデルです。入力画像のスタイルを維持したまま別のモチーフに再構成する場合に使えます。執筆時点では実験的な機能となっています。
入力画像 | 生成したイラストの例 |
---|---|
上記の例では美少女を美少年に再構成してみました。何となく雰囲気を保ったまま少年になりましたね。
Instruct Pix2Pix(実験的機能)
- モデル:control_v11e_sd15_ip2p
- プリプロセッサ:なし
「Instruct Pix2Pix」という手法を使って画像を描き換えるモデルです。「この画像をこういう風に変更しろ」というプロンプトを与えるとその通りの画像を生成してくれます。執筆時点では実験的な機能となっています。
入力画像 | 生成したイラストの例 |
---|---|
恥ずかしながら最初は使い方がよく分からなかったのですが、
- img2imgの画像欄に元画像を入れる
- ControlNetの入力画像を空欄にする
- プロンプトに「どう変更するかの命令」を記入する
というやり方で使えるようになりました。どうやらtxt2imgじゃなくてimg2imgで使うのが前提のようですね。
Inpaint
- モデル:control_v11p_sd15_inpaint
- プリプロセッサ:inpaint_global_harmonious
画像の一部を修正する「Inpainting」の手法を使うモデルです。入力画像の一部を塗りつぶすと、そこだけを変更することができます。一見するとInpaintingそのものですがtxt2imgでも使えます。
入力画像 | 塗りつぶし箇所 | 生成したイラストの例 |
---|---|---|
Tile(実験的機能)
- モデル:control_v11f1e_sd15_tile
- プリプロセッサ:tile_resample
高解像度の画像を生成する際にディテールをうまく補完するためのモデルです。高解像度の画像を生成する際、画像を「タイル状」に生成してそれを合体させるやり方がある(例えば拡張機能の「Tiled Diffusion」が有名)のですが、その手法にまつわる問題点を解決するために開発されたとのこと。ControlNet1.1が出たばかりのときは未完成でしたが、アップデートで実験的機能になりました。
小さい入力画像(128px) | 生成した高解像度のイラストの例(1024px) |
---|---|
(※拡大できます) |
入力画像の大きさをいくつか試してみたところ、例えば64px程度だと小さすぎて生成結果がぼやけてしまいましたが、128px程度にしたらとてもきれいな美少女イラストが生成されました。小さな画像を元に高解像度の画像を生成したいときに便利ですね。
CotronNet 1.1で改善・機能追加が行われたモデルについて
次にControlNet 1.1では旧バージョンからあったモデルに関しても、改善されたり機能追加が行われたりしました。
- Depth
- Normal
- Canny
- MLSD
- Scribble
- Soft Edge(※旧「HED」)
- Segmentation
- Openpose
それぞれ詳しく見ていきましょう。
Depth
- モデル:control_v11f1p_sd15_depth
- プリプロセッサ:
- depth_leres
- depth_midas
- depth_zoe
入力画像の深度情報を元に画像生成を行うモデルです。旧バージョンではプリプロセッサによって生成される深度マップが「ぼやけた感じ」になる等の問題がありましたが、それが改善されたようです。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
結果を見てみると手の指(ピースサイン)がとても上手く描けているのが分かります。以前ご紹介した拡張機能「Depth map library and poser」でも手の描画に深度マップを使っているので、手を上手く描かせたい場合はこのDepthモデルが有効でしょう。
Normal
- モデル:control_v11p_sd15_normalbae
- プリプロセッサ:
- normal_bae
- normal_midas
入力画像の法線情報(端的にいうと凸凹)を元に画像生成を行うモデルです。CotrolNet 1.1では旧バージョンよりもずっと合理的なアルゴリズムが採用されたとのこと。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
Canny
- モデル:control_v11p_sd15_canny
- プリプロセッサ:canny
入力画像の輪郭を抽出して画像生成を行う最も基本的なモデルです。ControlNet 1.1ではモデルの質が向上したようです。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
MLSD
- モデル:control_v11p_sd15_mlsd
- プリプロセッサ:mlsd
入力画像の直線を抽出して画像生成を行うモデルで、主に建物や部屋などの構造物に対して使うと効果的です。こちらもアップデートでモデルの質が向上したようです。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
Scribble
- モデル:control_v11p_sd15_scribble
- プリプロセッサ:
- scribble_hed
- scribble_pidinet
- scribble_xdog
落書きを元に画像生成を行うモデルです。アップデートによりモデルの質が向上し、太い線画でも上手く機能するようになった等の改善が行われました。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
Soft Edge(※旧HED)
- モデル:control_v11p_sd15_softedge
- プリプロセッサ:
- softedge_hed
- softedge_hedsafe
- softedge_pidinet
- softedge_pidisafe
やわらかい輪郭線を生成し、それを元に画像生成を行うモデルです。旧バージョンでは「HED」と呼ばれていましたが名称が変わりました。アップデートにより大幅な改善が行われ使い勝手が向上したとのことです。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
Segmentation
- モデル:control_v11p_sd15_seg
- プリプロセッサ:
- seg_ofade20k
- seg_ofcoco
- seg_ufade20k
「セマンティックセグメンテーション」という手法を使うモデルです。入力画像を物体ごとに識別・分割し、それを元に画像生成を行います。アップデートにより新しいプリプロセッサを使えるようになりました。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
ベッドだけでなく照明や窓・カーテンなどがちゃんと認識されて生成結果に反映されていることが分かりますね。
Openpose
- モデル:control_v11p_sd15_openpose
- プリプロセッサ:
- openpose
- openpose_face
- openpose_faceonly
- openpose_full
- openpose_hand
被写体のポーズを認識し、棒人間を生成してそれを元に画像生成を行う人気のモデルです。アップデートにより手や顔の認識・制御が可能になったほか、モデルの質が向上しています。
入力画像 | プリプロセッサの出力 | 生成したイラストの例 |
---|---|---|
顔や手の認識ができるようになりとても便利になりました。顔認識は後述するMediaPipeFaceを使うなど他のやり方もありますが、Multi ControlNetを使わなくても顔・手・ポーズの3点セットを一度に全部認識してくれる点はOpenposeの強みでしょう。
基本的に表情や姿勢などをかなり高精度に認識してくれますが、2枚目の画像の場合はピースサインを上手く認識できなかったようです。途中で体の一部が隠れたり見切れたりしていると認識に失敗することがあるようですね。
その他の新機能について
MediaPipeFaceをサポート
- モデル:control_v2p_sd15_mediapipe_face
- プリプロセッサ:mediapipe_face
被写体の表情を認識・制御できる「MediaPipeFace」のサポートが追加されました。このモデルは他のモデルとは別の場所からダウンロードする必要がありますが、プリプロセッサはControlNet 1.1から標準で搭載されています。詳細は別の記事に書いたのでそちらをご覧ください。
結局どれがオススメ?
個人的なオススメは下記のとおりです。
- シンプルで分かりやすいCanny
- 棒人間でポーズを指定できるOpenpose
- イラスト制作に便利なAnime Lineart
- 落書きを清書できるScribble
またそのほか、次点で
- Depth
- Soft Edge
あたりもおすすめです。参考になさってください。
おわりに
以上、ControlNet 1.1の新機能や改善点などをご紹介しました。色々な新機能が追加されたり、既存のモデルの改善が行われたりしてとても便利なのでぜひ皆さんも新しいControlNetを使ってみてください。
なおControlNet 1.1になってからプリプロセッサの種類が多くなったので「どれを使えばいいんだろう…?」と迷ってしまう方も多いことでしょう。そのような方のためにプリプロセッサのまとめ記事を書きました。そちらも併せてご覧いただければと思います。
この記事が何かしらお役に立てば幸いです。