
そうだねー手軽に顔を近づけるならreference_onlyがおすすめ!
Stable Diffusionの拡張機能であるControlNetには、reference_only(adain+attn)という便利な機能があります。
これを使うと、お気に入りのキャラクターの顔を維持したまま、服装や背景、ポーズなどを変更した画像を生成することができます。LoRAのように追加学習をする必要がなく、1枚の参照画像から顔固定したさまざまなバリエーションを作れるので大変便利です。
reference_only(adain+attn)を活用すれば、推しキャラのオリジナルイラストをたくさん作れるようになるでしょう。ぜひ最後までご覧ください。
reference_only(adain+attn)の導入手順
reference_only(adain+attn)を使うには、まずControlNetの導入が必要です。詳しい手順は以下の記事を参考にしてください。
要点をまとめると、以下の通りです。
- Extensions タブからInstall from URLを選択してインストール
→ https://github.com/Mikubill/sd-webui-controlnet - Apply and restart UIボタンを押してWeb UIを再起動
バージョンは1.1.153以降が必要なので、古い場合はアップデートしてください。

reference_only(adain+attn)の簡単な使い方
導入が完了したら、実際に使ってみましょう。基本的な手順は以下の通りです。

- txt2imgのタブを開く
- ControlNetのEnableをオンにする
- ControlTypeでReferenceを選択
- Single Imageに参照画像をドロップ
- プロンプトなどを設定してGenerateをクリック
参照画像の人物と同じ顔で、プロンプトに応じた画像が生成されます。なるべく正面を向いた顔がはっきり写っている画像を選ぶのがコツです。
reference_onlyとデフォルトの設定でそのまま生成した画像は以下の通り。
結論!これがベストな設定

うーん、デフォルトだと完全に顔一致とはいかないね

ここからControlNetを駆使して顔を合わせていくよ!
後の章で各パラメータについて詳細を解説しますが、とりあえず結論から知りたいという人向けに2つの方法を解説します。
- 時短でぱぱっと生成したい方向け
- 時間をかけてでも顔を一致させたい方向け
さらに、最後でreference_only以外で同じ顔を量産する方法についてご紹介しますね。
❶ 時短でぱぱっと生成したい方向け
色んなパラメータがありますが、結論、Style Fidelityだけ上げればOKです!他を上げてもあまり意味がありません。

- Preprocessor: reference_only
- Style Fidelity: 0.9
デフォルトと比べると参照画像にかなり近づきましたね!
❷ 時間をかけてでも顔を一致させたい方向け
この方法ではMulti ControlNetを利用します。reference_onlyの前にreference_adain+attnを使うことで顔の方向性を一致させながら顔固定するという方法です!
この二つのreferenceを使う方法ではかなり顔が似てくれる代わりに、少し時間がかかるというデメリットがあります。
- ControlNet 0
- Preprocessor: reference_adain+attn
- Style Fidelity: 0.9
- ControlNet 1
- Preprocessor: reference_only
- Style Fidelity: 1
ControlNet1でreference_onlyを使用しているのがポイントです。顔固定を最後にしないと、別顔が生成されてしまいます。
さらに、プロンプトにshort hairを入れてみるとこんな感じ!顔固定をしながらショートヘアになりました。

reference_only(adain)の問題点と別の解決策

顔はだいぶ同じになったけど、参照画像から変えすぎるプロンプトだと変になる…?

気づいてしまったか…reference_only(adain)の限界に…
たとえば、ショートヘアでTシャツにしようとするとこんな感じ。
なんか顔が崩れてしまっていますね。

そうなんです。パラメータを強くしてやっと顔が近づいたとしても、元の画像を参照しすぎているので服装や表情を変えるといったことが難しくなります。
でも、デフォルト設定のreference_onlyだと顔が少し似てる程度のものしかできないというジレンマです。
ここで、顔固定しながらもっと色んなスタイルの画像を生成したい方向けに2つの方法を解説します。
- サンプル画像が1枚しかない場合
- サンプル画像が大量にある場合
もっと顔固定したい!でも、サンプル画像が1枚しかない場合
Stable Diffusionで生成した画像の顔を大量生産する場合など、そもそもサンプルが一個しかないかと思います。
その場は以下の方法を使うのがおすすめです。
類似度を自動計算することで、一度の大量画像生成処理でも同じ顔だけピックアップすることができます。
顔固定したら、表情やアングルなどの自由度がなくなった…1000枚とか大量の画像からピックアップ処理が大変すぎる…という経験がある方はぜひチェックしてみてください!
もっと顔固定したい!サンプル画像が大量にある場合
参照用の画像がたくさんあるなら、同じ顔を作るのは簡単です。LoRAを作ってしまいましょう。
LoRAを作るなんてそんな難しいことするつもりはなかった…とガッカリされた方…
もったいないです!LoRAって実は簡単に作ることができるのです。
Google Colab、またはWindows(NVIDAのGPU搭載)で利用できるのでぜひ以下の記事から画像を生成してみてください。
Google Colab
Windows
reference_only(adain)の各パラメータの説明
実際にどう変化するのかも含めて解説していきます。
Low VRAM

Low VRAMは、VRAMの使用量を減らすためのモードです。GPUのメモリが少ない場合はオンにしましょう。ただ、以下のように見た目は全く変わらないみたい。生成時間は少し伸びたかな?程度。
Pixel Perfect

Pixel Perfectは参照画像の解像度を自動的に調整し、ControlNetの処理に最適な状態にする機能です。解像度が高すぎる場合に使うと良いと思いますが、今回は不要でした。
Preprocessor
ControlNetでは、以下の3種類のPreprocessorを選択できます。
- reference_only(デフォルト): 参照画像をそのまま使用します。顔固定が得意です。
- reference_adain: 参照画像のスタイルを適応的に正規化(AdaIN: Adaptive Instance Normalization)します。これにより、参照画像の雰囲気を反映させることができますが、生成される画像が不安定になる可能性があります。
- reference_adain+attn: reference_adainと同じく参照画像の雰囲気を反映させます。reference_adainよりも安定しています。
一般的には、reference_onlyを使用することが推奨されています。これは、安定した結果が得られるためです。参照画像のスタイルをより強く反映させたい場合は、reference_adain+attnを試してみるのもよいでしょう。
また、Preprocessorの選択は、使用するモデルによっても異なります。例えば、写真のようなリアルな画像を生成する場合は、reference_onlyが適していますが、イラストのようなスタイライズされた画像を生成する場合は、reference_adain+attnが適している場合があります。
どのPreprocessorが最適かは、生成したい画像のスタイルや目的によって異なるので、実際に試してみて決めるのがよいでしょう。
Control Weight

Control Weightは、参照画像の特徴をどのくらい反映させるかを決めるパラメータです。0から2までの値を取り、数字が大きいほど参照画像に近い画像が生成されます。
0にするとControlNetが適用されない状態です。ただ、1以上にしてもreference_onlyでは影響なし。
Starting Control Step

この設定はControlNetが画像生成プロセスにいつ影響を始めるかを決定します。値が0の場合、最初のステップからControlNetが作用を開始します。基本的に、0のままで大丈夫です。
以下のようにreference_onlyでは影響していないよう。
Ending Control Step

この設定はControlNetが画像生成プロセスに影響を及ぼすのをいつ終了するかを決定します。値が1の場合、最後のステップまでControlNetが作用し続けます。この値を調整することで、生成される画像のControlNetによる制御の範囲を微調整することができます。
Starting Control Stepと同じくreference_onlyでは影響していないよう。
Resolution

ControlNetの前処理(アノテーター)の解像度を決定するパラメータです。Resolutionを低く設定すると、参照画像の詳細な情報が失われてしまい、ControlNetによる制御が粗くなってしまいます。
ただ、以下のように256と小さい解像度にしてもそれほど変化はなさそうです。
Style Fidelity

Style Fidelityは、Balancedモード時のスタイルの忠実度を決めるパラメータです。0から1までの値を取り、数字が大きいほど参照画像のスタイルに近くなります。
デフォルトは0.5ですが、もう少し上げて0.75程度にすると良い結果が得られることが多いです。ただし1に近づけすぎるとバランスが悪くなるので注意が必要です。
Control Mode

ControlNetとプロンプトのどちらを優先するかを制御するモードで、以下の選択肢があります。
- Balanced: ControlNetとプロンプトが等しく影響します。
- My prompt is more important: プロンプトの影響が強くなります。
- ControlNet is more important: ControlNetの影響が強くなります。
Balancedがデフォルトで、両者のバランスを取ってくれます。
基本的にはBalancedで問題ありませんが、どうしてもプロンプトを優先したい場合はMy prompt is more importantを選びましょう。
Resize Mode

参照画像をリサイズする方法を指定します。以下の3つのモードがあります。
- Just Resize: 画像を指定された解像度に単純にリサイズします。
- Crop and Resize: 画像をクロップしてからリサイズします。
- Resize and Fill: 画像をリサイズし、余白を埋めます。
基本的には「Crop and Resize」がオススメです。他のモードだとバランスが崩れがちです。

やっぱ顔固定ってreference_onlyが主流?