こんにちは!悠です!
今回は「Stable Diffusion」で、生成したAIイラストの手や指を簡単に修復できる拡張機能「Depth map library and poser」の使い方について紹介していきます。
この拡張機能はControlNetと連動して機能するため、まだ未導入の方は下記の記事を参考にして導入しておいてください。

なおこの存在は知っていたけれど、あまり上手くいかなくて結局消してしまった方もいらっしゃるのではないでしょうか。
今回は通常あまり言及されていない設定方法を活用して、比較的成功率の高い修正方法を紹介していくので、諦めてしまった方もぜひもう一度試してみてください!
「Depth map library and poser」とは?
拡張機能「Depth map library and poser」は、ControlNetのモデルの1つであるdepthを使って、あらかじめ用意された下記のような手の画像を生成したAIイラストに上書きし、その他の部分を変えずに手や指だけを修正できる拡張機能です。
顔も構図も完璧なのに、手だけが残念でお蔵入りにしてしまったイラストを蘇らせることができますよ!
参考画像を貼っておきます。
【手の修正前】
【拡張機能で修正】
「Depth map library and poser」の導入方法
Google Colaboratory版の場合
下記の方法で紹介している「maintained by Akaibu」のノートブックを使って、拡張機能「Depth map library and poser」を導入していきます。
まだご覧になっていない方は、まず最初にこちらを準備しておいてください。


Google Driveからモデルデータを読み込むセルの下に新しくセルを作成し、下記のコードを入力してください。
#Depth libraryをインストール
%cd /content/stable-diffusion-webui/extensions/
!git clone https://github.com/jexom/sd-webui-depth-lib /content/stable-diffusion-webui/extensions/sd-webui-depth-lib
%cd /content/stable-diffusion-webui
WebUIを起動し、Depth Libraryのタブが追加されていれば導入成功です。
ローカル版の場合
「Extensions」→「Install from URL」の「URL for extension’s git repository」に下記のURLを入力しInstallをクリックしましょう。
https://github.com/jexom/sd-webui-depth-lib
「Depth map library and poser」の使い方
修正する手の画像を生成
ではまず最初に、修正に使う手の画像を作成していきます。
Depth Libraryのタブを開き、Add background imageをクリックして手を修正したい画像を選択します。
WidthとHeightを選択した画像サイズと同じものに設定してください。
Handsタブの中から自分の好きな手の画像を選び、右のSelectedの欄に選んだ手の画像が表示されたらオレンジ色のAddをクリックします。
AIイラストの上に手の画像が表示されるので、修正したい位置に合わせてSave PNGをクリックしてください。
なおhandsタブにある画像は左手だけしかありませんが、手の画像をつまんで反転させれば右手として扱えます(下図)。
下のようなPNG画像がダウンロードされていれば準備OKです。なお全角の()が画像の名前に使われている場合は半角に直してください。
txt2imgタブで手を修正する
img2imgを使うよりもおすすめのやり方です。
手を修正したい画像をPNG Infoに入れ、Send to txt2imgをクリックして作成した時と同じプロンプト、Seed値、サンプラーを設定します。
この状態でもう一度Generateをクリックすれば、PNG infoに入れた画像と全く同じ画像が出力されます。
txt2imgタブにあるControlNetの項目を開きEnableにチェックを入れ、Imageのタブに上の項で生成した手のPNG画像をドラッグアンドドロップした後、PreprocessorをNone、Modelをcontrol_depthに設定します。
次が一番大事です。Control WeightとStarting Control Stepを変更していきます。
Starting Control Stepの値を0から上げることで、AIイラストの生成にControlNetが作用するタイミングを遅らせることができます。
この項目をサンプリングステップの数に応じて変更することで、目に見えてdepthの効き目が上がるようなんですね。(参考記事)(Redditの該当記事)
Control Weightは0.9~1.2付近、Starting Control Stepはサンプリングステップの数が20なら0.19、30なら0.3あたりがいいようです。
これでGenerateボタンをクリックすれば、手の部分だけを修正した画像を出力することができます。(微妙に細部が変わることもあります。)
img2imgタブで手を修正する
私が試した感じ、こちらは微妙です。上手く修正できないことがあります。
img2imgのタブでの使い方は、修正したい画像をドラッグアンドドロップした後は、txt2imgタブの時と全く同じです。
唯一、Denoising Strengthだけ別途設定する必要があります。
高画質化の際は0.3くらいがおすすめですが、今回のような手の修正を行う場合は0.5以上じゃないとほぼ効果がない印象があります。
ただ0.6を超えると、高確率で修正したい箇所以外の部分、例えば顔や服装、ポーズや構図まで変化します。
inpaintで手を修正する
生成した手の深度マップはinpaintでも使用することができます。txt2imgやimg2imgで上手くいかない場合でも、inpaintならすんなり1発で成功する可能性もあるのでぜひ試してみてください。
なお、「inpaintって何?」という方は下の記事をご覧ください。

まず手を修正したい画像をinpaintタブにドラッグアンドドロップし、作成した時と同じプロンプトを入力します。Denoising strengthは0.75あたりがおすすめです。
修正したい領域をinpaint内のペイントツールで黒く塗りつぶしてください。
ControlNetの項目を開きEnableにチェックを入れ、Imageのタブに手の深度マップをドラッグアンドドロップした後、PreprocessorをNone、Modelをcontrol_v11f1p_sd15_depthに設定します。
これで設定は完了です。Generateボタンを押してください。
上手く手が修正できない時の対処法
上で紹介したtxt2imgタブの修正を行っても、うまく手の画像が反映されなかったり、反映はされるものの色が変(下の画像)な時があります。
こういったときはステップ数を増やす、Control WeightやStarting Control Stepの値を変えてみるといったことを試してみてください。
ただそれでも状況が改善しないときは、あきらめて手の画像を別のものに変更した方が良いです。
例えばピースサインは全く反映されないけれど、握りこぶしに変えたらすんなり上手くいくというようなことがよくあります。
まとめ
以上が「Stable Diffusion」で、生成したAIイラストの手や指を簡単に修復できる拡張機能「Depth map library and poser」の使い方でした。
完璧ではありませんが、Inpaintでガチャをするより高確率で手や指の修正ができるので、ぜひ皆さんも試してみてくださいね!
では、ここまで読んでいただきありがとうございました。
コメント
いつも参考にさせていただいてます。
「手を修正したい画像をPNG Infoに入れ、Send to txt2imgをクリックして作成した時と同じプロンプト、Seed値、サンプラーを設定します。」
について質問があります。
3D Openpose Editorで棒人間を作成し、text2img ControlNet Openposeで画像を作成しました。その画像の手を修正するためにDepth Libraryで手を作成してtext2img ControlNet Depthに送信しました。この際に元画像の作成に使用した棒人間が消え、作成時と全く同じ情報を入力することが出来ませんでした。
このような場合、手を修正するにはどうしているか教えていただきたいです。
コメントありがとうございます!
openposeとdepthを同時に使う場合は、Multi ControlNetを有効化しておく必要があります。されていますでしょうか?
https://yuuyuublog.org/multicontrolnet/
まだの場合は、上の記事で有効化のやり方を紹介しています!
Multi ControlNetを有効にしたら解決しました!ありがとうございます!