Stable Diffusion生成画像の姿勢(ポーズ)を変える ControlNet の使い方

フルタニ

こんにちは、フルタニです。放送局で番組作りをしてました。 ControlNet を書きます。

画像生成した人物がなかなか思い通りのポーズをとってくれなくて困ったことありませんか。

そんな時にはポーズを指定した手書きの画像をAIに読み込ませることで思い通りの画像が生成できるようになります。

Stable Diffusion webUIにControlNetを追加する方法を紹介します。

Stable DiffusionにControlNetを追加する

ポーズや構図を指定するためには[img2img]を使って、お手本になる画像を読み込ませる方法がよく知られています。

でも操作方法に不慣れだと結構苦労します。

そこで使えるのが、Stable Diffusionの拡張機能のControlNetです。

ControlNetは機能の詰め合わせのようなツールです。

導入したばかりのStable Diffusionには設定されていないため、オプションとして別途追加する必要があります。

その中のツールを使用することで苦労していたポーズや構図の指定が可能になります。

ControlNetを使用するためには下記の2種類をインストールする必要があります.

  1. sd-webui-controlnet:AUTOMATIC1111でControlNetを使用するための拡張機能
  2. ControlNet:モデル本体

Stable Diffusionの設定については下記の別記事を参考にしてください。

ControlNetを使用するための拡張機能を導入します。

導入する拡張機能はhttps://github.com/Mikubill/sd-webui-controlnet.gitです。

下記のように,[Extensions] > [Install from URL]でURLを入力し,[Install]をクリックしてください。

ンストールが完了すると[Extensions] > [Installed]に”sd-webui-controlnet”が追加されます。

また、下記のようにControlNetのプルダウンメニューが作成されてます。

ここまでの作業でStable DiffusionにControlNetの機能を追加することができました。

わかりやすくいうと、ここまででできたのはタンスの引き出しを追加したようなもの。

引き出しの中身を入れることで拡張機能が使えるようになります。

次に、この中に実際に使用するツールである「ControlNetのモデル」を入れていきます。

ControlNetのモデルを追加する

ControlNetのモデルはlllyasviel/ControlNet at mainからダウンロードします。

/path/to/stable-diffusion-webui/extensions/sd-webui-controlnet/models

にダウンロードしたモデルを貼り付けします。

次に再起動もしくは更新ボタンをクリックします。

すると,下記のように”Model”にControlNetが反映されます。

ControlNetの使い方

姿勢の素材となる人物画像を用意します。

Stable Diffusion webUIからControlNetをクリックします。

「Enable」をチェックします。※チェックし忘れるとControlNetが有効化されません。

素材となる人物画像を「ここに画像をドロップ」と書かれた枠にドラッグ&ドロップします。

”Preprocessor”と”Model”をOpenPoseに設定します。

次に”Preview annotator result”をクリックすると線画のプレビューが表示されます。

”Generate”をクリックし,画像を生成します。

するとプレビュー画面に生成した画像と、「棒人間」画像が表示されます。

この「棒人間の画像」をダウンロードしておきます。

ControlNetを再起動して、「ここに画像をドロップ」と書かれた枠に「棒人間の画像」ドラッグ&ドロップします。

”Preprocessor”はnone、”Model”はOpenPoseに設定します。

generateボタンをクリックすると、棒人間のポーズをもとにした人物画像が生成されました。

ポーズの確認が取れたらお好みのプロンプトやモデルを入力して生成すると出来上がりです。

(参考)ControlNetのモデル

ControlNetの一覧の中で、現在使用できるモデルは下記の8種類です。

姿勢に関する拡張機能はopenposeです。

  • canny 元画像から線画を生成し,その線画から新たに画像を生成します
  • depth 画像から奥行きを読み取り奥行きが重要な構図の画像生成を行います
  • hed 線画から画像を生成します
  • mlsd 背景や構図に使用します
  • normal 元画像を法線マップに変換し奥行きのある画像生成を行います
  • openpose 画像から人体のパーツを認識し、姿勢が制御された画像を生成します
  • scribble 手書きのような画像から新たな画像を生成します
  • seg

生成する画像の姿勢をコントロールしたい時に使えるのがOpenPoseです。

OpenPoseは,画像から人体,顔,手足のキーポイントを検出して、手足をカラフルな線に抽象化して、棒人間のようなものを作成します。

棒のようにすることでポーズだけを再現することができるので、線画(cannyやhed)よりも元画像をすばやくAIに認識させることができ、より柔軟な画像を生成できます。

Canny, HED, Depthでは元画像の服装が生成後の画像に影響を及ぼしているのに対して,OpenPoseはポーズのみが生成した画像に反映されます。

チュートリアル動画

まとめ

ControlNetを使用する場合、マシンの動きが遅く感じることありませんか。

ControlNetは、通常のStable Diffusionと比べてGPUの使用率が上るため,RTX4080 16GBなどの高性能なグラボがほしくなります。

画像生成に慣れてきたら環境改善を検討してみてください。