画像生成した人物がなかなか思い通りのポーズをとってくれなくて困ったことありませんか。
そんな時にはポーズを指定した手書きの画像をAIに読み込ませることで思い通りの画像が生成できるようになります。
Stable Diffusion webUIにControlNetを追加する方法を紹介します。
Stable DiffusionにControlNetを追加する
ポーズや構図を指定するためには[img2img]を使って、お手本になる画像を読み込ませる方法がよく知られています。
でも操作方法に不慣れだと結構苦労します。
そこで使えるのが、Stable Diffusionの拡張機能のControlNetです。
ControlNetは機能の詰め合わせのようなツールです。
導入したばかりのStable Diffusionには設定されていないため、オプションとして別途追加する必要があります。
その中のツールを使用することで苦労していたポーズや構図の指定が可能になります。
ControlNetを使用するためには下記の2種類をインストールする必要があります.
- sd-webui-controlnet:AUTOMATIC1111でControlNetを使用するための拡張機能
- 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ボタンをクリックすると、棒人間のポーズをもとにした人物画像が生成されました。
ポーズの確認が取れたらお好みのプロンプトやモデルを入力して生成すると出来上がりです。
軽率に掛けた「openpose_full」お前…!?
— 賢木イオ@スタジオ真榊 (@studiomasakaki) April 17, 2023
顔も手もポーズもがっつり抜けますですわ!? pic.twitter.com/Omtks7otz6
openpose人形v1.1
— キレネ・AIイラスト勉強中 (@Bloom_Cyrene) May 21, 2023
文字通り「手を加えて」ちゃんと読み込むかなー pic.twitter.com/1UeUt9mB0X
AI動画変換実験。stable diffusionのi2iでコントロールネットのopenposeだけかまして出力。 pic.twitter.com/Gxp4Iw936H
— KitaaanoYusuke (@kitanoyus) May 21, 2023
controlNETv1.1のopenpose-handをようやく触ってみたけど、親指が難しい。色が違うのかな? pic.twitter.com/wxwNmAEtGx
— キレネ・AIイラスト勉強中 (@Bloom_Cyrene) May 19, 2023
前に「openposeの棒人間、実はカラフルじゃなくてもそれなりに読み込んでくれる」説を見かけたの試してみた。
— キレネ・AIイラスト勉強中 (@Bloom_Cyrene) May 22, 2023
カラフルな棒人間を単色にするって逆行は初めてだから荒いけど、9割ほど出来てた pic.twitter.com/XEkprWICf9
おお。いちいち色分けしないでいいなら、OpenPoseの線を自分で弄る面倒さはかなり減るな。慣れたらランダムで指ガチャるより絶対早い。 https://t.co/IwQgQK01Ml
— 鎖城郎郭@AI錬成画師 (@sazyou_roukaku) May 20, 2023
中道をいく!openposeのkeypointでカラーとグレーの合せ技。頭、腕、脚の先端のみカラーにした場合の出力精度検証。プロンプトはカラーの時と同じ。
— nefuron@AIart (@nefuron_23) May 20, 2023
カラーとグレー:75%(12枚)
グレーでポーズ描いて、精度が欲しい部分の先端をカラーにすれば精度も得られて良い感じかも pic.twitter.com/smWEfSUD8A
(参考)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などの高性能なグラボがほしくなります。
画像生成に慣れてきたら環境改善を検討してみてください。
こんにちは、フルタニです。放送局で番組作りをしてました。 ControlNet を書きます。