「ADetailer」で手や表情を修正【ControlNet&拡張機能講座#27】|Stable Diffusion
Stable diffusionの「ControlNET&拡張機能講座」第27回目。今回は「Deforum」を使って、手や表情を修正する方法です。これまでInpaintで苦労して修正していたのを、ある程度自動化してくれます。「AnimateDiff」で併用することもできますね。
ただあまり大きな期待もしないほうがいいとは思います。
そんなわけで、さっと説明していきましょう。前回の「「Deforum」の動画作成方法」は以下のリンクから。
「Adetailer」のインストール
「Stable diffusion」を起動し、「Extensions」タブ→「Install from URL」タブに移動し、「URL for extension’s git repository」に、
https://github.com/Bing-su/adetailer.git
を張り付けて、「Install」ボタンをクリックします。しばらく待つと「Install」ボタンの下の方にいろいろ文字が出てきてインストール終了。
つぎに「Extensions」タブ→「Installed」タブで「Apply and restart UI」 ボタンをクリックして再起動します。これでインストール完了です。
「ADetailer」の使い方
Txt2ImgでもImg2Imgでもいいですが、下のほうに「ADetailer」が追加されます。一番上の「ADetailer」の文字の左にチェックマークを入れれば使用可能になります。
つぎに、下に「1st」~「4th」までのタブ欄がありますが、4つまで設定できるということですね。「Enable this tab」にチェックを入れることで、そのタブの内容が実行されます。
モデルの選択
最初の項目「Select a model to use for detection.」では、使用するモデルを選びます。
いろいろありますが、基本的に使うものは
顔修正「face_yolov8n.pt」「face_yolov8s.pt」
手修正「hand_yolov8n.pt」
になります。よくわからなければ、デフォルトのままでいいでしょう。
他のものは、
人物修正「person_yolov8n-seg.pt」「person_yolov8s-seg.pt」
顔修正(実写)「mediapipe_face_full」「mediapipe_face_short」「mediapipe_face_mesh」
目の修正「mediapipe_face_mesh_eyes_only」
がありますが、無視しておいてもかまいません。
とりあえずデフォルト(face_yolov8n.pt)のままで、「ADetailer」を有効にした場合とそうでない場合で比較してみるのがいいでしょう。
まず「ADetailer」無しで、適当に「1girl」とかで生成した画像です。
まあ、べつにいい気もしますが、次に「ADetailer」を有効にしてやってみます。シード値を固定するのをお忘れなく。
「ADetailer」を有効にした結果がこちら。
実写だとちょっと変になりますね。実写はモデルで「mediapipe_face」の方を使うのがいいかもしれません。
結果はともかく、とりあえずこのように自動的に顔を検出して、書き換えてくれます。生成時に顔を検出しているのがわかるとは思います。そのため生成に時間がかかりますね。最初から使うよりも、修正したいときだけ使うという使い方のほうがいいとは思います。
せっかくなのでイラストでもやってみましょう。
左が元画像、右が「ADetailer」有効の画像です。
デフォルトの「face_yolov8n.pt」モデルですが、顔だけでなく指も直してくれていますね。そこそこ効果があるのがわかるとは思います。
「顔と手のモデルを併用したい」のであれば、タブの「1st」「2nd」でそれぞれモデルを設定してやればいいでしょう。たとえば「1st」に「face_yolov8n.pt」、「2nd」に「hand_yolov8n.pt」を設定するなどですね。
プロンプトの記述
次に、ピンポイントで修正したい部分を指示する方法です。
モデル選択の下に、プロンプト(上)とネガティブプロンプト(下)を書き込める欄がありますので、ここに修正内容を書き込んでいきます。
先ほどの画像をそのまま流用し、プロンプトに「angry」(怒る)と書いた結果がこちら。
とにかくこんな感じで、Inpantのような部分的な書き換えを手軽に行えます。
検出閾値の設定
下の方の「Detection」を開くと、検出の閾値を設定できます。どれだけ厳密に顔とかを検出するかですね。
デフォルトでは「0.3」になっているので、けっこうゆるい検出です。「顔っぽいもの」を顔と認識しているという感じですね。
この数値を上げると、かなり厳密に顔でないと修正をおこなわないようになります。顔じゃないものを顔と認識されたときは、この値を上げればいいでしょう。逆に全然検出しないというときは下げればいいです。
まとめ
そんなわけで、そこそこ顔も手も修正してくれます。
時間がかかるので、まず普通に画像をつくって、気に入らなければシード値を固定してから「ADetailer」を有効にするのがいいとは思いますね。
「AnimateDiff」で動画作成をするときに、「ADetailer」を有効にしておくと、手や顔が崩れにくくなります。
まあ、動画作成自体が時間がかかりますしね。
そんなわけでまた次回の講座でお会いしましょう。