🦊Detailer
始まり、小さすぎる顔の修正
Stable Diffusion(1.5)で上手く生成できるのは今のところ512px ~ 768px近辺ですが、仮に人の全身絵を生成したとき、そのうち顔の部分のサイズはせいぜい30 ~ 50pxほどしかありません
顔に割り当てられる解像度が小さすぎるのも問題ですが、画像全体に対してあまりにも小さすぎるためAIさんも手が震えて上手く顔を描けません
震えあがれ、全AIよ

じゃあ、顔の部分だけ切り抜いて拡大→inpaintingで修正した後、大きさを戻して元の画像に合成したらいいんじゃない?と生まれたのが(After)
Detailerという手法です
処理の軽減
細部の修正ならば、画像をアップスケールして顔の部分だけ
inpaintingするというのも良さそうですが何が違うのでしょうか?
inpaintingはマスクの大きさに関係なく、元の画像のサイズで計算の量が決まってしまいます
Detailerは対象範囲をクロップしてinpaintingするので、計算量を節約できます
顔以外もできる
Detectorが検出するものを変えればよいだけなので、顔に限らず手やアクセサリーなど、なんでもできます
前提知識
🐣基本形
🟨Detector
CLIPSeg + SAMの形
🟩Detailer(SEGS)
基本デフォルトのままでいいです
guide_size
SEGSの高さor幅の小さい方を、guide_sizeの大きさになるように拡大します
もともとこのサイズ以上の時はなにもしない
guide_size_for
(bbox or crop_region)
SEGSのサイズを拡大する際、どこの値を基準にするかを指定する
bbox
Detector(CLIPSeg, YOLO etc.)が検出したBBOXをそのまま使う
crop_region
BBOXが画面端に出来てしまった時、画面端とは反対側にBBOXがズレてしまう
そのため少し余白を加えることでズレを吸収する(多分)
max_size
例えばSEGSが100 × 10のような極端に細長い形をしていた場合、短い方をguide_sizeになるように拡大してしまうと大きくなりすぎてしまう(e.g. guide_sizeが384だった場合 3840 × 384になる)
それを防ぐために制限をかける
🚨入力されたSEGSが最初からguide_size以上だった場合は、仮にmax_size以上だったとしても縮小されずにimage2imageします
noise_mask
よくわかりません
基本enabledの方が良い結果になる
force_inpaint
disabledのとき
SEGSがguide_sizeよりもともと大きかった場合、inpaintされずにそのまま素通りする
enabledならば関係なくinpaintする
wildcard spec
ここに何かプロンプトを入れると、positive promptが無視されてこれに上書きされる
e.g. {Japan|France|India|Brazil} girl
cycle
多分ltdrdataさん肝いりの機能
処理(image2image)を繰り返す
一気に強いdenoiseを書けるよりも弱いdenoiseで複数回かけた方が自然な仕上がりになるかもしれない
1回目と2回目とn回目とでそれぞれdenoise等のパラメータを変更することもできる
→
inpaint_model
noise_mask_feather
マスクの周囲をぼかす
今のところComfyUIはマスクの中間値を扱えないはずなので多分意味がない
inpantされた部分だけの出力など、ちょっと便利な出力が増えます
便利なので今後はDebugの方を使っていきます
"Face"と名前についてますが顔以外も関係なく使えます
セグメンテーションの作成もこのノード内で行ってしまうため、紹介したHQ-SAMや手書きマスクを転用する方法は使えません
応用が効かないのと、なにより巨大すぎるので個人的には非推奨です
