Stable Diffusionで全身画像を生成すると顔の崩れやすくなります。そんなときによく使われる手法がADetailerという手法です。本記事ではADetailerのインストールから便利な使い方について解説します。本記事を読むと次のようなことがわかります。
- ADetailerのインストールと基本的な使い方
- ADetailerで顔の崩れを補正する方法
- 表情や顔の雰囲気の変換やLoRAを顔だけに適用する方法
- パラメータや設定値について
- 併用すると良いプロント
顔や手の崩れを補正する方法は、ADetailer以外にもあるので、もし興味があれば以下の記事を参考にしてください。
Adetailerとは?仕組みと顔/手が崩れにくくなる理由
Adetailerは顔や手の崩れを補正する拡張機能です。ADetailerでは具体的には以下のような方法で生成した画像を補正しています。
Adetailerの仕組み
- 顔や手を検出モデルで自動検出。
- 検出した顔や手の部分を切り抜いてStable Diffusionで補正。
- 再生成した顔や手の画像を元の位置に貼り付ける。
こうすると良くなる理由としてはStable Diffusionが顔や手に集中して再生成することができるからです。再生成する際に切り抜いた箇所の解像度が高くなるので、目や鼻といった個別のパーツもきっちりと書き込めるようになり綺麗に顔が描画されます。
ADetailerのメリット: 他の顔補正より優れている点
顔を修正する方法は他にもいくつかありますがADetailerが他の手法に比べている点は次の3つです。
- お手軽: Enable ADetailerをチェックするだけで自動で顔補正が行われるのでお手軽です。
- メモリ消費や生成時間などのが優れている: 他の多くの手法は元画像をアップスケールすることで補正をするので画像が大きくなって生成に時間がかかります。ADetailerは顔画像だけに絞るので解像度を上げずに済み効率的に補正が可能となります。
- 顔だけにLoRAを適用したりと小回りが利きやすい。: ADetailerは補正するときにちょっとした変換も加えることができるので何かと小回りが利きやすいので便利です。
他の手法について気になる場合は次の記事を参考にしてください。
Adetailerのインストール
- 1/4“Install from URL”タブへ切り替え
Stable Diffusion Web UIのタブをExtensionsへ切り替えます。そしてInstall from URLタブに切り替えてください。
- 2/4ADetailerをインストール
URL for extension’s git repositoryに以下を入力します。
https://github.com/Bing-su/adetailer.git
そしてInstallをクリックしてインストールしてください。
後はインストールが完了するまで待ちます。以下のようなローディングアイコンが消えるまで待ちましょう。
- 3/4Stable Diffusion Web UIを再起動
Installedタブへ切り替えて、adetailerがインストールされていることを確認します。問題なければApply and restart UIでStable Diffusion Web UIを再起動します。
- 4/4ADetailerがインストールされていることの確認
トップページが表示されたらADetailerのメニューが追加されていることを確認しましょう。以下のようになっていれば問題ありません。
Adetailerの使い方
ADetailerはtxt2imgとimg2imgで利用できます。使い方はtxt2imgもimg2imgも変わらないので今回はtxt2imgで解説します。
- 1/8ADetailerのメニューが表示されていることを確認
まずは左下の方にADetailerが表示されていることを確認しましょう。もし表示されていない場合はインストールされていないので前のセクションを参考にインストールしてください。
- 2/8ADetailerのメニューを開く
ADetailerの横に表示されている◀をクリックして、ADetailerのメニュー画面を開きます。
- 3/8Enableにチェック
メニューを開いたらまずはEnable ADetailerにチェックを入れて有効化します。これで画像生成時にADetailerが実行されます。
- 4/8ADetailer modelの選択
ADetailer modelを選択しましょう。ADetailer modelとは、ADetailerを適用する箇所を検出するモデルです。ADetailerは顔、手、体を検出するモデルが用意されています。
検出モデルの詳細は次の表にまとめています。生成したい画像や補正したいパーツ(顔、手、体)に応じて、ADetailer modelを適切なものを選んでください。
Model Target 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/8ADetailerメニュー内のプロンプトを入力。顔に関する内容を記述。
次にプロンプトを入力します。空欄にすると画像生成時のプロンプトが利用されます。今回はせっかくなので、顔の詳細に特化したプロンプトを入力します。その他のパラメータは初期値のままにします。他のパラメータについては後ほど解説。
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/8txt2imgのプロンプトを入力。
それでは通常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を顔に適用してみます。
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プラグインが必要となります。次の拡張機能ををインストールしてください。インストールしたら再起動も忘れずに。
次はパラメータとシードを復元しましょう。
- Image Browserタブへ切り替え。
- “EXIF keyword search”欄にキーワードを入力してEnterで検索します。キーワードは画像を生成する際に指定した呪文(プロンプト)の一部などを入力しましょう。
- 対象の画像を選択します。
右下に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 | 検出領域の面積の最小と最大を指定します。画像の全体の面積に対する比率で最小値と最大値を指定します。 |
Mask Preprocessingについて
Mask Preprocessingはadetailerの検出範囲を適用範囲に変換する際のパラメータです。
マスクの前処理 | 説明 |
---|---|
マスクのx, yオフセット | マスクを水平方向xと垂直方向yに移動します。マスクの位置を微調整したいときに使います。 |
マスクの収縮(-) / 膨張(+) | 検出されたマスクを拡大または縮小します。適用範囲を広げたいときに使います。 |
マスクの結合モード | None: 各マスクを個別に修復 Merge: 全てのマスクを結合して修復 Merge and Invert: 全てのマスクを結合し反転させてから修復 |
これらの操作の適用順は 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):境界ボックスの面積で並べ替え(マスクの面積ではない)
コメント