見出し画像

Stable Diffusionでポーズを固定する方法(Depth編)

Stable DiffusionのDepth機能は画像の深度情報を利用して、プロンプトの補助などに利用できます。
人物のポーズなどを固定できるのが便利です。

手順解説

具体的な処理は以下の通りです。

  1. 参考画像から深度マップを生成

  2. 深度マップとプロンプトで画像を生成

  3. 画像の完成

1の工程はPreprocessorという部分の処理になります。コントロールネットはそのまま2に渡してくれるので、ユーザーとしては1回の作業で完成します。

しかし実際はなかなかうまく行きません。参考画像には背景、服や髪などの情報が含まれていますので、不要な要素も取り込んで深度マップを作成してしまいます。

色々と試してみた結果、本来はコントロールネットで行われる1の工程を手動で行い、深度マップを作成してから画像を生成すると再現度が高くなりました。
具体的には、コントロールネットのdepthに深度マップを貼り付けて、Preprocessorをオフにします。つまり1の工程を飛ばしてるわけです。

実践

それではどのように深度マップを作るかと言うと、まずポーズに特化した画像を生成します。

髪は邪魔になるので(bald), 服も邪魔なのでビキニを着てもらいます。背景も邪魔なのでblack backgroundとしておきます。

((cowboy shot)), 1girl,
(bald), (bikini), slender,
emotion_happy, pose_saluting,
black background, masterpiece,

深度マップの作成は色々ありますが、私は下記のサイトを利用しました。ログインが必要ですが、深度マップの作成は記事執筆時点では無料のようです。

この手順で再現したのが以下の画像です。

左の画像をまず生成し、それを元に深度マップを生成します。
真ん中の深度マップとプロンプトで生成した画像が右の画像です。
品質系や水着の柄などのプロンプトは入れていますが、ポーズのプロンプトはhair flipのみで、standingすら入れていません。


実践2: ジャンプ

深度マップの足のあたりがわかりにくくなっていますので若干ばらつきはありますが、ほぼ再現できました。
プロンプトに「jumping」だけ加えた状態ではエラーになったので、「Girl frolicking in the sea」と追加すると生成できました。

実践3: 女の子座り

女の子座り(ぺたんこ座り)は鬼門です。調べたところ「wariza」「 butterfly sitting,」などで効くようですが、モデルによっては全然効きません。
同じプロンプトを2つのモデルで試してみました。効いたのはSDXL系の人気モデル、効かなかったのはPony系の人気モデルです。

((fullbody shot)), 1girl, (casual), slender,
wariza, black background, masterpiece,
効いたパターン
全く効かないパターン

よく効くモデルで画像を生成し、深度マップを作成した上で、全く効かないモデルで生成してみました。
プロンプトには「 sitting, seiza, wariza, arms between legs, 」などと入れて試してみたところ…

全然ダメです。構図は近くても膝から下が違います。

Control Weightを1.3まで上げてみたところ、3/4で成功しました。しかしその後また失敗しているので偶然なのかもしれません。

まとめ

  • 深度マップを作成するためには、不要な情報が入っていないポーズ特化の画像を用意する

  • 深度マップを作成し、PreprocessorをオフにしてDepthを実行することで、高い精度でポーズの再現が可能

  • 深度マップがあっても、モデルが知らないキーワードには反応しにくい。

追記

この記事を書いた後、実践していく中で気付いたことがあります。
まず、深度マップを別で作成する意味はあまりなさそうです。
Preprocessorをオフにするのではなく、ポーズ画像(坊主画像)をそのままコントロールネットに渡し、Preprocessorをオンにして実行しても結果は変わらないようです。
とはいえ、通常のイラストからDepthを使ってポーズを再現する場合は髪や服などが邪魔になって上手く再現できません。やはりポーズ画像を作る意味は大きいです。

さらに、メリットについて気付いたことがあります。
2Dのモデルは、やや頭部を大きく描く傾向にあります。ポーズによっては気になる場合があります。
一方で2.5Dや3Dのモデルは頭身が適切になります。
つまり、2.5Dのモデルでポーズを作成してから、2DのモデルとDepthを使うことにより、イラストの顔デカい問題が解消できるかもしれません。

また、ポーズ画像があるとプロンプトを簡略化できます。
1の工程ではポーズが重要なのでキャラクターの外見や背景、照明などのプロンプトは不要です。
2の工程では逆にポーズのプロンプトを省くことができます。
プロンプトが長くなるとタグの反応が悪くなりますが、工程を分けることでプロンプトを簡略化でき、全体としてクオリティーの高い画像生成が可能になります。

もしご意見がありましたら、X(Twitter)まで頂けると幸いです。


いいなと思ったら応援しよう!