問題の概要:SDXLにおける顔の崩れとADetailerの設定課題
Stable Diffusion XL (SDXL)は高解像度で詳細な画像生成が可能ですが、特に人物の顔を生成する際に、以下のような問題が頻繁に発生します。
- 顔のパーツ(目、鼻、口)の位置が不自然にずれる
- 顔の輪郭が歪んだり、左右非対称になる
- 高解像度(1024×1024以上)で生成すると、顔の詳細がぼやけるまたは崩れる
- ADetailer(After Detailer)拡張機能をSDXLで使用した際に、効果が弱い、または逆に顔が不自然に修正される
具体的なエラーメッセージというよりは、生成結果の品質問題ですが、ADetailerのログには以下のような警告が表示されることがあります。
[ADetailer] Warning: Low confidence detection for face (0.45). Skipping.
[ADetailer] No face detected in the generated image.
これらの問題は、SDXLの基本モデルとVAEの特性、およびADetailerのデフォルト設定がSD 1.5モデル向けに最適化されていることに起因しています。
原因の解説:なぜSDXLで顔が崩れやすいのか?
SDXLにおける顔崩れの根本的な原因は、主に以下の3点に集約されます。
1. モデルアーキテクチャと訓練データの違い
SDXLはSD 1.5/2.1とは異なるアーキテクチャ(より深いUNet、2段階のリファイナーモデル)を採用しています。また、訓練に使用されたデータセットの分布も異なるため、SD 1.5向けに調整されたプロンプトやネガティブプロンプト、サンプラー設定がそのままでは最適に機能しません。
2. VAE(Variational Autoencoder)の特性
SDXLには専用のVAE(`sdxl_vae.safetensors`)が用意されています。このVAEは高解像度化に伴う詳細情報のエンコード/デコード特性がSD 1.5用のVAEと異なり、特に顔の微細なテクスチャを処理する際にアーティファクト(歪み)を発生させやすい傾向があります。
3. ADetailerのデフォルト設定の非互換性
ADetailerはデフォルトで「face_yolov8n.pt」や「face_yolov8s.pt」といった顔検出モデルを使用します。これらのモデルはSD 1.5世代の画像で訓練されていることが多く、SDXLが生成する画像の顔スタイルや解像度に対して検出精度が低下し、修正が適用されなかったり、誤検出を起こしたりします。
解決方法:ステップバイステップでの顔崩れ防止とADetailer最適化
ステップ1:基本設定の最適化
まず、SDXLでの生成品質を向上させる基本設定を行います。Automatic1111 WebUIの「Settings」から以下の調整を推奨します。
1. VAE: `sdxl_vae.safetensors` を確実に読み込む
2. Clip Skip: 2 (SDXL推奨値)
3. Sampling method: DPM++ 2M Karras または Euler a
4. Sampling steps: 20-30 (リファイナーモデル使用時は+10程度)
5. CFG Scale: 5-8
ステップ2:プロンプトエンジニアリングによる顔の安定化
プロンプトに顔の品質を指定するキーワードを追加します。ネガティブプロンプトも重要です。
プロンプト例:
(masterpiece, best quality, ultra-detailed), 1girl, portrait, sharp focus, perfect face, symmetrical face, detailed eyes, detailed skin texture
ネガティブプロンプト例:
(worst quality, low quality:1.4), deformed, distorted face, blurry, bad anatomy, asymmetric eyes, mutated face, ugly
「symmetrical face」(対称的な顔)や「perfect face」は顔の崩れ防止に特に効果的です。
ステップ3:高解像度生成(Hires. fix)の適切な使用
SDXLはベース解像度が1024×1024と高いため、Hires. fixの使い方がSD 1.5と異なります。
1. 初期生成解像度: 1024x1024 (または目的のアスペクト比)
2. Hires. fix: 有効化
3. Hires upscaler: `4x-UltraSharp` または `R-ESRGAN 4x+`
4. Hires steps: 10-15
5. Denoising strength: 0.3-0.45 (高すぎると顔が崩れる)
重要: Denoising strengthは0.5を超えると、顔が完全に再生成されて崩れるリスクが高まります。
ステップ4:ADetailer for SDXLの詳細設定
ADetailerのタブを開き、以下の設定を行います。これが最も重要なステップです。
1. ADetailer model: `face_yolov8n.pt` (v2.4以降では `mediapipe_face_full` も選択可)
2. Prompt: 空欄(メインプロンプトを継承)または、顔専用の軽微なプロンプトを記入
例: `perfect face, detailed eyes, sharp focus`
3. Negative Prompt: 空欄(メインのネガティブプロンプトを継承)
4. Mask Preprocessing: `None` または `Fill holes (small)`
5. Max Resolution: 1024 (SDXLのベース解像度に合わせる)
6. Mask Padding: 32-64 (顔全体をカバーするため少し大きめに)
7. Denoising Strength: 0.3-0.4 (SDXLでは低めが安全)
8. Inpaint Padding: 32
9. ADetailer Confidence: 0.3 に下げる(SDXLの顔検出精度低下を補う)
10. Use Separate CFG Scale: チェックを外す(または7前後に設定)
「ADetailer Confidence」を0.2-0.35に下げることで、SDXLの顔の検出漏れを大幅に減らせます。デフォルトの0.5では検出されないことが多々あります。
ステップ5:検出モデルのアップデートと代替手段
ADetailer v2.4以降では、`mediapipe_face_full` という検出方法が利用可能です。これは機械学習モデルではなくGoogleのMediaPipeライブラリを使用するため、SDXLの顔スタイルへの依存度が低く、検出が安定する場合があります。ターミナルで以下のコマンドを実行し、ADetailerを最新化しましょう。
# Automatic1111の拡張機能ディレクトリに移動
cd stable-diffusion-webui/extensions
cd adetailer
git pull
更新後、WebUIを再起動すれば `mediapipe_face_full` が選択肢に現れます。
コード例・コマンド例:ADetailer設定のバッチ処理
X/Y/Zプロットを使って、最適なDenoising StrengthとConfidence値を探すスクリプト例です。`webui-user.bat` に引数を追加して起動するか、Txt2Imgのスクリプトから実行できます。
### プロンプト例(Script > X/Y/Z plotを使用)
Prompt: portrait of a beautiful japanese woman, detailed face
Negative Prompt: deformed, blurry
ADetailer Setting in Prompt:
[ADetailer]
model="face_yolov8n.pt"
prompt=""
negative_prompt=""
denoising_strength=0.35
confidence=0.3
### X/Y/Z plot 設定例
X type: Prompt S/R
X values: denoising_strength=0.25, denoising_strength=0.3, denoising_strength=0.35, denoising_strength=0.4
Y type: Prompt S/R
Y values: confidence=0.25, confidence=0.3, confidence=0.35
このようにして、顔の修正強度(denoising_strength)と検出感度(confidence)の最適な組み合わせを網羅的にテストできます。
まとめ・補足情報
SDXLで安定した高品質な顔を生成するには、「基本設定の最適化」「プロンプトによる誘導」「Hires. fixの適切な使用」「ADetailerの細かいチューニング」の4段階が重要です。特に、ADetailerはSDXL用にConfidence閾値を下げ(~0.3)、Denoising Strengthを控えめに(~0.35)設定することが成功の鍵となります。
また、最新のADetailerでは`mediapipe_face_full`の利用も検討してください。さらに、LoRAやTextual Inversionで顔のスタイルを強固に固定する方法も有効です。例えば、特定の顔スタイルに特化したLoRAを組み合わせることで、生成される顔のバリエーションを制御し、崩れを防ぐことができます。
SDXLはモデルが大きい分、生成に時間はかかりますが、これらのテクニックを駆使することで、SD 1.5を凌駕する精緻で崩れのない人物画像を安定して生成できるようになります。設定は一見複雑ですが、一度最適なパラメータを見つければ、それをプリセットとして保存し、今後の作業を大幅に効率化できるでしょう。