Stable Diffusion ControlNetで姿勢を指定する|OpenPoseの使い方と手順

※本記事にはプロモーション(広告・アフィリエイトリンク)を含みます。
人物を生成するたびにポーズがバラバラになって使いづらい、という問題はControlNetのOpenPoseで解決できます。参照写真・スケルトン画像・3Dエディタの3通りの入力方法があり、設定値の意味を理解すれば再現性の高いワークフローが組めます。この記事ではSD WebUIへのインストールから各設定値の調整まで、手順を追って解説します。
ControlNetとOpenPoseの役割
ControlNetは、Stable Diffusionの生成プロセスに「構造的な条件」を加える拡張機能です。エッジ・深度・骨格といった特徴マップを条件信号として与えることで、プロンプトだけでは制御しにくい形状や姿勢を画像に反映させます。
OpenPoseは人体の関節座標(キーポイント)を検出するアルゴリズムです。体・顔・手の位置を色付きの点と線で表した「スケルトン画像」を出力し、ControlNetはこれを条件信号として利用します。
ControlNetのプリプロセッサは用途によって選びます。
| プリプロセッサ | 検出対象 | 主な用途 |
|---|---|---|
| openpose | 体のみ(18点) | 全身ポーズ・処理が軽い |
| openpose_face | 体+顔 | 表情も一致させたい場合 |
| openpose_hand | 体+手 | 手のポーズを正確に再現 |
| openpose_full | 体+顔+手 | 情報量が最も多い |
| openpose_faceonly | 顔のみ | 表情だけを参照させたい場合 |
迷ったときは openpose_full を選んでおくと情報量として損はありません。処理速度が気になる場合は openpose(体のみ)に落とすのが一般的な判断です。
インストールと必要なモデルの準備
拡張機能のインストール
SD WebUIの「Extensions」タブ→「Install from URL」に以下を入力してインストールします(執筆時点のURLです。公式リポジトリで最新版を確認してください)。
https://github.com/Mikubill/sd-webui-controlnet
インストール後、「Installed」タブで有効になっていることを確認し、「Apply and restart UI」を押してWebUIを再起動します。
ControlNetモデルのダウンロード
拡張機能とは別に、推論用のモデルファイルが必要です。Hugging Faceから取得します。
| ベースモデル | ファイル名(例) | Hugging Faceリポジトリ |
|---|---|---|
| SD 1.5 | control_v11p_sd15_openpose.safetensors | lllyasviel/ControlNet-v1-1 |
| SDXL | control-lora-openposeXL2-rank256.safetensors | thibaud/controlnet-openpose-sdxl-1.0 |
ダウンロードしたファイルは以下のディレクトリに配置します。
stable-diffusion-webui/extensions/sd-webui-controlnet/models/
配置場所は環境によって異なります。「Settings」→「ControlNet」→「Model Directory」で確認・変更できます。WebUIを再起動するとモデルがプルダウンに表示されます。
3つの姿勢入力方法
方法1:参照写真からスケルトンを自動抽出
素材写真を用意するだけで使える、最も手軽な方法です。
- txt2imgページを開き、「ControlNet Unit 0」アコーディオンを展開する
- 参照写真をアップロードエリアにドロップする
- 「Enable」にチェックを入れる
- Preprocessorを
openpose_fullに設定する - Modelを
control_v11p_sd15_openpose(または環境に合うモデル)に設定する - 生成ボタン横の👁アイコンを押すと、抽出されたスケルトンを事前に確認できる
参照写真の人物のポーズが新しい画像に転写されます。顔・体型・服装は変わるため、「ポーズだけを転写する」イメージで使います。
方法2:スケルトン画像を直接入力
あらかじめ用意したOpenPoseスケルトン画像(PNG)をそのまま入力する方法です。Preprocessorを none に設定することで、骨格検出の処理を省略して高速に実行できます。スケルトンの形を自分で調整してから入力できるのも利点です。
スケルトン画像はOpenPoseEditorなどのWebツールや、後述のControlNet内蔵3Dエディタから書き出せます。
方法3:3Dエディタでポーズを組む
ControlNet拡張には3D OpenPoseエディタが組み込まれています。「3D OpenPose」タブを開き、ボーンをマウスでドラッグしてポーズを調整します。写真素材がなくても任意のポーズを1から作れるのがメリットです。
ポーズが完成したら「Send to txt2img」または「Send to ControlNet」ボタンで転送します。拡張のバージョンによってUIの表記が異なる場合があります。
設定値と調整の考え方
Control Weight: 1.0 ← ポーズ追従の強さ(0〜2の範囲)
Starting Control Step: 0.0 ← 生成の何割目からControlNetを効かせるか
Ending Control Step: 1.0 ← 生成の何割目まで効かせるか
Preprocessor Resolution: 512 ← ControlNet内部の処理解像度
Resize Mode: Crop and Resize
Control Weightは0.7〜1.0が一般的な調整範囲です。下げすぎるとポーズが崩れ、上げすぎると全体のディテールが平坦になる傾向があります。
Ending Control Stepを0.5〜0.7に下げると、生成の後半はプロンプトが主導するため、ポーズの大枠を保ちつつ細部の質感が自然になる場合があります。ただしサンプラーやステップ数によって結果は変わるため、実際の生成で確認してください。
Preprocessor Resolutionは、生成サイズが512×512なら512、768以上なら768〜1024に上げると検出精度が上がる傾向があります。
よくあるエラーと対処
「No ControlNet model found」と表示される
モデルファイルの配置場所が合っていない可能性があります。「Settings」→「ControlNet」でモデルパスを確認し、WebUIを再起動してください。
スケルトンがうまく検出されない
入力画像の解像度が低い場合に起きやすいです。Preprocessor Resolutionを上げるか、より解像度の高い参照画像を使ってください。背景が複雑な写真では誤検出が起きることもあります。
手や指が崩れる
openpose(体のみ)では手の検出がありません。openpose_full または openpose_hand に切り替えてください。複数のControlNet Unitを使える環境では、ポーズ用のUnitとは別に「Depth」や「Lineart」を追加して手のディテールを補強する方法もあります。
VRAMが足りなくなる
ControlNetはベースモデルに加えてVRAMを消費します。「Settings」→「ControlNet」で「Model CPU Offload」を有効にすると、処理中以外はCPUメモリに退避します。速度は落ちますが、VRAMの逼迫を回避できます。
SD 1.5用モデルをSDXLで使うとエラーになる
ベースモデルとControlNetモデルのアーキテクチャが合っていないと動きません。SDXLで生成するときはXL対応モデル(例:control-lora-openposeXL2)を選択してください。
まとめ
ControlNetのOpenPoseで姿勢を指定するには、①拡張機能のインストール、②ベースモデルに合うOpenPoseモデルの配置、③入力方法の選択(参照写真・スケルトン・3Dエディタ)、④Control Weightなどのパラメータ調整、という流れになります。
まず手元の写真を参照に openpose_full でスケルトンを抽出し、👁アイコンのプレビューで骨格が正しく検出されているかを確認してから生成してみてください。スケルトンが正確に取れていれば、そのポーズで安定して画像が出力されます。再現性が確認できたら、複数Unitの組み合わせやEnding Control Stepの調整へと応用の幅を広げられます。
この記事で触れたもの
- Stable Diffusion 解説書楽天で探す
よくある質問
ControlNetを使うとVRAMの消費はどのくらい増えますか?
モデルの規模によりますが、SD 1.5用のOpenPoseモデルは数百MB〜1GB程度のVRAMを追加で消費します。VRAMが逼迫する場合はControlNet設定の「Model CPU Offload」を有効にすることで、処理中以外はCPUメモリに退避して回避できます。
SDXLでもControlNet OpenPoseは使えますか?
使えます。ただしSD 1.5用とは別にXL対応モデル(control-lora-openposeXL2-rank256など)が必要です。SD 1.5用モデルとアーキテクチャが異なるため、SDXLで生成するときは必ずXL対応モデルを選択してください。
ControlNetを複数同時に有効にすることはできますか?
SD WebUIのControlNet拡張は複数Unit(Unit 0・Unit 1など)を同時に有効にできます。OpenPoseでポーズを固定しつつ、DepthやLineartを別Unitで追加するといった組み合わせが実用的な使い方です。