Stable Diffusionで手や指を崩さずに出力する方法修正する拡張機能もご紹介

Stable Diffusionを利用して画像を出力する際に、人物の手や指が崩れており、せっかく好みの画像が生成できたのにもかかわらず、台無しになってしまうことがあります。

今回PROMPTYでは、Stable Diffusionにある拡張機能やEmbeddingを使って、手や指をきれいに出力する方法をいくつかご紹介します。

Stable Diffusionで手・指を崩さずに出力する方法3つを比較

方法①:ネガティブプロンプトを工夫する

ネガティブプロンプトの例

画像を生成する際に、ネガティブプロンプトに、「bad fingers」, 「bad hands」, 「missing fingers」などの文を入れます。拡張機能などに比べると効果は薄目ですが、これを入力するだけで改善する場合があります。

実際に使用してみる

今回は実際に、女性の画像を生成して、検証してみます。使用するモデルは「Basil_mix」です。詳細設定は以下の通りです。

Sampling method:Euler a
Sampling steps:20
Width:512
Height:512
Batch count:1
Batch size:1
CFG Scale:7
Seed:-1
Script:None

プロンプト:

masterpiece,high quality,1girl,black long hair,black eyes,wallpaper

ネガティブプロンプト:

bad fingers,bad hands,missing fingers

ネガティブプロンプトなしの場合

上記のプロンプトはそのままに、ネガティブプロンプトを一切入力せずに画像を生成してみます。

右手の形状が若干おかしい画像が生成されてしまいました。

ネガティブプロンプトありの場合

上記の画像で使用したプロンプトのほかに、手の形状に関するネガティブプロンプトを入力してみます。

問題なく画像を生成することが出来ました。

方法②:手・指を修正する拡張機能「depth library」を導入する

次に、手の形を修正する拡張機能である「depth library」を導入してみます。導入するためには、ControlNetが必要になるので事前に導入しておきましょう。

導入方法

Extensionsの欄に以下のURLを入力するだけで簡単に導入することが出来ます。入力するURLは以下の通りです。

https://github.com/jexom/sd-webui-depth-lib

入力したらInstallのボタンを押します。これで導入は完了です。

実際に使用してみる

導入が完了したら、タブに「Depth Library」の欄が追加されます。

今回は上で生成した画像を使用して、画像を修正してみます。

修正したい手の深度マップを作成する

まずは、修正したい手の深度マップを作成します。「depth library」タブから「Add backgroud image」をクリックし、修正したい画像を選びましょう。

次に、「Depth Maps」の欄から、理想の手の形を選択します。

「Add」ボタンを押すと、手が表示されるので、これを画像の形に合わせて調整します。

手の形を調整して、以下の画像のようになりました。

「Save PNG」を押して、手の画像を保存します。

これで手の深度マップが出来ました。

作成した深度マップを用いて画像を修正してみる

次に、作成した深度マップを基に画像を修正してみます。まず、修正したい画像の通りの詳細設定とプロンプトを入力します。次に、ControlNet上に手の深度マップをアップロードします。

上で入手した画像のメタデータと同じ設定にして、ControlNetを「Enable」,Modelを「control_v11f1p_sd15_depth_fp16 [4b72d323]」に設定して画像を修正してみます。

生成画像

元の画像の雰囲気を損なうことなく、手を修正することが出来ました。

方法③:手・指の修正を行うEmbeddingを導入する

ControlNetを使用せずに、手・指の形がおかしく出力されてしまうのを防ぐ手段の一つとして、手の形状に関するEmbeddingを導入する方法があります。

ここでは、「bad_prompt_Version2」「bad-hands-5」「EasyNegativeV2」を使用して比較してみます。

Embeddingの導入方法

まずはEmbeddingの導入方法を解説します。

Embeddingをダウンロードする

今回使用するEmbeddingを以下のリンクからダウンロードします。

「bad_prompt_Version2」

https://civitai.com/models/55700/badprompt-negative-embedding

「bad-hands-5」

https://huggingface.co/yesyeahvh/bad-hands-5/tree/main

「EasyNegativeV2」

https://civitai.com/models/7808/easynegative

ダウンロードしたファイルを指定のディレクトリに保存する

ダウンロードしたファイルをEmbeddingディレクトリ内に移動します。

これで準備は完了です。

実際に使用してみる

今回は実際に、これらのEmbeddingを使用して、検証してみます。

使いたいEmbeddingを、ネガティブプロンプトの欄に入力するだけで使用することが出来ます。

詳細設定は以下の通りです。

Sampling method:Euler a
Sampling steps:20
Width:512
Height:512
Batch count:1
Batch size:1
CFG Scale:7
Seed:-1
Script:None

「bad_prompt_Version2」を使用して画像を生成してみる

プロンプト:

masterpiece,high quality,(hands),1girl,black long hair,black eyes,wallpaper, 

ネガティブプロンプト:

 bad_prompt_version2,bad hands,nsfw

生成画像

「bad-hands-5」を使用して画像を生成してみる

プロンプト:

masterpiece,high quality,(hands),1girl,black long hair,black eyes,wallpaper, 

ネガティブプロンプト:

 bad-hands-5,bad hands,nsfw 

生成画像

「EasyNegativeV2」を使用して画像を生成する

プロンプト:

masterpiece,high quality,(hands),1girl,black long hair,black eyes,wallpaper,

ネガティブプロンプト:

EasyNegativeV2,bad hands,nsfw 

生成画像

Embeddingを用いて生成した画像を比較してみる

比較用に、手・指の形状に着目してみます。

「bad_prompt_version2」と「EasyNegativeV2」は若干手の形状がおかしくなってしまっています。一方で、「bad-hands-5」は、他の2つのEmbeddingと比較すると手・指の形状は綺麗に出力されています。

~Stable Diffusionで素早く画像生成するには~

Stable Diffusionの画像生成スピードや画像サイズは、グラフィックボード(GPU)の性能によって大きく変わります。

このため、より効率的かつ快適な画像生成を望むユーザーにとって、最適なグラフィックボードの選択が重要となります。

推論処理やLoRAなどの追加学習処理といった大量の計算を効率よく行うためには、12GB以上のVRAMを持つグラフィックボードを選ぶことを強くおすすめします。

2GBや4GBのVRAMを持つグラフィックボードでは、学習プロセスや高解像度の画像生成に支障が出る可能性が高いです。

コスパを重視する方は、RTX 3060を選ぶと良いでしょう。

このグラフィックボードを使えば、Stable Diffusionの画像生成機能を最大限に活用することが可能となります。