こんにちは!今回は、Stable Diffusionユーザーなら絶対に押さえておきたい拡張機能ControlNetについて、初心者の方にも分かりやすく解説していきます。
ControlNetは、参照画像を使って生成画像に影響を与えることができるツールです。専門用語は極力避け、丁寧に説明しますので、最後までお付き合いください。
ControlNetではなにができる?
ControlNetは、Stable Diffusionの画像生成を自由にコントロールできる、便利な拡張機能です。通常のStable Diffusionでは、テキストのプロンプトだけで画像を生成しますが、ControlNetを使えば、以下のようなことができるようになります。
- 参照画像を使って、キャラクターのポーズや構図を指定できる
- 同一人物を服や髪形などが違うパターンで量産できる
- 画像の一部分だけを修正できる
- 写真からイラストを作ったり、イラストから写真を作ったりできる
- 画像の質感や雰囲気を変えることができる
- 線画から色付けした画像を生成できる
つまり、ControlNetを使えば、自分のイメージに近い画像を、より簡単に、より自由に生成できるようになるんです。まるで、プロのアーティストになった気分ですね!
ControlNetの導入手順
それでは、Stable Diffusion Web UIにControlNetの導入する方法を見ていきましょう。難しそうに感じるかもしれませんが、大丈夫です。手順通りに進めば、誰でも簡単に導入できます。
Google Colab/Windows/Macすべてこの手順でOKです。
ControlNetの拡張機能をインストール
Extensions > Install from URLで、以下のURLを入力します。
https://github.com/Mikubill/sd-webui-controlnet
次に、Stable Diffusionを再起動します。以下のボタンをクリックしてください。
これでインストールは完了です!
モデルをダウンロードする(おすすめのモデルは次の章で紹介します)
以下のURLからダウンロードしてきたsafetensorsファイルをmodels/ControlNetの中に格納します。
→ ControlNet-v1-1_fp16_safetensors/tree/main
何を入れたらよいかわからない人は、とりあえず以下のモデルをダウンロードしましょう。
extensions/sd-webui-controlnet/modelsにモデルを格納するように書いている記事もありますが、拡張機能削除時にモデルも消えてしまうのでmodels/ControlNetがおすすめです
Stable Diffusionで確認する
txt2imgの中に、ControlNetのタブがあればOKです!
pthファイルとyamlファイルの2つをダウンロードしないとダメじゃなかったっけ?と思われた方もいると思いますが、今は上記の紹介したsafetensorsモデルが良いとされています。
詳細は以下の記事を参照ください!
また、すべてのモデルを一括でダウンロードしたい!という方はこちらの記事を参照ください!
ControlNetの基本の使い方
ControlNetの基本的な使い方は以下の3ステップだけです。
- 参照画像をアップロードする
- Enableにチェックを付ける
- プリプロセッサ(モデル)を選択する
このあと普通に画像生成するだけ!
ControlNetは、基本的にtext2imgで使用します。一部のプリプロセッサはimg2imgが適している場合もあります。
15種!全モデルの紹介
ControlNetには、たくさんのモデルがあります。同じControlNetでも機能が全然違います。逆に言えば、ControlNetだけでもあらゆることができるのです。
とりあえずおすすめは以下の4つです!
それぞれ種類に分けて解説していきます。
全体の特徴参照系
ControlNetといえば、という機能が詰まっているのが「全体の特徴参照系」です。参照画像のポーズや輪郭だけを生成画像に反映させることができます。
openpose(ポーズ)
openposeは、人物のポーズを指定するためのモデルです。参照画像や棒人形の画像を用意し、openposeを適用することで、同じポーズのキャラクターを生成できます。アクションポーズやダンスの振り付けなど、ポーズ指定に活躍します。
canny(線画)
cannyは、参照画像から線画だけを抽出し、その線画に沿った画像を生成するモデルです。
かなり細かいところまで参照する印象です。
depth(奥行き)
depthは、参照画像の奥行き情報を抽出し、それを基に新しい画像を生成します。
scribble(手書きスケッチ)
scribbleは、参照画像から手書き風のラフスケッチを抽出し、それを基に新しい画像を生成します。
lineart / lineart_anime(イラスト風の線画)
lineartは、参照画像から線画を抽出するモデルです。cannyと違い、線の厚みまで抽出しているのが特徴です。
softedge(ソフトな雰囲気の線画)
softedgeは、参照画像からソフトで柔らかい雰囲気の線画を抽出するモデルです。参照画像からざっくりとした輪郭を参照して画像生成した場合に有効です。
Normal Map(ノーマルマップ)
法線マップ(ノーマルマップ)を使って凹凸や光影、質感を表現した画像を生成するモデル。元画像から法線マップを抽出します。
顔や雰囲気の参照系
こちらもControlNetで使う頻度が高い「顔や雰囲気の参照系」です。主に同じ顔の画像を量産したい時に用います。
Reference(顔固定)
同じ顔を作りたい場合に使います。同じ人物やキャラクターで服装や背景、画風を変えるのに便利です。
reference_onlyやreference_adain+attnの使い方詳細は以下をご覧ください。
IP-Adapter(雰囲気全固定)
参照画像の雰囲気を似せた画像を生成するモデルです。かなり参照画像に寄せてしまうので、オリジナリティを出したい場合は不向きです。
こちらは追加モデルをダウンロードする必要があります。以下のURLからip-adapter_sd15_plus.pthをダウンロードしてmodels/ControlNetに格納しましょう。
→ https://huggingface.co/lllyasviel/sd_control_collection/tree/main
画像調整系
「画像調整系」はそれほど使用頻度は高くないですが使いこなすことで画像生成のクオリティをアップすることができます。
Inpaint (一部修正)
画像の一部を選択して修復するモデル。顔や服装など部分的な修正が可能です。Photoshop Betaを使ったことがある方は同じ機能だと思ってくれたら大丈夫です。
img2imgのinpaintと何が違うの?
以下がimg2imgのinpaintで修正した画像ですが、無理やり感がありますよね。
ControlNetのinpaintでは元画像になじむ形で修正してくれるのが特徴です。
Tile(高画質化など)
高解像度の画像を生成するモデル。元の画像をアップスケールしたり、ディティールを付け加えたりできる。
InstructP2P(表情変更)
画像の一部を指定してプロンプトで変更を加えるモデル。笑顔にしたり表情を変えることができます。
以下は笑顔にしたり怒りの表情のプロンプトを入れてみました。
Recolor(色塗り)
元画像に色塗りをしてくれるモデルです。
ただ、グラデーションのあるモノクロの絵でないとちゃんと色付けしてくれなさそう。
こちらは追加モデルをダウンロードする必要があります。以下のURLからioclab_sd15_recolor.safetensorsをダウンロードしてmodels/ControlNetに格納しましょう。
→ https://huggingface.co/lllyasviel/sd_control_collection/tree/main
全体の特徴参照系(人物以外)
こちらは主に建物などの構造物に使用するためのモデルです。人物などのキャラクターにはあまり向いていません。
MLSD(直線画)
直線的な線を抽出して背景を変えるモデル。部屋の構造やレイアウトを保ったまま画像生成できます。
Segmentation(構図)
オブジェクトを識別して領域分割し、指定した部分を入れ替えたり背景を変えたりできるモデル。MLSDよりもざっくりとした配置だけ参照にします。
応用編 ~ もっと知りたい方向けのControlNetの使い方・機能紹介
ここからは、ControlNetをもっと活用したい方向けの情報をお届けします。ControlNetには、まだまだ魅力的な機能がたくさんあるんです。
マルチControlNetで複数のモデルを組み合わせる
ControlNetには、複数のモデルを組み合わせて使用できる「マルチControlNet」という機能があります。例えば、openposeでポーズを指定し、Referenceで顔固定するというようなことが可能です。
設定方法は以下の通りです。SettingsからMulti-ControlNetと検索して、値を3などにしてみましょう。
すると以下のようにControlNetのタブが増えています。
ControlNetの設定を調整して、理想の画像を生成する
ControlNetには、画像生成をコントロールするためのパラメータがいくつかあります。これらのパラメータを調整することで、より理想の画像に近づけることができます。
- Control Weight:ControlNetの影響度を調整(値を大きくすると、参照画像の影響が強くなります)
- Starting/Ending Control Step:ControlNetを適用するステップを指定(早めに適用を終了すると、参照画像の影響が弱くなります)
- Preprocessor Resolution:入力画像の解像度を指定(高解像度にすると、細かい部分まで反映されます)
これらのパラメータを試行錯誤しながら調整し、自分好みの画像を生成しましょう。