ダンスや運動の最中など躍動感のある絵を描きたい。
でもStableDiffusionで複雑なポーズを試したら、体が捻じれて化け物みたいに…
かと言ってプロンプトだけで複雑な指定を行うのは不可能に近い…
そんな時でも、ControlNetの機能を使えば簡単に解決することができます。
今回はOpenPoseという機能を使って、複雑なポーズの画像を生成する方法について紹介します。
結果
・元絵と同じポーズで画像を生成することが可能
・元絵の顔の大きさや手首から先の状態に合わせてPreprocessorを選ぶと良い。
・商用利用する際には確認と注意が必要
この記事を読むと
画像から生成した棒人間に合わせた絵を、自動で生成する方法が理解できます。
※記事内に広告が含まれています。
ポーズを他画像に合わせる方法
OpenPoseはControlNetで使える代表的な拡張機能の一つです。
写真や絵から骨格を抽出し、その位置情報をもとに絵を再構築する技術です。
人が理解しやすくするために線で繋いで、棒人間として視覚化されています。。
そのため、人物の写真や絵から棒人間は生成可能ですが、風景等の人が描画されていない画像からは生成が不可能となっています。
人間が見つからなかったためか、Openposeを指定したのにLineartのような絵が出力されました。
もし自分で棒人間を弄って、好きなポーズを取らせたい場合は下記を参考にしてください。
Editorを使うことで自由に、さらにこの記事で読み取った棒人間の情報をベースに変更することも可能です。
インストール
ControlNetがインストールされていれば、その中にすでに含まれています。
ただしControlNetをインストールしただけではモデルは古い可能性があるので、専用のモデルをダウンロードする必要があります。
ここでいうモデルは絵の学習モデルではなく、Openpose用のモデルになります。
以下のHuggingFaceから、ダウンロードできます。
https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main
今回は「Openpose」を使いたいので、「control_openpose-fp16.safetensors」をダウンロードします。
これらのモデルは、ControlNetの下の部分で選択するモデルになります。
ダウンロードしたファイルは自身がインストールしたフォルダから、「stable-diffusion-webui > extensions > sd-webui-controlnet > models」のフォルダに保存します。
これでインストールは完了です。
設定 棒人間の画像を自動保存
デフォルトの設定では、『OpenPose』実行時に描画された棒人間の画像は保存されません。
後からポーズ指定で使いたいと思っても、再度棒人間を生成するのは面倒ですよね。
設定を変えるだけで自動保存が可能になるので、是非実行前に設定しておいてください。
1. 「Setting」タブの「ControlNet」を開きます。
2. 「Allow detectmap auto saving」にチェックを付ける。
3. 保存先を変えたい場合は「Directory for detected maps auto saving」を変更します。
4. 設定完了後は、画面上の「Apply setting」をクリックして設定を適用します。
5. 「Reload UI」をクリックして再起動させれば準備完了です。
【検証】実際に連続実行してみた
準備
元となるポーズの画像を用意します。
今回は下記のような右手を上げている画像を元画像とします。
出来るだけ手足がどのようになっているか、どの向きに向いているかが分かる画像の方が良いです。
次にプロンプトを用意します。
まずは簡単に、女性であることを示すプロンプトだけを用意します。
プロンプト
masterpiece, front shot, beautifully painted, girl, young,20 years old, long hair
ネガティブプロンプト
flat color, flat shading, nsfw, retro style, poor quality, bad face, bad fingers, bad anatomy, missing fingers, low res
Control.netは下記のように設定します。
1. imageに棒人間を作りたい(ポーズの元になる)絵を追加します。
2. 「Enable」と「Pixcel Perfect」にチェックを入れる。
3. ControlTypeで「OpenPose」を選択します。
4. Preprocessorで「openpose_full」を選択します。
基本は「openpose_full」で良いですが、後述する商標利用を考えている場合は「dw_openpose_full」を使うことをお勧めします
出力結果
実際に実行すると下記のような棒人間が生成されます。
実際に元となった画像に重ねると下記のようになります。
目の位置や手首から先の位置がしっかりと反映されていますね。
それを元に作成した画像が下記になります。
腕の角度や顔の位置、左手の位置などが棒人間の同じ位置で出力されているのが分かります。
各パラメータ違いによる出力結果比較
Control Weight
ControlNetの影響力の設定値になります。
そのため0.3という低い数値では、右手の位置が下がってしまっています。
逆に大きくしすぎてしまうと画像が崩壊してきます。
1.8の画像では手首から先がおかしくなっています。
値は棒人間のポーズと離れてれば1から上げていく。
逆にポーズは出来ているが絵として違和感がある場合は下げていきましょう。
Starting Control Step
ControlNetの効果をステップ全体のどの範囲から効かせ始めるかの値です。
0からの場合ノイズ除去の初めから効いていますが、1に近づくとほとんどのステップでControlnetの影響がなくなります。
そのため下記の1.0の画像ではOpenposeで指定した棒人間のポーズからかけ離れた画像となっています。
基本的に0から値を変える必要はありません。
どうしてもControlnetの影響が強く出てしまい、絵が破綻する場合は上げていきましょう。
Ending Control Step
ControlNetの効果をステップ全体のどの範囲まで効かせるかの値です。
1の場合ノイズ除去の最後まで効いていますが、0に近づくとほとんどのステップでControlnetの影響がなくなります。
そのため下記の0の画像ではOpenposeで指定した棒人間のポーズからかけ離れた画像となっています。
基本的に1から値を変える必要はありません。
どうしてもControlnetの影響が強く出てしまい、絵が破綻する場合は下げていきましょう。
Preprocessor違いによる出力結果比較
none
Openposeでの棒人間を作成していないので、全く関係ない画像が生成されました。
dw_openpose_full
体だけでなく、顔の表情までを取得します。
手足や顔の表情まで、取得した棒人間と同じになっています。
しかし顔が小さい場合など上手く出力されない場合もあるので、キャンパス全体に対して顔の比率を見て使用すると良いでしょう。
openpose
一番スタンダードな棒人間の画像です。
手首から先の情報がないため、画像によって様々な角度になっています。
逆に服装に合わせた手首の位置にしてくれるので、手が破綻した絵は少なくなります。
openpose_face
微妙に分かりにくいですが、スタンダードなopenposeに追加で白い点が打たれています(左上)
顔の位置をより強調するので、より正確に元絵の構図に近くなります。
openpose_faceonly
顔の位置だけを抽出したものになります。
そのため顔の位置は元絵と同じ位置ですが、他の構図はバラバラの画像が出力されました。
openpose_full
デフォルトで使用している「Preprocessor」になります。
手首から先や顔の位置も情報として持っているため、より元絵に近い構図で出力されます。
openpose_hand
スタンダードなOpenposeに手首から先の情報を追加した画像です。
ライセンス・商用利用について
元々OpenPoseの機能はCMU社が公開していた機能を指すことが多く、こちらの機能は商用利用する場合は有償のライセンスを購入する必要がありました。
ですがControlNet内の『OpenPose』のProccerの一つである「dw_openpose_full」
こちらに関してはDW Poseという技術を使用しており、Apache License 2.0(無償・無制限で商用利用可能なライセンス)となっています。
そのため商用利用を考えている方は「dw_openpose_full」を使用するようにしましょう。
ただしApache License 2.0のライセンス条項では、「商標の使用不可」とあり商用利用全てが許されているわけではないので、商用の際は一度自分でご確認ください。
OpenPoseと3D OpenPoseの比較
OpenPoseと3D OpenPoseでどちらを使用するとよいか、結果に差異があるか等は下記ブログにまとめてありますので、良ければご覧ください。
出力結果による比較
機能や使いやすさによる比較
まとめ
今回は「Openpose」の機能を用いて、棒人間から画像を生成する方法について紹介しました。
改めて3行でまとめると…
・元絵と同じポーズで画像を生成することが可能
・元絵の顔の大きさや手首から先の状態に合わせてPreprocessorを選ぶと良い。
・商用利用する際には確認と注意が必要
複雑なポーズ言葉で説明するのは難しいですよね。
言葉にできないとプロンプトにすることはできません。
たとえうまく言葉に表したとしても、それがStableDiffusionで上手く再現できるかは別の問題。
そういった時に1枚の写真か画像があれば、そこから再現が可能なOpenPoseを使うことで、躍動感のある絵を簡単に作ることができます。
是非OpenPoseを利用して躍動感のある絵をたくさん描いてみてください。
StableDiffusionにお勧めのグラボ
ここまでの記事を読んでStableDiffusionを始めてみたいと思ったけど、どれを買ったか良いか分からない人向けに私の使っているグラボを紹介します。
私が使用しているグラボはNVIDIA GeForce RTX3060 搭載 グラフィックボード GDDR6 12GBになります。
StableDiffusionで絵を生成するときは、PCのCPUやメモリよりもグラボの性能が重要です。
StableDiffusionではVRAMが12GB以上であることが推奨されていますが、普通のゲーム用のグラボでは8GBのものが多いです。
経験上、一回のプロンプトで一発で望みの絵が出ることは少なく、10枚ぐらい出力してそこから近づけていく作業をします。
しかしVRAMが低いと1枚を生成する時間が長くなってしまいます(完全にVRAM依存ではないですが)
1枚の生成する時間が長いと、最終的なゴールまでの時間も多くかかってしまうので、推奨要領である12GBのグラボを買うことをお勧めします。
VRAMが低い=一度に計算できる数が少ない=生成速度が遅い
そのため解像度の高い絵を生成するのに時間がかかるだけでなく、生成できない可能性もあります(2GBや4GBなど)
Controlnet等、拡張機能を複数使用する場合やLora等の学習を行う場合は、より顕著にVRAMの差が出ます。
そのため単純にAIで出力してみたい。というだけでなく、その一歩先で色々やってみたい方は是非12GB以上を購入してみてください。
ちょっと試すだけなら、下記のような無料AI画像生成サービスを使うのも良いです。
コメント