「ControlNet(コントロールネット)」は人物のポーズの指定や髪の色の変更などのようにさまざまな用途で利用することができる拡張機能です。その新バージョンである「ControlNet 1.1」では、既存の機能が改良されたり、いくつもの機能が追加されたりと大きな進化を遂げています。
数ある「プリプロセッサ(preprocess)」の中でも、 「reference only(リファレンス・オンリー)」「reference adain(リファレンス・アダイン)」「reference adain attn(リファレンス・アダイン・アテンション)」の登場は特筆すべきことです。
これは「スタイル転送(Style Transfer)」の方法が新たに増えたことを意味しています。これらの新しいプリプロセッサを利用することで、参照元の画像と同じような画像を連続して生成することが一段と容易になりました。
これまでは同一のプロンプトを使用していても LoRA を適用しない限り、次に生成されるキャラクターがまったく別のものになってしまい、キャラクターの一貫性を保つことは困難でした。けれども、新しいプリプロセッサを活用することによって、ほとんど同じ人物を連続的に生成することが以前と比べて容易になったのです。しかも、プロンプトを変更することで画像の内容に大きな変化を加えることも可能です。AI画像生成は既存の手法の導入も含めて技術革新の早さに驚嘆するばかりです。
このページでは上記のプリプロセッサを「Stable Diffusion web UI」において利用する方法をまとめるとともに、これらのプリプロセッサによって生成された画像をいくつか掲載しています。誤字脱字等は追々修正していきます。
プリプロセッサ「reference」シリーズは汎用性が高くて適用場面も数多く想定される驚異的な新機能!
プリプロセッサ「reference」シリーズについて知る
「reference only」「reference adain」「reference adain attn」という三つのプリプロセッサを利用することで、元の画像を参照して同じようなスタイルを持つ画像の生成が可能となりました。これは言い換えれば、同じような人物の色違い、服装違い、ポーズ違い、場所違いなどの画像を以前よりも簡単に生成することができようになったということです。
「reference only」は2023年5月13日頃に「ControlNet 1.1」に追加された新しいプリプロセッサです。
このプリプロセッサの概要は Mikubill さんによる解説と lllyasviel さんによるサンプル画像が以下のそれぞれのページに掲載されています。
https://github.com/Mikubill/sd-webui-controlnet#reference-only-control
https://github.com/Mikubill/sd-webui-controlnet/discussions/1236
https://github.com/Mikubill/sd-webui-controlnet/issues/1237
その後、2023年5月15日頃になって新しく追加された「reference adain」「reference adain attn」というプリプロセッサがあります。こちらのプリプロセッサは「ControlNet 1.1.171」から利用が可能になっています。
これらの概要は lllyasviel さんによる以下のサンプル画像をご覧ください。色々な方のコメントもページ下部にあります。それに対する lllyasviel さんの回答を併せて読んでおくと理解がより深まります。
https://github.com/Mikubill/sd-webui-controlnet/discussions/1280
これはスタイルの転送を可能にするために開発された手法を「ControlNet 1.1」に導入したもののようです。
なお、「adain」は「Adaptive Instance Normalization(アダプティブ・インスタンス・ノーマライゼーション/適応的インスタンス正規化)」という手法のことを指しています。
「reference adain」はコーネル大学の研究成果に基づいたものであり、また「reference adain attn」は「AdaIn + Attention link same as “reference_only”(reference_onlyと同じアテンションリンク)」となっています。
「reference」の利用には「ControlNet 1.1」の導入が必要
「reference only」「reference adain」「reference adain attn」を利用するためには「ControlNet 1.1」を利用できる状態にしておかなければなりません。
それと併せて「ControlNet 1.1」用の新モデルをダウンロードして指定のフォルダに移動させておきます。
そうすることで「reference_only」「reference_adain」「reference_adain+attn」の各プリプロセッサを選択できるようになります。
この拡張機能をまだ追加していない方は、「ControlNet 1.1.171」以降を新たに導入する必要があります。現在、この拡張機能を新たに導入するとバージョンが「1.1.174」以降となります。バージョンは新規導入/更新時期によって異なります。
「ControlNet」の導入方法は以下のページをご覧ください。
「ControlNet 1.1」に新しく追加されたモデルについては、以下のページにサンプル画像とともにまとめてあります。こちらのページも併せてご覧ください。
「reference」の設定について
ここまでの作業でプリプロセッサ「reference」を利用することができるようになっているはずです。
以下は「txt2img」から「ControlNet 1.1」を開いて「reference only」を選択したときの画面です。
プロンプトの入力と各種設定をいつものとおりに進めます。そして「ControlNet 1.1」の設定を行います。参照元の画像は「ここに画像をドロップ – または – クリックしてアップロード」内に配置します。
「ControlNet 1.1」を利用するときは「有効化(Enable)」して、「reference_only」等のプリプロセッサを選びます。「reference」シリーズのプリプロセッサはモデルを必要としません。たとえば、プリプロセッサ一覧から「reference_only」を選ぶとモデル欄が消えて上記のように表示されます。画像はこの設定だけでも生成できます。
VRAM 容量の少ないグラフィックボードを使用している場合は「低 VRAM」にチェックを入れます。「Pixel Perfect(ピクセル・パーフェクト)」はサイズの調整機能のようです。「Allow Preview(アラウ・プレビュー)」はプレビューを許可するという設定で、プリプロセッサを入れて右側の「※」ボタンを押すと、上の画像欄が分割されて右半分にプリプロセッサ適用時のプレビューが出るはずです。
「Control Weight」「Starting Control Step」「Ending Control Step」はデフォルトのままにしています。また、「Style Fidelity (only for “Balanced” mode)」はスタイルに対する忠実度の程度をスライダーで変更することができるようです。この設定は場合によっては微調整をしたほうがよいかもしれません(ページ下部のまとめを参照)が、とりあえずのところはデフォルトのままで試してみてください。
「Control Mode(コントロール・モード)」の「My prompt is more important(プロンプトを重視する)」と「ControlNet is more important(CNの設定を重視する)」、それらの折衷である「Balanced(バランスのとれた)」があるということだと思います。これもとりあえずデフォルトの「Balanced」でOKです。ちなみに、ここを切り替えることによって生成される画像は当然のことながらやや変化します。
「リサイズモード(Resize Mode)」もとりあえずデフォルトで試してみてください。
話は変わりますが、エアコンをガンガンに効かせられる場合を除いて、冷却機能を高めたりグラボのパワーリミットを変更したりして夏に備えておくことをおすすめいたします。デフォルトのままではグラボに負担がかかりすぎます。
プリプロセッサ「reference」シリーズを試してみる
「reference_only」の利用
参照元の画像を配置します。そして「ControlNet 1.1」を「有効化(Enable)」して「reference_only」を選びます。その他の設定はデフォルトのままです。
プロンプトを入力します。解像度は512×712です。シード値は固定していません。詳細は以下を参照してください。
masterpiece, best quality, 1 girl, solo, brown hair, short hair, smile, hoodie, blue pants, campsite
(worst quality, low quality:1.4)
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Size: 512×768, Model: anything-v4.0, Clip skip: 2, ControlNet: “preprocessor: reference_only, model: None, weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 0.5, 64)”
なお、ここでは「高解像度補助(Hires.fix)」は利用していません。
「reference_only」による画像生成例
これらの画像は同一のプロンプトと設定によって何度も生成を試みたうちの5枚です。参照元の画像と同じような画像が次から次へと生成されていることが分かります。キャラクターも参照元とほぼ同じに見えます。
服のロゴが変わるということは普通にあります。しかし、服装自体がプロンプトの内容から大きく逸脱することはありませんでした。
ただし、手指が崩れた描写になっていることはこれまでと同じように起こります。そこは別の方法で何とかする必要があります。
ここからはプロンプトの一部を少しずつ変更しながら、新しい画像を生成していきました。
服装に関するプロンプトを「hoodie(パーカー)」から「sweater(セーター)」に変えてみました。それ以外の要素は全て同一です。
服装だけが指定したセーターに変わっています。色は同じになったので、見た感じはトレーナーのようにも見えます。
今度は服装を「white sweater(白いセーター)」と「long skirt, black skirt(黒のロングスカート)」に変更してみました。
さらに髪色と髪型を「red hair(赤い髪)」と「long hair(長い髪)」に変更してみました。
こちらの場合は髪の毛の色の一部が参照元の画像と同じ「brown hair(茶色い髪)」になってしまっていますが、髪が長くなった部分は「red hair(赤い髪)」になっています。毛先の部分は落ち着いた赤色です。
この点は画像を何度生成しても同様でした。
背景に関するプロンプトを「campsite(キャンプ場)」から「street(通り)」に変更してみました。背景は何の問題もなく変わっています。キャラクターも一貫性が保たれています。
これによって、同じ人物を別の場所で再現するといったことが容易に実現できます。
今度は「reference_adain」を利用してみます。
「reference_adain」の利用
プリプロセッサを「reference_adain」に切り替えました。それ以外に変更はありません。
masterpiece, best quality, 1 girl, solo, brown hair, short hair, smile, hoodie, blue pants, campsite
(worst quality, low quality:1.4)
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Size: 512×768, Model: anything-v4.0, Clip skip: 2, ControlNet: “preprocessor: reference_adain, model: None, weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 0.5, 64)”
こちらでも、先ほどと同じように元のプロンプトの一部を変更しながら生成される画像の内容を確認していきます。プロンプトや詳細設定等は「reference_only」のときと同様です。
「reference_adain」による画像生成例
先ほどと同様に、ほぼ同じキャラクターが連続して生成されています。
こちらのプリプロセッサでは「hoodie(パーカー)」の色が画像を生成する度に変化しました。しかし、画像の品質や画風などはまったく変化していません。
ここから先ほどと同じように服装等を変化させていきます。
普通の「sweater(セーター)」への変更は飛ばして、「white sweater(白いセーター)」と「long skirt, black skirt(黒のロングスカート)」に変更してみました。
髪色と髪型を「red hair(赤い髪)」と「long hair(長い髪)」に変更してみました。全体的にはっきりとした赤色に変わっています。
服装(セーター)の色は髪の影響を受けて赤くなることがあるものの、服の種類は概ね指定した通りに変わっています。
こちらでも背景に関するプロンプトを「campsite(キャンプ場)」から「street(通り)」に変更してみました。背景は街路に変わっていて違和感もありません。また、キャラクターも一貫性が保たれています。
最後に「reference_adain+attn」を試してみます。
「reference_adain+attn」の利用
プリプロセッサを「reference_adain+attn」に切り替えました。それ以外に変更はありません。
masterpiece, best quality, 1 girl, solo, brown hair, short hair, smile, hoodie, blue pants, campsite
(worst quality, low quality:1.4)
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Size: 512×768, Model: anything-v4.0, Clip skip: 2, ControlNet: “preprocessor: reference_adain+attn, model: None, weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 0.5, 64)”
これまでと同様に元のプロンプトの一部を変更しながら生成される画像の内容を見ていきます。プロンプトや詳細設定等は「reference_only」「reference_adain」のときと同様です。
「reference_adain+attn」による画像生成例
こちらも当然に同じようなキャラクターが連続して生成されています。プロンプトは参照元画像のものと同様です。
ここから服装等を変化させていきます。
これまでと同じく服装を「white sweater(白いセーター)」と「long skirt, black skirt(黒のロングスカート)」に変更してみました。
次に髪色と髪型を「red hair(赤い髪)」と「long hair(長い髪)」に変更してみました。
こちらでは、髪の色が頭部と毛先で異なっています。
最後に背景に関するプロンプトを「campsite(キャンプ場)」から「street(通り)」に変更しました。
背景は街路に変わっていますが、テントらしきものが紛れています。これは参照元の画像にあるテントが反映されています。このようなときには「My prompt is more important(プロンプトを重視する)」にチェックを入れて画像の生成を試みると問題が解消されるかもしれません。
キャラクターは一貫性が保たれています。
各プリプロセッサによって生成された画像の簡単な比較
reference only | reference_adain | reference_adain+attn |
いずれのプリプロセッサも同じような効果を持っていることから、参照元の画像と同じような画像を生成することができています。また、プロンプトを変更することによって参照元画像のスタイルを活かしたまま新しい画像を生成することも可能です。
とりあえず、最初に追加されて情報も圧倒的に多い「reference only」を採用してみてはいかがでしょうか。そして、良さそうな画像が生成されたら、何らかの手法を用いて高解像度化を行うという流れになります。
「reference」は同じキャラクターの別画像を生成するのに現状では最適
「reference」シリーズのプリプロセッサは、5月25日時点で三つの中から選んで利用することができます。それぞれに特徴があるようですが、生成された画像をざっと見る限りでは劇的な違いを感じることはできません。これらのプリプロセッサは参照元画像のスタイルを新しい画像の生成に応用するという性質を持っていることから当然といえば当然かもしれません。
lllyasviel さんは5月15日の議論(上のほうのリンク先参照)の中で「reference_adain+attn」の「Style Fidelity」の設定を「1.0」で用いることが最適と述べる一方で、これは効果が強く出ることもあるためデフォルトでの使用は推奨しないとも述べています。同時に、現状では「reference only」の「Style Fidelity」の設定を「0.5」にして利用することを奨めているようです。ただし、このような事情はバージョンアップや機能の改良等で変わることがありますので新しい情報をチェックするようにしてください。
「reference only」「reference adain」「reference adain attn」は、いずれを選んだとしても参照元の画像を活かしたかたちで新しい画像を生成することができます。ほぼ同じ人物の画像を服装や背景を変えながら生成していくこともできるようです。
これらのプリプロセッサは使い方次第でAI画像生成の可能性を広げてくれるものといえそうです。たとえば「multi controlnet」を利用して複数の参照元画像から新しい画像を生成するといった使い方も可能です。
「reference」は総合的にみて工夫次第でいかようにも使えるといった印象を受けました。しかし、使いこなすためには色々な要素を組み合わせながら試行錯誤しなければいけません。
なお、これと同様の最新の手法として「MasaCtrl」という拡張機能があります。こちらも同じようなキャラクターを固定した状態で、ポーズや衣装を変更することが可能です。しかし、「MasaCtrl」は使い方がやや煩雑なこともあって、「ControlNet 1.1」の「reference」シリーズのほうを先にお試しになることを個人的におすすめいたします。