【Stable Diffusion】SDXLでADetailerを設定し顔の崩れを防止する実践ガイド

問題の概要:SDXLでの顔の崩れとADetailer設定の課題

Stable Diffusion XL (SDXL) は高解像度で詳細な画像生成が可能ですが、特に人物の顔の生成において、以下のような問題が発生することがあります。

  • 顔のパーツ(目、鼻、口)の位置が不自然にずれる
  • 顔の輪郭が歪んだり、平坦になる
  • 細部(まつ毛、歯、肌の質感)がぼやける、または消失する
  • 複数人物がいる場合、一部の顔だけが崩れる

これらの問題は、生成解像度が不足していたり、プロンプトの指示が不十分な場合に顕著になります。また、SDXL 1.0のベースモデルは、顔の細部生成において必ずしも最適化されているわけではありません。これを解決するための強力なツールが「ADetailer」です。しかし、SDXL用にADetailerを適切に設定しないと、効果が得られなかったり、逆に画質を劣化させたりするエラーが発生します。代表的なエラーメッセージや不具合として、RuntimeError: Sizes of tensors must match や、顔検出が行われない、処理後に顔が不自然にペタッとした質感になるなどが挙げられます。

原因の解説:なぜSDXLで顔が崩れ、ADetailerがうまく動かないのか

SDXLでの顔崩れの主な原因は以下の3点です。

1. 解像度とアスペクト比のミスマッチ

SDXLは1024×1024を基本解像度として訓練されていますが、異なるアスペクト比(例:768×1344)で生成する場合、モデルが訓練データと異なる構成を学習するため、顔の生成が不安定になります。

2. 顔検出モデルの互換性問題

ADetailerはデフォルトで「face_yolov8n.pt」や「mediapipe_face_full」などの顔検出モデルを使用します。これらのモデルはSD 1.5時代に最適化されたものが多く、SDXLの生成画像の特徴(解像度、画風、顔の表現)を必ずしも正確に検出できない場合があります。これにより、顔の領域を正しく特定できず、後処理が適用されません。

3. ADetailer設定パラメータの不適切さ

ADetailerの「Denoising strength」(ノイズ除去強度)や「Mask blur」(マスクぼかし)などのパラメータは、SD 1.5用の値がデフォルトとなっています。SDXLはより洗練された潜在空間を持つため、これらの値を調整せずに適用すると、顔部分が周囲の画風と調和せず、貼り付けたような不自然な仕上がりになります。

解決方法:SDXL最適化ADetailer設定のステップバイステップ

Automatic1111 WebUIまたはComfyUIを使用していることを前提とします。ここではWebUIを例に説明します。

ステップ1:ADetailerのインストールと更新確認

まず、ADetailerが最新版であることを確認します。拡張機能タブから更新するか、以下のコマンドで再インストールします。

# WebUIのインストールディレクトリで
cd extensions
git clone https://github.com/Bing-su/adetailer.git

再起動後、ADetailerが「txt2img」「img2img」タブ下部に表示されていることを確認します。

ステップ2:SDXL用顔検出モデルの選択とダウンロード

SDXLには「face_yolov8n.pt」よりも「face_yolov8s.pt」または「mediapipe_face_full」の方が検出精度が高い傾向があります。モデルは初回使用時に自動ダウンロードされますが、手動でダウンロードする場合は以下のパスに配置します。

webui/models/adetailer/

ADetailer設定画面の「ADetailer model」で、試したいモデルを選択します。

ステップ3:キーパラメータの最適化設定

以下のパラメータを調整することが成功の鍵です。一度にすべて変えず、少しずつ調整しながら最適値を見つけてください。

  • Denoising strength: 0.3 – 0.4 (SDXLは高品質なため、強すぎると不自然。デフォルトの0.4より下げることを推奨)
  • Mask blur: 4 – 8 (境界を自然に溶け込ませる。SDXLではやや大きめの値が良い)
  • Inpaint padding: 16 – 32 (修正範囲を顔の周囲に広げる)
  • CFG Scale for inpainting: 「Use separate CFG Scale」にチェックを入れ、7.0前後に設定(全体のCFG Scaleとは別に調整可能)

設定例:Denoising strength=0.35, Mask blur=8, Inpaint padding=24

ステップ4:プロンプトの工夫と生成前の対策

ADetailerに依存する前に、生成品質そのものを上げる工夫をします。

# 悪い例
masterpiece, best quality, 1girl, portrait

# 良い例(SDXL向けに具体化)
masterpiece, best quality, photorealistic, 1girl, close-up portrait, detailed face, perfect eyes, sharp focus, studio lighting, skin texture, (high resolution:1.2)
Negative prompt: deformed face, blurry face, bad anatomy, ugly, asymmetric eyes

また、生成解像度はSDXLの推奨解像度(1024×1024, 896×1152, 832×1216など)を使用し、高解像度補助機能(Hires. fix)を併用すると、ベースの顔品質が向上します。

ステップ5:複数人物や全身画への対応

画像内に複数の顔がある場合、ADetailerはデフォルトで最大4つまで検出・処理します。設定の「Max number of detections」で数を増やせますが、処理時間が増加します。全身画で顔が小さい場合は、「Detection model」で「person_yolov8s.pt」を選択し、人体全体を検出してから顔部分を処理する二段階方式も有効です。

コード例・コマンド例

ADetailer設定のJSONプリセット例

よく使う設定をプリセットとして保存できます。以下の内容をテキストエディタで作成し、webui/outputs/adetailer_presets/ フォルダに sdxl_face_enhance.json として保存します。

{
  "ad_model": "face_yolov8s.pt",
  "ad_prompt": "",
  "ad_negative_prompt": "",
  "ad_confidence": 0.3,
  "ad_mask_min_ratio": 0.0,
  "ad_mask_max_ratio": 1.0,
  "ad_dilate_erode": 4,
  "ad_mask_blur": 8,
  "ad_denoising_strength": 0.35,
  "ad_inpaint_only_masked": true,
  "ad_inpaint_only_masked_padding": 24,
  "ad_use_inpaint_width_height": false,
  "ad_inpaint_width": 512,
  "ad_inpaint_height": 512,
  "ad_use_steps": false,
  "ad_steps": 28,
  "ad_use_cfg_scale": true,
  "ad_cfg_scale": 7.0,
  "ad_restore_face": false,
  "ad_controlnet_model": "None",
  "ad_controlnet_module": "inpaint_only",
  "ad_controlnet_weight": 1.0
}

保存後、WebUIのADetailer設定画面で「Preset」から sdxl_face_enhance を選択するだけで一括設定が適用されます。

エラー対処コマンド例

「RuntimeError: Sizes of tensors must match」が発生する場合、多くの場合「ad_inpaint_width/height」が原因です。以下の設定を確認・変更してください。

# エラーが起きる設定(非推奨)
ad_inpaint_width: 768
ad_inpaint_height: 768
ad_use_inpaint_width_height: true

# 推奨設定1:マスク領域のみを処理(最も安全)
ad_use_inpaint_width_height: false
ad_inpaint_only_masked: true

# 推奨設定2:SDXLの基本解像度を使用する場合
ad_use_inpaint_width_height: true
ad_inpaint_width: 1024
ad_inpaint_height: 1024

まとめ・補足情報

SDXLで高品質な顔を生成するには、ADetailerは非常に強力なツールですが、SD 1.5と同じ設定では期待通りの結果が得られません。鍵は、SDXLに適した顔検出モデルの選択と、Denoising strengthなどのパラメータの適切なダウンチューニングにあります。まずはベースの生成品質を高め(プロンプト、解像度、Hires. fix)、その上でADetailerを「微調整ツール」として控えめに適用するという考え方が重要です。

さらに発展的なテクニックとして、ADetailerの「Custom Prompt」機能を使用し、顔部分だけに特別なプロンプト(例:perfect eyes, detailed iris, natural skin pores)を適用する方法もあります。また、生成後に別の顔特化LoRA(Low-Rank Adaptation)モデルや、専門的な顔修復ツール(CodeFormer、GFPGAN)を軽い強度で併用するのも効果的です。

SDXLの生態系は急速に進化しており、ADetailerに代わる新しい後処理拡張機能や、顔生成に特化したSDXL派生モデル(例:AlbedoBase XL)も登場しています。本記事の設定をベースに、最新の情報にもアンテナを張りながら、最適なワークフローを構築してください。

この記事は役に立ちましたか?