Stable Diffusion Web UIの便利な拡張機能紹介記事です。
今回は画像の人・顔・手などを修正できる「After Detailer(ADetailer)」について紹介します。
After Detailerとは?
After Detailerは名前の通り、後から画像の特定の部位を修正できる機能です。
使用するモデルによって検出部位が異なり、人・顔・手などを修正できます。
また修正する箇所の範囲を制限したり、ControlNetのインペイントと合わせて使ったり自由度も高めです。
修正後のクオリティも比較的高いので、崩れた画像を修正したいときに便利な機能となっています。
Bing-su/adetailer: Auto detecting, masking and inpainting with detection model.
After Detailerのインストール
Extensions→Install from URL→URL for~に下記URLを入力し、Installボタンをクリックしてください。
https://github.com/Bing-su/adetailer.git
UIをリスタート、または再起動すれば設定が反映され、txt2imgなどADetailerというタブが追加されていれば、インストールは完了です。
After Detailerの使い方
txt2imgタブにAfter Detailerが追加されているので、「Enable ADetailer」にチェックを入れれば使用できます。
またモデルによって修正できる箇所が異なります。
公式を見ると、モデルはyolov8が2・3次元両方に対応、mediapipeは3次元画像に対応しているみたいです。
またyolov8のhandは手、personは人を検出できます。
face_yolov8n.pt | 2D / realistic face |
face_yolov8s.pt | 2D / realistic face |
hand_yolov8n.pt | 2D / realistic hand |
person_yolov8n-seg.pt | 2D / realistic person |
person_yolov8s-seg.pt | 2D / realistic person |
mediapipe_face_full | realistic face |
mediapipe_face_short | realistic face |
mediapipe_face_mesh | realistic face |
これで画像生成すれば、生成後の画像に自動で修正がかかります。
以下face_yolov8n.ptを使った画像です。
・右がface_yolov8n.ptで修正した画像
修正したい部位やクオリティに合わせて、モデルを変えてみてください。
After Detailerで設定できるパラーメータ
ADetailer prompt/negative prompt
これは検出した部位に対して、追加でプロンプトを反映できるものです。
例えば顔を修正するとき、「angry」と入力すれば怒った顔になります。
ネガティブプロンプトも使い方は同じです。
特定の部位に対して反映したくない要素を入力すれば、ある程度抑えることができます。
Detection
Detectionは、検出した顔のスコアやマスクのサイズを指定して、修正範囲を制御できるものです。
複数顔がある画像でyolov8nを使用すると、「顔」として検出した部分がスコアで表示されます。
数値が高いほど「顔」として強く認識されているということです。
スコアの画像は、setting→ADetailer→Save mask previewsにチェックを入れると保存できます。
Detectionはこの数値やマスクの大きさを指定して、修正する範囲を指定できます。
Detection model confidence threshold
Detection model confidence thresholdは、指定した数値以上の顔を検出するというものです。
例えばこの画像で0.87を指定すると、0.87以上は修正、以下はしないというように修正範囲を制限できます。
Mask min area ratio
Mask min area ratioは、検出するマスクサイズの最小値を指定できます。
例えば0.03にした場合は、画像全体に対してマスクサイズが3%以上のもののみ修正が行われます。
この画像だと左側2人が全体の3%以上のマスクサイズと認識され、修正が行われています。
Mask only the top k largest (0 to disable)
これはマスクが大きい順に並べて上位何人まで修正するかを指定できます。
マスクの大きい順に順位をつけると以下のようになります。
「3」と指定すれば、マスクの大きい順に上位3位までの顔(左3人)が修正されます。
Mask max area ratio
Mask max area ratioは、検出するマスクの最大値を指定できます。
例えば0.01にすると、画像全体に対してマスクサイズが1%以下のマスクのみ修正が行われます。
この画像だと一番右の女性のみ修正されます。
Mask Preprocessing
これはマスクの位置を調整できるものです。
例えばx軸の値をマイナスにすれば検出時より左に、プラスにすれば右にマスクをずらすことができます。
- Mask x(→) offset:横軸
- Mask y(↑) offset:縦軸
- Mask erosion (-) / dilation (+):拡大縮小
Mask merge modeは修正時の効果を変更できます。
Mergeモードは修正方法を変更しているようで、通常の修正とは異なる結果になりました。
Merge and Invertはマスク以外の部分にADetailerを適用できるものです。画像を見ると顔以外の背景や服が修正されているのがわかると思います。
Inpainting
Inpaintingはマスク部分に対して、さまざまなパラーメータを設定できます。
例えばUse separate checkpointにチェックを入れて、別のモデルを選択すると、検出した部位をそのモデルで修正できます。
・左から元画像・anyloraで修正・counterfeitで修正したもの
設定できるパラーメータは以下の通りです。
Use separate noise multiplierだけどういう機能かよくわかりませんでした。
Inpaint mask blur | 修正した部分を周囲とどの程度馴染ませるか |
Inpaint denoising strength | マスク修正時のノイズ除去強度 |
Inpaint only masked | インペイントをマスクのみに適用 |
Use separate width/height | マスク内の解像度 |
Use separate steps | マスク部分の修正を何回行うか |
Use separate CFG scale | マスク部分に対するCFG scale |
Use separate checkpoint | マスク部分に使用するモデル |
Use separate VAE | マスク部分に使用するVAE |
Use separate sampler | マスク部分に使用するsampler |
Use separate noise multiplier | 不明 |
Use separate CLIP skip | マスク部分のCLIP skipを指定 |
Restore faces after ADetailer | ADetailerの後に顔を修正 ※自動でcodeformerやGFPGANがダウンロードされます |
なお、ControlNetのインペイントを併用すると、ADetailerで検出した部分とControlNetで塗ったマスクの部分を修正できます。
・ADetailerで検出された顔とControlNetのマスクで髪が修正されたもの
After Detailerの使い方まとめ
今回はAfter Detailerの使い方についてご紹介しました。
修正後のクオリティが高いため、一枚一枚丁寧に生成したい人にはわりと便利な機能かと思います。
img2imgのバッチ機能を使えばまとめて修正もできるので、作業効率化も可能です。
特定の部位を修正したり、画像のクオリティを求めたりしたい方は、ぜひ使ってみてください。