今回は、手の補正に関する方法を網羅して、ご紹介します。これらの方法は限られた状況では、実際に効果的ですが、万能ではありません。
にも関わらず多くの解説記事では成功例ばかりが強調され、効果が曖昧にされていることが多いです。それらの記事を鵜呑みにして、結果として多くの時間を無駄にしてしまいました。
でも、安心してください。この記事では、どの方法がどんな状況で役立つのか、そしてどんなときには効果が薄いのか、全部お伝えします。そう、正直に、隠さずに。貴重な時間を無駄にしないために。
メソッド | おすすめ度 |
---|---|
呪文(プロンプト)による制御 | ○ |
embeddingsによる制御 | ◎ |
LoRAによる補正 | ☓ |
ADetailerによる修正 | △ |
ControlNetと深度(Depth)による制御 | ☓ |
ControlNetとOpenPoseによる制御 | ☓ |
呪文(プロンプト)による制御
呪文(プロンプト)を指定することで手の崩れを防ぐ方法です。主にネガティブ呪文(プロンプト)への指定になります。効果についてですが、そこまで高くはないですが、これらを指定して悪くなることも少ないので指定しておいて損はないでしょう。
手の補正に関する呪文(プロンプト)は次の通りです。
five fingers
deformed hand
extra_fingers
bad fingers
missing fingers
fewer digits,extra digit
liquid fingers
embeddingsによる制御
次はembeddingsによる制御です。もっともメジャーな手の補正に関するbadhandv4
で検証してみます。

まずはbadhandv4を使わずに下記の呪文(プロンプト)で画像を生成してみます。
school uniform,Photo of Japanese girl.peace sign hand
EasyNegative



次にbadhandv4を使ってみます。
school uniform,Photo of Japanese girl.peace sign hand
EasyNegative,badhandv4



多少マシになる気がします。なぜだか、指だけではなく、顔の補正がされてて、入れておいて損はなさそうです。
bad-hands-5についても試してみます。

school uniform,Photo of Japanese girl.peace sign hand
EasyNegative,bad-hands-5



これも多少マシになる気がします。個人的にはbadhandv4
のほうが綺麗な気がします。
LoRAによる補正
次はLoRAによる補正を試してみます。ピースサインのLoRAがあったので試してみます。

school uniform,Photo of Japanese girl.peace sign hand <lora:lora-dim8-peace_deliberate_v2:0.8>
EasyNegative



LoRAで品質が悪化しているので強度を調整してみます。
school uniform,Photo of Japanese girl.peace sign hand <lora:lora-dim8-peace_deliberate_v2:0.4>



LoRAによる補正はあまりおすすめしません。
ADetailerによる修正
拡張機能のADetailerを使った方法です。使い方についてはこちらを確認してください。
ADetailerの設定は次の通りです。

ADetailerで手を補正した結果は次の通りです。何も適用してない場合と比べてほとんど代わらないです。



ControlNetと深度(Depth)による制御
ControlNetを使った方法です。もしControlNetをインストールしてない場合は、次の記事を参考にインストールとDepthモデルのダウンロードを済ませてください。ただし、この手法はあまり効果が高くないので一旦、結果を確認することをおすすめします。
Depth Libraryを使って深度マップを作成します。深度マップとは画像の奥行きを表す画像のことです。ControlNetでは、深度を強制しながら画像を生成することができるのでそれによって手の構造に従って画像を生成するというアプローチになります。
深度マップの編集にはDepth Libraryという拡張機能が必要です。なのでDepth Libraryをインストールしてない場合はインストールしてください。レポジトリはhttps://github.com/jexom/sd-webui-depth-libです。

“txt2img”の画面に戻って作成した深度マップをControlNetのタブを開いて、作成した深度マップ画像をセットします。またControl TypeをDepthに選択して、Preprocessorは不要なのでnoneを設定します。最後にStarting Control Stepを0.45にすることでControlNetによる制御のスタート位置を開始45%の位置に設定します。

Depth Libraryによる制御を利用して生成された画像が次の通りです。

あまり制御が上手くいってないです。深度マップの作成は手間です。手間の割に精度が低いので深度マップを利用したControlNetによる制御はあまりおすすめしません。
ControlNetとOpenPoseによる制御
次はOpenPoseによる手法です。ControlNetがインストールされていることとOpenPoseモデルをダウンロードされている必要があります。もしそうでない場合は以下の記事を参考に準備を済ませてください。
加えてsd-webui-OpenPose-editorという拡張機能を使うので追加してください。
これで準備は可能です。
それではOpenPoseによる制御を解説します。OpenPoseによる制御はポーズを指定しControlNetによって、そのポーズによる制限を加えた状態で画像を作成する方法です。ポーズには手の構造を含めることができるので、それによって手の形を制御するのが本手法です。
まずは”txt2img”タブのControlNetの設定タブを開きます。そして画像をセットして、以下の手順でOpenPoseでポーズの抽出を行いOpen Pose Editorの編集画面を開きます。

次に抽出したポーズを編集して正しいポーズに調整してみます。
- 不足している手の関節を追加して正しい位置に編集します。
- ControlNetにポーズを送信してポーズをセットします。

ControlNetの開始するタイミングを調整してみます。今回は最初の方に設定したいので0.25に設定しました。また、ControlNetのルールをもっと強くしたいのでControlNet is more importantを選択します。

結果ですがイマイチでした。ポーズの調整はかなり手間がかかります。にもかかわらず、結果の精度はあまり高くないのでこの方法もあまりおすすめはしません。

コメント
embeddingsとADetailerの同時使用がいいかもしれませんね
コメントいただきありがとうございます。