問題の概要:SDXLでの顔の不自然さとADetailer設定の難しさ
Stable Diffusion XL (SDXL) は高解像度で詳細な画像生成が可能ですが、特に人物の顔の描写において、以下のような課題に直面することがあります。
- 顔のパーツ(目、鼻、口)の位置が歪む、または大きさが不自然
- 肌のテクスチャが平坦で、現実味に欠ける
- 複数人物がいる場合、特定の人物の顔だけが崩れる
- 「ADetailer」などの後処理ツールを導入しても、SDXL 1.0モデルでは期待した効果が得られない、またはエラーが発生する
具体的なエラーメッセージとしては、WebUIのコンソールに AttributeError: 'NoneType' object has no attribute 'shape' や、ADetailerのタブ内に No module named 'ultralytics' が表示されるケースが典型的です。これらの問題は、SDXL用の最適化が不十分な設定や、モデルの互換性が原因で発生します。
原因の解説:なぜSDXLで顔が崩れ、ADetailerが動かないのか
SDXLにおける顔崩れとADetailerの動作不良には、主に3つの根本原因があります。
1. SDXLモデルの構造と解像度
SDXLは従来の1.5系モデルと異なり、BaseとRefinerの2段階構造を持ち、デフォルトの生成解像度が1024×1024と高くなっています。しかし、学習データの偏りや、高解像度故の細部の不安定性から、顔の構造が崩れやすくなることがあります。特に、低ステップ数や不適切なサンプラー設定時に顕著です。
2. ADetailerのデフォルトモデルとの互換性
ADetailer(Automatic 1111 WebUIの拡張機能)は、デフォルトでYOLOやMediaPipeなどの顔・人体検出モデルを使用します。これらのモデルの多くは実写画像で学習されており、アート調や特定のスタイルのSDXL生成画像を正確に検出できない場合があります。さらに、SDXLの高解像度画像に対して検出範囲(バウンディングボックス)が適切に設定されないと、顔全体ではなく一部のみを修正対象としてしまい、不自然な結果を生み出します。
3. 環境設定と依存ライブラリの不足
ADetailerは内部で「ultralytics」ライブラリ(YOLO用)や「onnxruntime」などを要求します。これらのライブラリがインストールされていない、またはバージョンが古い場合、モジュールインポートエラーが発生し、機能が完全に停止します。
解決方法:ステップバイステップでの設定と顔崩れ防止
以下に、SDXL環境で安定して高品質な顔を生成するための設定手順を説明します。
ステップ1:ADetailer拡張機能の最新版への更新と依存ライブラリのインストール
まず、ADetailer自体を最新状態に保ち、必要なPythonパッケージをインストールします。
# WebUIの拡張機能タブからADetailerを更新するか、またはコマンドで実行
cd stable-diffusion-webui/extensions
cd stable-diffusion-webui-adetailer
git pull origin main
# 必要なライブラリをpipでインストール(WebUIのvenv内で実行)
# WebUIのインストールディレクトリに移動し、venvをアクティベート
# Windows (webui-user.batを使用する場合、コマンドプロンプトは管理者権限不要)
.venvScriptsactivate
pip install ultralytics onnxruntime opencv-python-headless
インストール後、WebUIを再起動します。再起動後も No module named 'ultralytics' エラーが続く場合は、WebUI起動時に使用されるPython環境(webui-user.bat や launch.py)が正しい仮想環境を参照しているか確認してください。
ステップ2:SDXL最適化用のADetailer設定
WebUIのtxt2imgまたはimg2imgタブを開き、ADetailerサブタブを表示します。以下のパラメータを設定することが重要です。
- ADetailer 1st model:
face_yolov8n.ptまたはmediapipe_face_fullを選択。YOLOv8は検出精度が高く、SDXLの多様な顔に比較的強いです。 - Detection Prompt: 空欄のままにするか、基本的な単語(例: `face`)のみにします。複雑なプロンプトは検出精度を下げる可能性があります。
- Mask Preprocessing: 特にDilateの値を`4`から`8`程度に増やします。これにより、検出された顔領域のマスクを少し拡大し、顔の輪郭全体を含むように修正します。
- Inpainting Model: SDXL用のInpaintingモデルを必ず選択。ここが最も重要です。チェックポイントモデル選択欄で、`sd_xl_base_1.0.safetensors` などの通常モデルではなく、
sd_xl_base_1.0_inpainting_0.1.safetensorsをロードし、これをADetailerの「Inpainting Model」として指定します。通常モデルでは細部の調和が取れず、違和感の原因になります。 - Inpainting Denoising strength: `0.3` から `0.4` の範囲に設定します。強すぎると原画が失われ、弱すぎると効果が薄れます。
ステップ3:生成パラメータの最適化(ADetailer以外の根本対策)
ADetailerは後処理です。まずはベース画像の顔の品質を上げることを心がけます。
# 高品質な顔生成のためのプロンプトとパラメータ例
Positive Prompt:
(masterpiece, best quality, ultra-detailed), 1girl, portrait, beautiful detailed face, detailed eyes, perfect lips, (photorealistic:1.2), sharp focus
Negative Prompt:
(deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime:1.4), text, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck
# サンプリング設定
Sampler: DPM++ 2M Karras または Euler a
Steps: 30-40
CFG Scale: 5-7
Size: 1024x1024 (SDXLの基本解像度を維持)
Hires. fix: 有効化、Upscaler: Latent (nearest-exact), Hires steps: 10-15, Denoising strength: 0.2-0.3
Refinerの使用: SDXL Refinerを適切に使用することは顔の質を大幅に向上させます。Baseモデルで生成後、Refinerで最終仕上げを行うか、WebUIの「Refiner」タブで連続処理を設定します。RefinerのDenoising strengthは`0.3`前後が目安です。
ステップ4:複数人物や難しい構図への対応
集団写真などで特定の顔だけ崩れる場合、「Regional Prompter」拡張機能とADetailerを併用します。Regional Prompterで顔の位置ごとに個別のプロンプト(例: `(beautiful face of woman A:1.2)`)を割り当て、生成後にADetailerで各顔を一括修正する方法が効果的です。
また、ADetailerの「Skip during generation」チェックボックスを外し、生成プロセスの一部として実行することで、画像全体との調和を図れます。
コード例・コマンド例:トラブルシューティングの実践
よくあるエラーとその対処法をコマンド例と共に示します。
# エラー1: 'ultralytics' モジュールが見つからない
# 現象: WebUIコンソールに `ModuleNotFoundError: No module named 'ultralytics'`
# 解決策: WebUI環境内で明示的にインストール
cd /path/to/stable-diffusion-webui
source ./venv/bin/activate # Linux/Mac
# .venvScriptsactivate # Windows
pip install ultralytics==8.0.196 # バージョンを指定すると安定
# エラー2: ADetailerが顔を検出しない
# 現象: 画像が生成されるが、ADetailerの処理がスキップされる
# 解決策: ADetailer設定の「Detection Threshold」を下げる(0.3→0.25)、またはモデルを変更
# WebUI設定ファイルを直接編集する場合(応用)
# ファイル: `stable-diffusion-webui/extensions/adetailer/scripts/adetailer.py` 付近の設定は非推奨。UIから操作を。
# エラー3: 修正部分だけが明らかに異なる画風になる
# 原因: InpaintingモデルがSDXL用でない、またはDenoising strengthが高すぎる
# 解決策: 前述の通りSDXL Inpaintingモデルを確実にロードし、Denoising strengthを0.35前後に調整。
まとめ・補足情報
SDXLで美しく自然な顔を生成し、ADetailerを活用するための鍵は、「適切なツールの選択」と「段階的なアプローチ」です。まず、BaseモデルとRefinerを用いて可能な限り高品質なベース画像を生成し、その後、SDXL専用Inpaintingモデルを設定したADetailerで細部を調整するという流れが確実です。
ADetailerは万能ではないため、以下のような代替・併用技法も覚えておくと良いでしょう。
- After Detailer とは別の拡張機能「**Face Editor**」の使用。
- img2imgタブを使った手動インペインティング:崩れた顔部分をマスクで囲み、`face` などのプロンプトを強化して部分再生成。
- LoRAの活用:顔の質に特化したSDXL用LoRAモデル(例: `sdxl_lora_face_quality`)を探して適用する。
SDXLとその周辺ツールは急速に進化しています。拡張機能のGitHubページ(例: ADetailerのリポジトリ)やコミュニティフォーラムを定期的に確認し、最新のベストプラクティスを取り入れることをお勧めします。環境構築とパラメータ調整に少し時間をかけることで、SDXLの持つ高い表現力を最大限に引き出した人物画像の生成が可能になります。