Stable Diffusion一人。二人、複数人になる対処法を解説

Stable Diffusionで一人のプロンプト1 girl,soloなどを指定しても

「どうしても1人にならない」

という問題は横長の画像を作るときによく遭遇するトラブルです。

最初の頃は悪戦苦闘して呪文(プロンプト)を変えても1人にならず時間を無駄にしたことがありました。

本記事をすべて読むと、このようなトラブルに遭遇したときの解決策が網羅的にわかるので、時間の節約になります。

逆に

  • 2人にしたいのに1人になる
  • もっと多くの人を表示したいのに、人が増えない…

といった複数人にする方法が知りたい場合は次の記事を参考にしてください。

一人の画像を表示するための4つの調整方法

画像内に人物を表示させるための調整方法を紹介します。以下の3つの方法を本記事では紹介します。

3つの調整方法
  1. Promptで制御する
    • 例: 1 girl, solo
  2. Negative Promptで制御する
    • 例: multiple girls
  3. 画像サイズの調整 (推奨)
  4. NEW: ControlNet OpenPoseを利用する (推奨)

方法1と2も効果はありますが、方法3の画像サイズの調整は再現性が高く、安定した結果が得られます。そのため、特に推奨します。

「画像サイズの調整」というと、正方形や縦長の画像しか考えられないかもしれませんが、実際は異なります。横長の画像においても、人物が中央に表示されやすいサイズやそうでないサイズがあります。

詳細については本記事を参考に調整方法を試してみてください。また、呪文(プロンプト)による調整も状況に応じて効果的な場合がありますので、合わせてご参考にしてください。

一人を表示するための呪文(プロンプト)一覧

今回は実際にAIアートのサイトなどで頻繁に使われている1人の画像にするための呪文(プロンプト)をピックアップしてみました。

呪文(プロンプト)説明
1girl1人の女の子
1 girl1人の女の子
woman女性
a woman女性(単数形の冠詞)
1 woman1人の女性
1 boy1人の男の子
1 man1人の男
a man男性(単数形の冠詞)
soloソロ
solo focusソロフォーカス
alone一人

複数人表示するための呪文(プロンプト)(今回はNegative Promptでの利用)

複数人表示するための呪文(プロンプト)は次のとおりです。今回は1人表示を目指しているのでこれらをNegative Promptに追加する検証を行うので、冒頭ですがここで紹介しておきます。

呪文(プロンプト)説明
2girls2人の女の子
3girls, …3人の女の子, …
2 girls2人の女の子
3 girls, …3人の女の子, …
mutiple girls複数の女の子
many girls多くの女の子

ちなみに定番呪文(プロンプト)についてはこちらの記事でまとめているので、他にも知りたい呪文(プロンプト)がある場合は参考にしてみてください。

呪文(プロンプト)を強調するテクニック

また、呪文(プロンプト)を強調するテクニックもまとめておきます。

呪文(プロンプト)強調のテクニック
  • 先にキーワードを書く
  • キーワードの強度を指定する
    • (solo: 1.2)

課題:幅が長い解像度だと2人になりやすい

渋谷でアイドルが写った写真(1人をメインにしたい)を解像度を1280✕640で画像を作成すると、結果として2人が映る画像になってしまいました。このときは単純な呪文(プロンプト)だと、1人が主役となる写真を作ることができませんでした。

Prompt: Photo of a Beautiful Japanese idol in Shibuya.

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,

4枚中、4枚が2人組の画像になってしまう…

解決策1: Promptで制御する方法の検証

1 girlsoloといった呪文(プロンプト)が頻繁に使用されているので、それらを試すことから始めました。

prompt: Photo of a Beautiful Japanese idol in Shibuya.1 girl,solo

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,

4枚中4枚でこんな感じでほとんど意味ないです。

優先したいキーワードを呪文(プロンプト)を先にする

呪文(プロンプト)の順番も関係したりすると考えて、優先したいキーワードを最初に配置して再度、試しました。

Prompt: 1 girl,solo,Photo of a Beautiful Japanese idol in Shibuya.

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,

4枚中1枚だけ上手く行きました。

でも他はあまり意味がなさそう。

結果を見ると先に書いたトークンのほうが強く評価されている気はします。

呪文(プロンプト)内のキーワードの強度を制御する

(keyword:強さ)みたいな呪文(プロンプト)を入力するとキーワードを強調できます。

つまり今回の場合だと(solo:1.1)とかみたいにすると強調されるので試してみます。

Prompt: (1girl:1.1),(solo:1.1),Photo of a Beautiful Japanese idol in Shibuya.

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,

4枚中4枚でこんな感じでほとんど意味ないです。

じゃあ、もっと数字を大きくするしかないと思って思い切って10にしました。

呪文(プロンプト)の強度の大きくしすぎには注意

Prompt: (1girl:10),(solo:10),Photo of a Beautiful Japanese idol in Shibuya.

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,

???

呪文(プロンプト)の強度を大きくしすぎると画像が破綻します笑。

強度は1~2ぐらいの範囲にしましょう

もう少し適度な値で試してみます。

Prompt: (1girl:1.5),(solo:1.5),Photo of a Beautiful Japanese idol in Shibuya.

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,

4枚中、4枚の結果です。強度を高めてもあまり効果はありませんでした。

呪文(プロンプト)の強度は複数キーワードをまとめて指定できる

複数のキーワードをまとめる書き方もできるので試してみます。

Prompt: (1girl,solo:1.5),Photo of a Beautiful Japanese idol in Shibuya.

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,

結果はあまり変わらず以下のような画像が生成されます。

solo focusaloneなど、他に思いついた呪文(プロンプト)も試してみましたが、結果はほとんど変わらなかったため、ここでは省略します。

解決策2: Negative Promptで制御する方法の検証

Negative Promptを用いて複数人を表示するための呪文(プロンプト)を用いて、制御する方法について考察しました。

Prompt: 1girl,solo,solo,focus,Photo of a Beautiful Japanese idol in Shibuya alone.

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,2girls,many girls,multiple girls

結果は変わらず…こんな感じの画像ばかりが生成されます。まさか一人で表示させるのがここまで難しいとは…(2回目)

解決策3: 画像サイズの調整

偶然にも発見したのですが、画像サイズを調整することで上手く行くことが確認できました。解像度を900✕640にしたら1人で画像が生成される確率が高くなりました。アスペクト比(縦横の比)が重要でこの周辺の解像度であれば1人で画像が生成されやすくなります。

Prompt: Photo of a Beautiful Japanese idol in Shibuya.

Negative Prompt: (worst_quality:2.0) low quality, blur ,deformed ugly, pixelated,

4枚中3枚成功。

つまりは、画像サイズの調整をしてみることが一番てっとり早いことがわかりました。

Outpaitingで引き伸ばす。

解像度を896✕640で上手く行きますが、それだと欲しい解像度の画像ではないという場合には、アウトペインティングで引き伸ばすことで解像度を調整するのが良いでしょう。

2人になりやすい解像度で1人の画像を生成する方法
  1. 1人になりやすい解像度(896✕640)で生成する。
  2. “Send to img2img”をクリックしてimg2imgタブに画像を送ります。
  3. img2imgのタブに切り替える
  4. 背景のみの呪文(プロンプト)を入力。
    • 例: Shibuya street
  5. メニュー最下部にあるScriptのセレクトボックスで”Poor man’s outpainting”を選択します。
    • この機能は最近のWeb UI(Auto1111)ではデフォルトで用意されています。
  6. その他の設定値は特に変えず実行してみます。
  7. 最後に切り抜いて欲しい解像度に調整。

元画像:

引き伸ばした画像

いくつか違和感がありますが、画像が引き伸ばされました。あとはこれを欲しい大きさに切り取れば完了です。

解決策4: ControlNet OpenPoseを利用する

ControlNet OpenPoseを利用することで1人の構図を作れます。次のようなポーズをOpen Pose Editorで作成してControlNetで制御します。

生成された画像は次の通りです。4枚中4枚が意図した構図になっているのでかなり精度は高いです。

まとめ

結論として、Stable Diffusionを用いて1人の画像を表示するための呪文(プロンプト)制御は難しいことが判明しました。一方で、画像サイズの指定は効果があるので、上手くいく解像度を見つけて、それをアウトペインティングで引き伸ばすことで解決するのが良いでしょう。

コメント