PR

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

この記事は約9分で読めます。
らん
らん

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

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

OpenPoseでうまくいくかも!

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

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

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

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

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

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

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

OpenPoseとは

OpenPoseは、画像に写っている人間の姿勢を推定する技術です。

人間の姿勢を、関節を線でつないだ棒人間として表現し、そこから画像を生成します。

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

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

Stable Diffusionでは、ControlNetという機能群の一つとして提供されています。

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

Openposeで生成した画像
らん
らん

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

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

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

OpenPoseの導入方法

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

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

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をインストール
拡張機能ControlNetをインストール

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

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

① Extensionsの「Installed」タブに移動
② 「sd-webui-controlnet」にチェックが入っていることを確認
③ 「Apply and restart UI」をクリック

[Stable Diffusion WebUI] 拡張機能ControlNetを適用
ControlNetを適用してUIを再起動

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

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

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

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」で終わるファイルがモデルファイルです。

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

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

ダウンロードしたファイルは「stable-diffusion-webui > extensions > sd-webui-controlnet > models」に格納します。

Openposeのモデルの格納先
モデルファイルの格納先
るん
るん

これで準備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」に設定されると思います。
もしModelがNoneのままになってしまうときは、右にある「リフレッシュボタン」を押してから、再びOpenPoseを選択してください。

Control Typeで「OpenPose」を選択

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

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

らん
らん

…何が違うわけ?

るん
るん

棒人間として抽出する部位や手法の違いです。
商用利用可能で最新バージョンのdw_openpose_fullがおすすめです

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

この中では、dw_openpose_fullがおすすめです。最新のプリプロセッサであることも理由ですが、商用利用可能なライセンスだからです。

るん
るん

ということで、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の方がうまくいきます。

OpenPoseのライセンス

最後にOpenPoseのライセンスについて述べておきます。

筆者は法律の専門家ではないため、以下の情報は参考にとどめてください。
商用利用の際には、ご自身でしっかりとライセンスを確認いただくようお願いいたします。

dw_openpose_fullでは、DW Poseという技術を使っており、これはApache License 2.0(アパッチ ライセンス)というライセンスで提供されています。
これは無償・無制限で商用利用可能なライセンスです。

DW Poseのライセンス

一方、dw_openpose_full以外のプリプロセッサについては、商用利用する際に有料となる別のライセンスが適用される可能性があります(はっきりとした確証が得られませんでした)。

そのため、商用利用を考えているならば、dw_openpose_fullを使った方がよい、というのが私の見解です。

るん
るん

dw_openpose_fullは優れたプリプロセッサなので、個人利用であってもオススメです

なお、「Checkpoint」はまた別のライセンスになりますので、そちらについては下記の記事を参考にしてください。

まとめ

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

らん
らん

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

るん
るん

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

そのほかのControlNetの機能についてはこちらもご覧ください。

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

画像生成AIで思い通りのイラストを描くためのノウハウを試行錯誤で模索しています。IT企業でAI戦略に関わっていたこともあるAIエンジニアです。大学生の頃から趣味でイラストを描いていましたが、仕事が忙しくなり一旦筆を置きました。最近、NovelAIと出会ってまたお絵描きへの情熱を取り戻しています。

千鳥るんをフォローする
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/