ADetailerインストールと5つの使い方(顔、手、体の崩れを補正…)と仕組みを徹底解説

Stable Diffusionで全身画像を生成すると顔の崩れやすくなります。そんなときによく使われる手法がADetailerという手法です。本記事ではADetailerのインストールから便利な使い方について解説します。本記事を読むと次のようなことがわかります。

  • ADetailerのインストールと基本的な使い方
  • ADetailerで顔の崩れを補正する方法
  • 表情や顔の雰囲気の変換やLoRAを顔だけに適用する方法
  • パラメータや設定値について
  • 併用すると良いプロント
GitHub - Bing-su/adetailer: Auto detecting, masking and inpainting with detection model.
Auto detecting, masking and inpainting with detection model. - GitHub - Bing-su/adetailer: Auto detecting, masking and inpainting with detection model.

Adetailerとは?仕組みと顔/手が崩れにくくなる理由

Adetailerは顔や手の崩れを補正する拡張機能です。ADetailerでは具体的には以下のような方法で生成した画像を補正しています。

Adetailerの仕組み

  1. 顔や手を検出モデルで自動検出。
  2. 検出した顔や手の部分を切り抜いてStable Diffusionで補正。
  3. 再生成した顔や手の画像を元の位置に貼り付ける。

こうすると良くなる理由としてはStable Diffusionが顔や手に集中して再生成することができるからです。再生成する際に切り抜いた箇所の解像度が高くなるので、目や鼻といった個別のパーツもきっちりと書き込めるようになり綺麗に顔が描画されます。

ADetailerのメリット: 他の顔補正より優れている点

顔を修正する方法は他にもいくつかありますがADetailerが他の手法に比べている点は次の3つです。

  • お手軽: Enable ADetailerをチェックするだけで自動で顔補正が行われるのでお手軽です。
  • メモリ消費や生成時間などのが優れている: 他の多くの手法は元画像をアップスケールすることで補正をするので画像が大きくなって生成に時間がかかります。ADetailerは顔画像だけに絞るので解像度を上げずに済み効率的に補正が可能となります。
  • 顔だけにLoRAを適用したりと小回りが利きやすい。: ADetailerは補正するときにちょっとした変換も加えることができるので何かと小回りが利きやすいので便利です。

他の手法について気になる場合は次の記事を参考にしてください。

Adetailerのインストール

Adetailerのインストール手順
  • 1/4
    “Install from URL”タブへ切り替え

    Stable Diffusion Web UIのタブをExtensionsへ切り替えます。そしてInstall from URLタブに切り替えてください。

  • 2/4
    ADetailerをインストール

    URL for extension’s git repositoryに以下を入力します。

    https://github.com/Bing-su/adetailer.git

    そしてInstallをクリックしてインストールしてください。

    後はインストールが完了するまで待ちます。以下のようなローディングアイコンが消えるまで待ちましょう。

  • 3/4
    Stable Diffusion Web UIを再起動

    Installedタブへ切り替えて、adetailerがインストールされていることを確認します。問題なければApply and restart UIでStable Diffusion Web UIを再起動します。

  • 4/4
    ADetailerがインストールされていることの確認

    トップページが表示されたらADetailerのメニューが追加されていることを確認しましょう。以下のようになっていれば問題ありません。

Adetailerの使い方

ADetailerはtxt2imgとimg2imgで利用できます。使い方はtxt2imgもimg2imgも変わらないので今回はtxt2imgで解説します。

Adetailerをtxt2imgで利用する
  • 1/8
    ADetailerのメニューが表示されていることを確認

    まずは左下の方にADetailerが表示されていることを確認しましょう。もし表示されていない場合はインストールされていないので前のセクションを参考にインストールしてください。

  • 2/8
    ADetailerのメニューを開く

    ADetailerの横に表示されている◀をクリックして、ADetailerのメニュー画面を開きます。

  • 3/8
    Enableにチェック

    メニューを開いたらまずはEnable ADetailerにチェックを入れて有効化します。これで画像生成時にADetailerが実行されます。

  • 4/8
    ADetailer modelの選択

    ADetailer modelを選択しましょう。ADetailer modelとは、ADetailerを適用する箇所を検出するモデルです。ADetailerは顔、手、体を検出するモデルが用意されています。

    検出モデルの詳細は次の表にまとめています。生成したい画像や補正したいパーツ(顔、手、体)に応じて、ADetailer modelを適切なものを選んでください。

    ModelTarget
    face_yolov8n.pt顔(イラスト/実写)
    face_yolov8s.pt顔(イラスト/実写)
    hand_yolov8n.pt手(イラスト/実写)
    person_yolov8n-seg.pt人物(イラスト/実写)
    person_yolov8n-seg.pt体全体(イラスト/実写)
    person_yolov8s-seg.pt体全体(イラスト/実写)
    person_yolov8s-seg.pt体全体(イラスト/実写)
    mediapipe_face_full顔(実写)
    mediapipe_face_short顔(実写)
    mediapipe_face_mesh顔(実写)
    ADetailer modelの説明

  • 5/8
    ADetailerメニュー内のプロンプトを入力。顔に関する内容を記述。

    次にプロンプトを入力します。空欄にすると画像生成時のプロンプトが利用されます。今回はせっかくなので、顔の詳細に特化したプロンプトを入力します。その他のパラメータは初期値のままにします。他のパラメータについては後ほど解説。

    Prompt: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), cheerleader outfit, 20 yo woman, detailed face
    Negative Prompt: EasyNegative,deformed face,ugly,bad face,deformed eyes

  • 6/8
    txt2imgのプロンプトを入力。

    それでは通常txt2imgを生成するのと同様にプロンプトを入力して画像生成します。するとADetailerが適用されます。

    プロンプト: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), cheerleader outfit, full body, 20 yo woman

    ネガティブプロンプト: EasyNegative, (worst quality, low quality: 2.0), normal quality, ugly face, unclear eyes, bad mouth, bad anatomy, extra legs, beach, bad anatomy

  • 7/8
    結果

    生成された結果は次の通りです。

  • 8/8
    比較

    左がADetailerを使わない場合で右がADetailerを使った場合の比較です。ADetailerを使って作成していた場合は顔の崩れが補正されていることがわかります。

adetailerを使った顔変換。表情、年齢、雰囲気、顔だけにLoRA

adetailerは、崩れた顔の修正以外にも様々な用途があります。

ADetailerのその他の使い方

  • 表情変更
  • 年齢の変更
  • 人(人種、雰囲気)
  • 顔だけにLoRAの適用

比較基準となる無表情の顔を生成

まずはadetailerを使わずに次の呪文(プロンプト)で無表情の画像を作成します。

Prompt: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), expressionless, face focus, Photo of 20 yo Japanese woman.

Negative Prompt: EasyNegative, (worst quality, low quality: 2.0), normal quality, ugly face, unclear eyes, bad mouth, bad anatomy, extra legs, beach, bad anatomy

adetailerを使った表情変更

それではこの画像を笑顔にしていきます。次のように入力します。

Prompt: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), smile, face focus, Photo of 20 yo Japanese woman.

Negative Prompt: EasyNegative, (worst quality, low quality: 2.0), normal quality, ugly face, unclear eyes, bad mouth, bad anatomy, extra legs, beach, bad anatomy

笑顔に変更できました。このように表情変換にadetailerは使えます。

表情についてのプロンプトは次の記事でまとめているのでこちらも参考にしてください。

adetailerを使った年齢変更

Adetailerの呪文(プロンプト)を次のようにすることで年齢変更もできます。

Prompt: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), expressionless, face focus, Photo of 10 yo Japanese woman.

左が元の20歳の画像、右が年齢を10歳に変更した画像です。

adetailerを使った人物の変更

adetailerで顔の人物の変更もできます。今回は韓国風に顔を変更してみます。

Prompt: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), expressionless, face focus, Photo of Korean woman.

左は元画像、右はADetailerで韓国風女性のプロンプトを適用。

顔だけにLoRAを適用する

ADetailerを使うことで顔だけにLoRAを適用することもできます。LoRAは初耳という方は次の記事を参考にしてください。

LoRAを顔周辺だけに適用することで、全体の画像生成への影響を防ぐことができます。試しに、次の髪を詳細にしてくれるLoRAを顔に適用してみます。

https://civitai.com/models/81328/hairdetailer

ADetailerのメニューの呪文(プロンプト)に次のように入力

Prompt: <lora:hairdetailer:1>,(8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), expressionless, face focus, Photo of 20 yo Japanese woman.

Negative Prompt: EasyNegative, (worst quality, low quality: 2.0), normal quality, ugly face, unclear eyes, bad mouth, bad anatomy, extra legs, beach, bad anatomy

左は元画像、右はADetailerでLoRAを適用。

後から表情だけを変換したい。顔だけにLoRAを適用したい。

後からADetailerで表情や顔を変換したい場合は、生成したときと同じパラメータとシード値で同じ画像を生成し、ADtailerを適用することで表情変換を行います。そのためまずはパラメータとシード値を探すところからはじめます。

もし生成した画像を探すのが面倒、見つからない、そもそも生成した画像ではなく既存の画像の表情変換を行いたいといった場合にはControlNet Inpaintという機能がおすすめです。気になる場合は次の記事を参考にしてください。

過去に作成した画像のパラメータとシード値を取得するにはImage Browswerプラグインが必要となります。次の拡張機能ををインストールしてください。インストールしたら再起動も忘れずに。

GitHub - AlUlkesh/stable-diffusion-webui-images-browser: an images browse for stable-diffusion-webui
an images browse for stable-diffusion-webui. Contribute to AlUlkesh/stable-diffusion-webui-images-browser development by creating an account on GitHub.

次はパラメータとシードを復元しましょう。

  1. Image Browserタブへ切り替え。
  2. “EXIF keyword search”欄にキーワードを入力してEnterで検索します。キーワードは画像を生成する際に指定した呪文(プロンプト)の一部などを入力しましょう。
  3. 対象の画像を選択します。

右下にtxt2imgで送るボタンが存在するので送信します。

するとtxt2img画面に遷移してパラメータがセットされた状態になります。後は先ほどと同じ手順で画像を生成するだけです。

生成された画像は次の通りです。

adetailerのメニュー説明

最大2つまでADetailerを適用できる

ADetailerは最大2つまでモデルを実行することができます。基本的には顔と体・手を同時に補正したいときに使います。

1つ目で顔を補正するプロンプトをする。

顔の補正に使える呪文(プロンプト)/ネガティブ呪文(プロンプト)

  • deformed face
  • ugly
  • bad face
  • deformed eyes

手の補正について

2つ目で手を補正する。

adetailerで手を補正する場合はADetailer modelにhand_yolov8n.ptを選択します。これは手を検出するモデルです。これを指定して呪文(プロンプト)に手を正しく描画するように入力します。

手の補正に使える呪文(プロンプト)/ネガティブ呪文(プロンプト)

呪文(プロンプト)のキーワード

  • five fingers

ネガティブ呪文(プロンプト)のキーワード

  • deformed hand
  • extra_fingers
  • bad fingers
  • missing fingers
  • fewer digits,extra digit
  • liquid fingers

Prompt:

five fingers

Negative Prompt:

deformed hand, extra_fingers, bad fingers, missing fingers, fewer digits, extra digit, liquid fingers

こちらで更に詳しく解説しております。

体の補正について

2つ目で体を補正していきます。

adetailerで体を補正する場合はADetailer modelにperson_yolov8n-seg.ptを選択します。これは体全体を検出するモデルです。これを指定して呪文(プロンプト)に体を正しく描画するように入力します。

体の補正でネガティブ呪文(プロンプト)に使えるキーワード

  • bad anatomy
  • deformed mutated disfigured
  • missing arms
  • extra_arms

Negative Prompt:

bad anatomy, deformed mutated disfigured, missing arms, extra_arms

Detectionについて

Detectionメニューはadetailerの適用範囲の検出に関するパラメータです。

メニュー説明
Detection model confidence thresholdこの閾値を超える検出モデルの信頼度を持つオブジェクトのみが画像修復に使用されます。誤検出が多いと感じる場合は大きくしてください。上手く検出されない場合は小さくすると良いでしょう。
Mask min area ratio
Mask max area ratio
検出領域の面積の最小と最大を指定します。画像の全体の面積に対する比率で最小値と最大値を指定します。
After Detailer(adetailer)のDetectionメニューの説明

Mask Preprocessingについて

Mask Preprocessingはadetailerの検出範囲を適用範囲に変換する際のパラメータです。

マスクの前処理説明
マスクのx, yオフセットマスクを水平方向xと垂直方向yに移動します。マスクの位置を微調整したいときに使います。
マスクの収縮(-) / 膨張(+)検出されたマスクを拡大または縮小します。適用範囲を広げたいときに使います。
マスクの結合モードNone: 各マスクを個別に修復
Merge: 全てのマスクを結合して修復
Merge and Invert: 全てのマスクを結合し反転させてから修復
After Detailer(adetailer)のMask Preprocessingメニューの説明

これらの操作の適用順は x, yオフセット → 収縮/膨張 → 結合/反転です。

Inpaintingについて

  • Inpating mask blur: inpaintを実行する前に、マスクがどれだけぼかされるかを調整します。強くするとinapintされた画像の鋭いエッジを避けることができます。
  • ADetailer steps: Inpaintのステップ数を調整します。Use separate stepsにチェックを入れると適用されます。
  • ADetailer sampler: Inpaintのsamplerを選択します。User separate sampmlerにチェックを入れると適用されます。
  • Restore faces after ADetailer: 検出した範囲にRestore facesを適用します。検出範囲が顔の場合は補正されます。顔のInpaintが上手く行かないときに利用すると良いでしょう。
  • Inpaint denoising strength: Inpaintのdenoising strengthを変更します。
  • inpaint width / height: Inpaintを適用する前に検出範囲の大きさを指定した大きさに拡大、縮小します。Use separate width/heightにチェックを入れると適用されます。
  • ADetailer CFG scaler: InpaintのCFG Scaleを調整します。値を大きくすると入力画像からの変化が大きくなり、小さくすると入力画像からの変化が小さくなります。Use separate CFG scaleにチェックを入れると適用されます。

ControlNetの併用について

ControlNet modelがインストールされている場合は、併用することができます。ControlNetを利用することで体の各箇所を検出や輪郭、手の形など変更を加えたくない要素を抽出して、保持したままInpaintで画像の修復を行うことができます。

FAQ

ADetailerを検索しても表示されない。

インストールするときにadetailerとStable Diffusion Web UI(AUTO1111)に入れても出てきません。なぜなら正式名称が!After Detailerだからです。

つまり見つけるためにはafterかdetailerで検索する必要があります。

ADetailer以外に良い方法はない?

ADetailerは高い精度で補正ができる仕組みですが、構図によっては顔や手を検出できないことがあります。そこが気になる場合は顔の崩れを防ぐ方法はいくつかあるので次の記事も参考にしてみてください。

ADetailerのsettingsの設定値について

Stable Diffusion Web UIのSettingsのサイドバーのADetailerをクリックするとADetailerの設定メニューを開くことができます。

  • Max models: 使用したいモデルの総数です。デフォルト = 2です。顔と手と体のように複数使う場合は増やしても良いですが基本的には顔と手、顔と体で十分なのでそのままで良いと思います。
  • Save image before ADetailer: 検出モデルの予測画像を画像と一緒のフォルダに一緒に保存します。
  • Apply only selected scripts to ADetailer: ADetailerを適用する前の画像を画像と一緒のフォルダに一緒に保存します。
  • Apply only selected scripts to ADetailer: 指定されたスクリプトのみがADetailerに適用されます。このオプションは、ADetailerと一緒に使用すると一部の拡張機能でエラーが発生するため存在します。
  • Apply only selected scripts to ADetailer: ADetailerに適用するスクリプトの名前。拡張機能の名前ではなく、pythonファイルの名前を書く必要があります。
  • Apply only selected scripts to ADetailer: 境界ボックスを並べ替えます。複数領域が検出されて重なっているときにADetailerを適用する順番を制御する際に使います。ただし、稀なケースなのであまり気にしなく良いです。
    • None:ランダム
    • Position (left to right):境界ボックスの左x座標で並べ替え
    • Position (left to right):境界ボックスの中心が画像の中心に近い順に並べ替え
    • Position (left to right):境界ボックスの面積で並べ替え(マスクの面積ではない)

コメント