「referenceのPreprocessorはどれが一番良いの?」
「Style Fidelityには、どの値を設定すればいいのかわからない・・・」
このような場合には、この記事の内容が参考になります。
本記事の内容
- referenceのPreprocessor
- 各Preprocessorの比較
- Style Fidelityの検証
それでは、上記に沿って解説していきます。
referenceのPreprocessor
2023年5月15日、ControlNetに新しいPreprocessorが追加されました。
追加されたのは、以下の2つです。
- reference_adain
- reference_adain+attn
これは、数日前に追加されたReference-only(reference_only)と同じ系統のPreprocessorになります。
Reference-onlyについては、次の記事で解説しています。
新たに追加されたPreprocessorについては、以下でControlNetの開発者自らが解説しています。
adainやattnは、スタイル転送の手法を表しています。
adain | AdaIn (Adaptive Instance Normalization) |
attn | Attention link |
attnは、reference_onlyとイコールです。
つまり、referenceのPreprocessorは全部で以下の3つが存在していることになります。
- reference_only(attn)
- reference_adain(adain)
- reference_adain+attn(adain + attn)
このうちでベストのPreprocessorは、reference_adain+attnになります。
このことは、ControlNetの開発者が発言しているのです。

ただし、そのベストの手法はオススメできないとも発言しています。
威力が強すぎて、クセが強いのでしょうね。
その代わりに、reference_onlyをオススメしています。
最高が最適という訳ではないということなのでしょう。
上記において、「Style Fidelity」という記述があります。
これは、新たに追加された設定項目です。
「Fidelity」は、日本語で「忠実度」を意味します。
つまり、Style Fidelityはスタイルへの忠実度という意味になります。
Style Fidelityが高い(最大1)と、参照画像に忠実な画像を生成します。
逆に、Style Fidelityが低い(最小0)と、参照画像からかけ離れた画像を生成することになります。
以上、referenceのPreprocessorについて説明しました。
次は、各Preprocessorの比較を説明します。
各Preprocessorの比較
以下の各Preprocessorの比較を行います。
- reference_only(attn)
- reference_adain(adain)
- reference_adain+attn(adain + attn)
各Preprocessor毎に、「0」、「0.5」、「1」の3段階のStyle Fidelityを用います。
そして、参照画像には次の画像を用います。

この画像を含め、プロンプトや設定などは次の記事内で説明しています。
reference_only(attn)
reference_only + Style Fidelity=0.0

reference_only + Style Fidelity=0.5

reference_only + Style Fidelity=1.0

reference_adain(adain)
reference_adain+ Style Fidelity=0.0

reference_adain+ Style Fidelity=0.5

reference_adain+ Style Fidelity=1.0

reference_adain+attn(adain + attn)
reference_adain+attn+ Style Fidelity=0.0

reference_adain+attn+ Style Fidelity=0.5

reference_adain+attn+ Style Fidelity=1.0

結果を比較してみて、どうでしょうか?
やはり、開発者の言う通り「reference_adain+attn + Style Fidelity=1.0」がベストだとお思いませんか?
あくまで、参照画像の忠実度という点においてベストだという意味です。
崩れた画像もありません。
同じスタイルで人物を少し変えたい場合は、「reference_adain+attn + Style Fidelity=0.0」が良いかもしれません。
全然違う感じの人物に変えたい場合は、「reference_adain + Style Fidelity=1.0」が使えそうです。
「reference_adain + Style Fidelity=0.0」なんて、背景がぼやけていません。
人物だけではなく、背景も真逆になっています。
以上、各Preprocessorの比較を説明しました。
最後に、Style Fidelityの検証を説明します。
Style Fidelityの検証
Style Fidelityは、「Balanced」モードのときのみ機能します。

「Control Mode」については、次の記事で説明しています。
Style Fidelityについて、整理しておきましょう。
この項目は、参照画像にどれほど忠実であるかどうかを設定するモノでした。
ということは、参照画像に忠実であればあるほどプロンプトを無視することになります。
逆に、参照画像に忠実でないならば、プロンプトを重視します。
このことを検証してみましょう。
まず、参照画像として次の画像を用意します。

この画像をベースにして、プロンプトとStyle Fidelityの関係を確認しましょう。
なお、Preprocessorにはreference_adain+attnを利用します。
まずは、この女性に着物を着せてみましょう。
woman in street, masterpiece, best quality, with a kimono
左から、Style Fidelityは「0」、「0.5」、「1」となります。

参照画像の女性に忠実であればあるほど、似るということですね。
そうでなければ、プロンプトの影響度が増すことになります。
着物であるため、日本の女性になっているのですかね。
次に、プロンプトに犬を指定します。
dog in street, masterpiece, best quality,

参照画像への忠実度が低いと、プロンプトを重視して犬を表示させます。
忠実度が高いと、女性と犬が融合してしまうほどです。
最後は、性別を変えてみましょう。
man in street, masterpiece, best quality,

さすがに犬とは異なり、男性と女性は上手く融合できたようです。
参照画像への忠実度が高いと、女性を忠実に描こうとします。
そのため、その場合は中性的な男性が表現されることになります。
逆に、忠実度が低いと、男性を表現することに注力します。
つまり、プロンプトに忠実になると言えますね。
これで、Style Fidelityについては理解が進んだと思います。
以上、Style Fidelityの検証を説明しました。