記事内に広告が表示されます

ControlNet 1.1 「reference」による参照元画像と類似した画像の生成

controlnet-v1.1-reference スマホ・PC
スポンサーリンク

 「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 さんによるサンプル画像が以下のそれぞれのページに掲載されています。

[Major Update] Reference-only Control #1236
https://github.com/Mikubill/sd-webui-controlnet/discussions/1236
[Major Update] Reference-only Control #1237
https://github.com/Mikubill/sd-webui-controlnet/issues/1237

 その後、2023年5月15日頃になって新しく追加された「reference adain」「reference adain attn」というプリプロセッサがあります。こちらのプリプロセッサは「ControlNet 1.1.171」から利用が可能になっています。

 これらの概要は lllyasviel さんによる以下のサンプル画像をご覧ください。色々な方のコメントもページ下部にあります。それに対する lllyasviel さんの回答を併せて読んでおくと理解がより深まります。

[New Preprocessor] The “reference_adain” and “reference_adain+attn” are added #1280
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」用の新モデルをダウンロードして指定のフォルダに移動させておきます。

ControlNet v1.1 のプリプロセッサ

 そうすることで「reference_only」「reference_adain」「reference_adain+attn」の各プリプロセッサを選択できるようになります。

 この拡張機能をまだ追加していない方は、「ControlNet 1.1.171」以降を新たに導入する必要があります。現在、この拡張機能を新たに導入するとバージョンが「1.1.174」以降となります。バージョンは新規導入/更新時期によって異なります。

 「ControlNet」の導入方法は以下のページをご覧ください。

「ControlNet」の導入とその使い方【Stable Diffusion web UI】
ControlNet の導入方法と使い方を初心者向けに紹介しています。ControlNet を導入することでAI画像の構図や人物のポーズを自由に設定できます。

 「ControlNet 1.1」に新しく追加されたモデルについては、以下のページにサンプル画像とともにまとめてあります。こちらのページも併せてご覧ください。

「ControlNet 1.1」の新モデルを使用する【Stable Diffusion web UI】
「ControlNet」は今ではAI画像生成に必要不可欠の技術です。その新バージョンである「ControlNet 1.1」の新モデルを色々と試してみました。

「reference」の設定について

 ここまでの作業でプリプロセッサ「reference」を利用することができるようになっているはずです。

 以下は「txt2img」から「ControlNet 1.1」を開いて「reference only」を選択したときの画面です。

preprocess-reference

 プロンプトの入力と各種設定をいつものとおりに進めます。そして「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)」もとりあえずデフォルトで試してみてください。

 話は変わりますが、エアコンをガンガンに効かせられる場合を除いて、冷却機能を高めたりグラボのパワーリミットを変更したりして夏に備えておくことをおすすめいたします。デフォルトのままではグラボに負担がかかりすぎます。

ケースファンを増設してPCケース内のエアフローを改善する
PCケース内が熱でとんでもないことになっていたので、ケースファンを増設してみました。夏に向けて冷却を考えなければいけません。
ZOTAC「FireStorm(V3.0.0.038)」の使い方
ZOTACの「FireStorm」はZOTAC製GeForceシリーズのGPUクロックや動作電圧等を調整することが可能なアプリです。このアプリの使い方を紹介しています。
スポンサーリンク

プリプロセッサ「reference」シリーズを試してみる

「reference_only」の利用

preprocess-reference

 参照元の画像を配置します。そして「ControlNet 1.1」を「有効化(Enable)」して「reference_only」を選びます。その他の設定はデフォルトのままです。

preprocess-reference

 プロンプトを入力します。解像度は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」による画像生成例

preprocess-reference preprocess-reference preprocess-reference
preprocess-reference preprocess-reference  

 これらの画像は同一のプロンプトと設定によって何度も生成を試みたうちの5枚です。参照元の画像と同じような画像が次から次へと生成されていることが分かります。キャラクターも参照元とほぼ同じに見えます。

 服のロゴが変わるということは普通にあります。しかし、服装自体がプロンプトの内容から大きく逸脱することはありませんでした。

 ただし、手指が崩れた描写になっていることはこれまでと同じように起こります。そこは別の方法で何とかする必要があります。

 ここからはプロンプトの一部を少しずつ変更しながら、新しい画像を生成していきました。

preprocess-reference

preprocess-reference preprocess-reference preprocess-reference

 服装に関するプロンプトを「hoodie(パーカー)」から「sweater(セーター)」に変えてみました。それ以外の要素は全て同一です。

 服装だけが指定したセーターに変わっています。色は同じになったので、見た感じはトレーナーのようにも見えます。

preprocess-reference preprocess-reference preprocess-reference

 今度は服装を「white sweater(白いセーター)」と「long skirt, black skirt(黒のロングスカート)」に変更してみました。

preprocess-reference preprocess-reference preprocess-reference

 さらに髪色と髪型を「red hair(赤い髪)」と「long hair(長い髪)」に変更してみました。

 こちらの場合は髪の毛の色の一部が参照元の画像と同じ「brown hair(茶色い髪)」になってしまっていますが、髪が長くなった部分は「red hair(赤い髪)」になっています。毛先の部分は落ち着いた赤色です。

 この点は画像を何度生成しても同様でした。

preprocess-reference preprocess-reference preprocess-reference

 背景に関するプロンプトを「campsite(キャンプ場)」から「street(通り)」に変更してみました。背景は何の問題もなく変わっています。キャラクターも一貫性が保たれています。

 これによって、同じ人物を別の場所で再現するといったことが容易に実現できます。

 今度は「reference_adain」を利用してみます。

「Latent Couple」による人物の描き分け【Stable Diffusion web UI】
「Latent Couple」という拡張機能を利用することで、画面を分割して各領域ごとにプロンプトを効かせて、各人物をうまく描き分けることができるようになります。
「Cutoff」による色の正確な指定【Stable Diffusion web UI】
「Cutoff」という拡張機能を利用することでプロンプトの色指定が他の要素に移ることをある程度防ぐことができます。使い方はとても簡単です。

「reference_adain」の利用

preprocess-reference

 プリプロセッサを「reference_adain」に切り替えました。それ以外に変更はありません。

preprocess-reference

プロンプト
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」による画像生成例

reference-adain reference-adain reference-adain
reference-adain reference-adain  

 先ほどと同様に、ほぼ同じキャラクターが連続して生成されています。

 こちらのプリプロセッサでは「hoodie(パーカー)」の色が画像を生成する度に変化しました。しかし、画像の品質や画風などはまったく変化していません。

 ここから先ほどと同じように服装等を変化させていきます。

reference-adain reference-adain reference-adain

 普通の「sweater(セーター)」への変更は飛ばして、「white sweater(白いセーター)」と「long skirt, black skirt(黒のロングスカート)」に変更してみました。

reference-adain reference-adain reference-adain

 髪色と髪型を「red hair(赤い髪)」と「long hair(長い髪)」に変更してみました。全体的にはっきりとした赤色に変わっています。

 服装(セーター)の色は髪の影響を受けて赤くなることがあるものの、服の種類は概ね指定した通りに変わっています。

reference-adain reference-adain reference-adain

 こちらでも背景に関するプロンプトを「campsite(キャンプ場)」から「street(通り)」に変更してみました。背景は街路に変わっていて違和感もありません。また、キャラクターも一貫性が保たれています。

 最後に「reference_adain+attn」を試してみます。

「Regional Prompter」による描画領域の分割【Stable Diffusion web UI】
「Regional Prompter」という拡張機能を利用することで、複数の人物を任意の位置に配置して各人物に対して髪型や服装を指定することができます。
「Regional Prompter」による領域分割とLoRAの適用【Stable Diffusion web UI】
「Regional Prompter」で描画領域を分割して別々の「LoRA」を適用することが可能です。ここでは画風を変化させる LoRA の適用例を掲載しています。

「reference_adain+attn」の利用

preprocess-reference

 プリプロセッサを「reference_adain+attn」に切り替えました。それ以外に変更はありません。

preprocess-reference

プロンプト
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」による画像生成例

reference-adain-attn reference-adain-attn reference-adain-attn
reference-adain-attn reference-adain-attn  

 こちらも当然に同じようなキャラクターが連続して生成されています。プロンプトは参照元画像のものと同様です。

 ここから服装等を変化させていきます。

reference-adain-attn reference-adain-attn reference-adain-attn

 これまでと同じく服装を「white sweater(白いセーター)」と「long skirt, black skirt(黒のロングスカート)」に変更してみました。

reference-adain-attn reference-adain-attn reference-adain-attn

 次に髪色と髪型を「red hair(赤い髪)」と「long hair(長い髪)」に変更してみました。

 こちらでは、髪の色が頭部と毛先で異なっています。

reference-adain-attn reference-adain-attn reference-adain-attn

 最後に背景に関するプロンプトを「campsite(キャンプ場)」から「street(通り)」に変更しました。

 背景は街路に変わっていますが、テントらしきものが紛れています。これは参照元の画像にあるテントが反映されています。このようなときには「My prompt is more important(プロンプトを重視する)」にチェックを入れて画像の生成を試みると問題が解消されるかもしれません。

 キャラクターは一貫性が保たれています。

「negative hand」の適用と手指の表現【Stable Diffusion web UI】
AI画像生成時における手指の表現の改善として「negative hand」などの「Embeddings」を試してみる手があります。
「bad hands 5」の適用と手指の表現【Stable Diffusion web UI】
AI画像生成時における手指の表現の改善策として、今度は「bad hands 5」という「Embeddings」を試してみました。

各プリプロセッサによって生成された画像の簡単な比較

reference only reference_adain reference_adain+attn
preprocess-reference reference-adain reference-adain-attn
preprocess-reference reference-adain reference-adain-attn
preprocess-reference reference-adain reference-adain-attn
preprocess-reference reference-adain reference-adain-attn

 いずれのプリプロセッサも同じような効果を持っていることから、参照元の画像と同じような画像を生成することができています。また、プロンプトを変更することによって参照元画像のスタイルを活かしたまま新しい画像を生成することも可能です。

 とりあえず、最初に追加されて情報も圧倒的に多い「reference only」を採用してみてはいかがでしょうか。そして、良さそうな画像が生成されたら、何らかの手法を用いて高解像度化を行うという流れになります。

「MultiDiffusion」による画像の拡大【Stable Diffusion web UI】
「MultiDiffusion with Tiled VAE」という拡張機能を利用することで低VRAMのグラフィックボードでもパノラマ画像や高解像度の画像を生成することが可能です。

「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」シリーズのほうを先にお試しになることを個人的におすすめいたします。

「Inpaint」を利用した手指の修正【Stable Diffusion web UI】
「Inpaint」は手指などの特定部位の修正や変更に重宝します。ここでは標準搭載版と「ControlNet 1.1」版の両方を試してみました。
画像の品質を規定するプロンプト【Stable Diffusion web UI】
多くの画像に使われている品質向上系のプロンプトをまとめて掲載しています。画像の品質を規定するプロンプトは思いどおりの画像を生成するために欠かせません。
ネガティブプロンプトの重要性【Stable Diffusion web UI】
ネガティブプロンプトに関する表現をまとめて掲載しています。ネガティブプロンプトは意図しない表現を抑止するために必要不可欠な要素といえます。