PR

【Stable Diffusion】OpenPoseで思い通りのポーズを再現!

この記事は約7分で読めます。
記事内に広告が含まれています。
ラン
ラン

こんなポーズの絵を生成したいんだけど、できるかな…?

Openposeの元画像①
(画像引用:ぱくたそ)
るん
るん

OpenPoseでうまくいくかも!

Stable Diffusionで絵を生成するとき、思い通りのポーズにするのはかなり難しいですよね。

ポーズに関するプロンプトを使ってイメージに近づけることはできますが、プロンプトだけで指定するのが難しいポーズもあります。

そんなときに役立つのがOpenPoseです。こんな棒人間を見たことはありませんか?

OpenPoseの棒人間
「棒人間」で表現されたポーズ

OpenPoseを使うと、プロンプトだけでは表現が難しいポーズもかなり正確に再現できます。

この記事では、そんなOpenPoseの導入方法と使い方について解説します。

この記事はこんな人におすすめ
  • ポーズをできるだけ正確に再現したい
  • 「棒人間」や「OpenPose」はなんとなく知っているけど、詳しい使い方を知りたい

OpenPoseとは

OpenPoseは、人間の姿勢を、関節を線でつないだ棒人間のような骨格情報として表現します。Stable Diffusionでは、この姿勢情報をもとに画像を生成できます。

Openposeは姿勢推定の技術
OpenPoseを使った画像生成

これによって元画像のポーズをかなり正確に再現することができるのです。

Stable Diffusionでは、ControlNetと組み合わせることで、OpenPoseの姿勢情報を画像生成に利用できます。

冒頭に紹介した写真を元に、同じポーズの絵を生成するとこうなります。

Openposeで生成した画像
ラン
ラン

元画像とかなり近いポーズだね!

Openposeの元画像と生成画像の比較
元画像との比較

全体の姿勢だけではなく、手指や顔の向きもかなり正確に再現できていますね。
次はこのOpenPoseの導入方法と使い方について見ていきましょう。

OpenPoseの導入方法

ここからはStable Diffusion WebUI(AUTOMATIC1111)での操作方法を解説します。
まず、以下の流れでOpenPoseを導入していきます。

  1. ControlNetの拡張機能をインストールする
  2. OpenPoseのモデルをダウンロードする

1. ControlNetの拡張機能をインストール

まずは、ControlNetの拡張機能をインストールしていきます。
(すでにインストール済の方は読み飛ばしてOKです。)

① WebUIの「Extensions」タブを開く
② 「Install from URL」タブを開く
③ 「URL for extension’s git repository」に以下のURLを入力

https://github.com/Mikubill/sd-webui-controlnet.git

④ 「Install」をクリック

[Stable Diffusion WebUI] 拡張機能ControlNetをインストール

数秒待つと、インストールが完了し、Installボタンの下に「Installed into C:UsersxxxxStableDiffusionstable-diffusion-webuiextensionssd-webui-controlnet. Use Installed tab to restart.」のようなメッセージが表示されます。

次の手順で、ControlNetを有効化してUIを再スタートします。

① Extensionsの「Installed」タブに移動
② 「sd-webui-controlnet」にチェックが入っていることを確認
③ 「Apply and restart UI」をクリック
④ Stable Diffusion WebUIをいったん終了し、起動し直す

[Stable Diffusion WebUI] 拡張機能ControlNetを適用

txt2imgの中に、ControlNetという項目が表示されていればOKです。

[Stable Diffusion WebUI] ControlNetがインストールされたことを確認

2. OpenPoseのモデルをダウンロード

ここではStable Diffusion 1.5向けのControlNetモデル「control_v11p_sd15_openpose」を使用しています。現在は、使用するStable Diffusionモデルに対応したControlNetモデルを選ぶ必要があります。

ControlNetにはOpenPoseやCannyなどいくつかの機能があります。
そして、それぞれの機能に対応する「モデル」をダウンロードする必要があります。

ControlNetの各モデルは、下記の「Hugging Face」のページからダウンロードできます。

lllyasviel/ControlNet-v1-1 at main
We???re on a journey to advance and democratize artificial intelligence through open source and open science.

「.pth」や「.safetensors」などで終わるファイルがモデルファイルです。

今回はOpenPoseに対応している「control_v11p_sd15_openpose.pth」というファイルをダウンロードしてください。
ファイル名の横のダウンロードボタン「↓」を押すとダウンロードできます。(.yamlファイルはダウンロードする必要はありません。)

Hugging FaceからOpenposeのモデルをダウンロード
OpenPoseのモデルファイルをダウンロード

ダウンロードしたファイルは以下の場所に格納します。

Stability Matrixを使っている場合
 StabilityMatrix.exeと同フォルダにある「Data」フォルダ > Models > ControlNet

Stability Matrixを使っていない場合
 stable-diffusion-webui > extensions > sd-webui-controlnet > models

※環境や設定によって、ControlNetモデルの保存先が異なる場合があります。

るん
るん

これで準備OK!

OpenPoseの使い方

ではいよいよOpenPoseを使ってみましょう。

元画像を用意する

ポーズの参照元となる画像を用意します。
写真でもいいですし、イラストでも構いません。著作権には注意しましょう。
著作権を気にしない一番の方法は自分でそのポーズを取って写真に撮ることかもしれません。

Openposeの元画像①
元画像は写真でもイラストでもOK(著作権に注意)

この元画像はプリプロセッサで「棒人間」に変換されるので、生成したい画像と元画像の性別を一致させる必要もありません。
つまり、女性の絵を生成したいときに、元画像で男性の写真を使ってもOKということです。

Openposeの元画像は性別は気にしなくてよい
元画像の性別は気にしなくてもよい(画像引用:ぱくたそ)

複数人の認識をすることもできます。

Openposeは複数人も認識可能
複数の人物も認識できる(画像引用:ぱくたそ)

ControlNetを有効化する

txt2imgタブを開きます。

「ControlNet」の右端の◀ボタンを押して、メニューを開きます。

「Enable」にチェックを入れると、画像生成するときにControlNetが有効になります。
ControlNetを使わないときには、このチェックを忘れずに外してください。

[Stable Diffusion WebUI] ControlNetを有効化
ControlNetを使うときには「Enable」にチェックを入れる

Control Typeで「OpenPose」を選択する

「ここに画像をドロップ-または-クリックしてアップロード」のところに、元絵とする画像をアップロードします。

Openposeの元画像をアップロード
Openposeの元画像をアップロード

そして、
①Control Typeで「OpenPose」を選択します。
②本記事の環境では、Preprocessorが「openpose_full」、Modelが「control_v11p_sd15_openpose」に設定されます。

Control Typeで「OpenPose」を選択

ここで、②の「Preprocessor」(プリプロセッサ)に注目してみましょう。

プリプロセッサは、画像を解析して棒人間を抽出する役割を担います。
プルダウンを開いてみると6種類ほどあることがわかります。

ラン
ラン

…何が違うわけ?

るん
るん

棒人間として抽出する部位や手法の違いです。
「DWPose」という技術を使っているプリプロセッサがおすすめです

dw_openpose_fullオススメ。
全身+顔(表情)+手。「DW Pose」という技術を使っている最新のプリプロセッサ。
openpose全身
openpose_face全身+顔(表情)
openpose_faceonly顔(表情)のみ
openpose_full全身+顔(表情)+手
openpose_hand全身+手
プリプロセッサの種類
るん
るん

ということで、dw_openpose_fullを選択♪

あとは普通にプロンプトを入力して画像生成します。
プロンプトで表現が難しい場合もあると思いますが、可能な限りプロンプトは指定した方が思い通りのポーズになります。

ここでは以下のようなプロンプトを入力しました。

プロンプト

girl,brown hair, short hair, smile, white shirt, white background, index finger raised,

生成した画像がこちらです。かなり正確にポーズが再現されていますね。

Openposeで生成した画像

別の画像からOpenPoseで生成した画像も、参考として載せておきます。

Openposeの生成画像の例①
指はやはり難しい(元画像:ぱくたそ)
Openposeの生成画像の例②
プロンプトだけで難しいポーズもこの通り(元画像:ぱくたそ)
Openposeの生成画像の例③
表情を変えることもできる(元画像:ぱくたそ)

dw_openpose_fullでは手指も認識しています。
そのため、手指に関しても元画像に近くはなるのですが、やはり難易度は高く、うまくいかないことも多いです。

img2imgとの違い

ラン
ラン

img2imgでも同じようにできないの?

わざわざOpenPoseを使わなくてもimg2imgでうまくできないのかな?と思った人もいるかもしれませんね。

img2imgの場合、姿勢(ポーズ)だけではなくて、人物の輪郭やタッチ、色の情報も参考にしてしまうので、「ポーズは参考にしたいけど、キャラは全然別にしたい」というケースが結構難しいのです。

img2imgではポーズを維持したままプロンプトを反映させることが難しい
img2imgでは難しい

そのため、キャラの全体的な外見ではなく、ポーズだけを参考にしたいというケースはOpenPoseの方がうまくいきます。

まとめ

プロンプトだけで表現するのが難しいポーズは、ControlNetとOpenPoseを組み合わせるとよいでしょう。
写真やイラストの人物のポーズを参考にして画像生成できるので、かなり正確にポーズの再現が可能です。(ただし、手指に関してはなかなか難しいのが現状です)

ラン
ラン

これでまた一つ、思い通りの絵に近づいたぞー♪

るん
るん

Stable Diffusionには便利機能がたくさんあるので、適材適所で活用していきましょう!

プロフィール
この記事を書いた人
千鳥 るん | Chidori Run

AIイラスト制作から始まり、現在はVRChat向けのワールド制作・3D素材制作を中心に発信しています。

Unity、Blender、Substance 3D、UdonSharpなどを使いながら、怪異・ホラー・不穏な空間づくりの知見をまとめています。

BOOTHショップ「狐火工房」では、VRChat向けの3Dモデルや怪異演出素材を制作中。
「怪異ワールドを作りたい人が最初に頼れる場所」を目指して、素材と知恵を少しずつ積み上げています。

千鳥るんをフォローする
Stable Diffusion
スポンサーリンク
シェアする
千鳥るんをフォローする

コメント

  1. 下弦ノ月兎 より:

    初めまして。上記の記事に従って最後の操作まで行ってみましたが、「generate」を押しても画像が生成されません。また、下記のようなエラーが出てしまいました。

    ゲーミングPCを使用している為、GPUメモリーが足りないという事はないと思いますが、対処法が分からないので、可能でしたら対処方法を教えて頂けますと幸いです。宜しくお願いいたします。

    OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 4.00 GiB total capacity; 3.40 GiB already allocated; 0 bytes free; 3.46 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
    Time taken: 10.8 sec.

    A: 3.40 GB, R: 3.46 GB, Sys: 4.0/4 GB (100.0%)

    • 千鳥 るん | Chidori Run 千鳥 るん | Chidori Run より:

      コメントありがとうございます。
      エラーメッセージを見る限りでは「メモリ不足」のエラーが発生したようです。
      (「OutOfMemoryError」はメモリ不足のエラーです)

      「…(GPU 0; 4.00 GiB total capacity;…」とありますので、VRAM(グラフィックボードのメモリ)は4GBだと思われます。
      Stable Diffusion WebUIは4GBでも動作しますがかなりギリギリのメモリですので、まずは下記の記事で対策を試していただくことをオススメします。
      どうぞよろしくお願いいたします。

      https://runrunsketch.net/sd-memory-optimize/