ControlNet完全ガイド|ポーズ指定・構図制御で思い通りの画像を生成

controlnet-advanced Uncategorized

ControlNetが解決する課題

通常のStable Diffusion生成では、プロンプトだけでポーズや構図を精密に指定することは困難です。特に以下のような要求に対して、期待通りの結果を得るのは難しい状況でした。

  • 特定のポーズを正確に再現したい
  • 参考画像と同じ構図で別のキャラクターを生成したい
  • 建物の輪郭を保ちながらスタイルを変更したい
  • 奥行き情報を維持したまま別のシーンに変換したい

ControlNetは、これらの課題を解決し、画像生成プロセスに追加の制御信号を与えることで、プロンプトだけでは実現できない精密なコントロールを可能にします。

ControlNetの概要

仕組み

ControlNetは、Stable Diffusionの拡散プロセスに「条件画像」を追加入力として与える技術です。

基本的なフロー:
1. 参照画像を用意
2. Preprocessor(前処理)で制御情報を抽出(エッジ、ポーズ、深度など)
3. ControlNetモデルがこの情報をStable Diffusionに注入
4. プロンプトと制御情報の両方に基づいて画像生成

参考: Diffusionモデルとは?で、拡散モデルの基本的な仕組みを解説しています。

主要なControlNetモデル

モデル 用途 抽出情報
OpenPose 人物のポーズ制御 骨格・関節位置
Canny エッジ・輪郭制御 境界線
Depth 奥行き・立体感制御 深度マップ
Normal 表面の向き制御 法線マップ
Scribble ラフスケッチから生成 手描き線画
Segmentation 領域分割 セマンティックマップ
Lineart 線画から生成 クリーンな線画
SoftEdge ソフトなエッジ検出 HEDアルゴリズム

ControlNetの導入・セットアップ

Automatic1111での導入

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

Automatic1111起動
  → Extensions
  → Install from URL
  → URL: https://github.com/Mikubill/sd-webui-controlnet.git
  → Install
  → Restart UI

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

Hugging Faceから必要なモデルをダウンロード:

# 保存先: stable-diffusion-webui/extensions/sd-webui-controlnet/models/
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_openpose.pth
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_canny.pth
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11f1p_sd15_depth.pth

ComfyUIでの導入

ComfyUIでは、ControlNetがデフォルトでサポートされています。

モデル配置:

ComfyUI/models/controlnet/

必要なカスタムノード:

cd ComfyUI/custom_nodes
git clone https://github.com/Fannovel16/comfyui_controlnet_aux.git

詳細: ComfyUI完全ガイドで、ノードベースのワークフロー構築方法を解説しています。

主要モデルの使い分け

1. OpenPose(ポーズ制御)

用途: 人物のポーズを正確に再現

使用例:
– ダンス・スポーツのポーズ再現
– 複数人物の配置制御
– キャラクターイラストのポーズ指定

実践手順(Automatic1111):

  1. ControlNetセクションを展開
  2. Enableにチェック
  3. 参照画像をアップロード(ポーズを真似したい画像)
  4. Preprocessor: openpose_full(手・顔も検出)またはopenpose(体のみ)
  5. Model: control_v11p_sd15_openpose
  6. Weight: 0.8-1.2(ポーズの忠実度)
  7. プロンプト入力 & Generate

Tips:
– 手の精度を上げるならopenpose_fullまたはopenpose_hand
– 顔の表情も制御したいならopenpose_faceを追加で使用
– Weightを上げすぎると元画像の特徴が残りやすい(0.9-1.0が推奨)

2. Canny(エッジ制御)

用途: 輪郭・境界線を保ったまま画像を変換

使用例:
– 建物の構造を維持したままスタイル変更
– 写真をアニメ風に変換(構図維持)
– ロゴやアイコンのバリエーション生成

実践手順:

  1. Preprocessor: canny
  2. Model: control_v11p_sd15_canny
  3. Threshold設定(Preprocessor Resolution):
    – Low Threshold: 100(細かいエッジを検出)
    – High Threshold: 200(主要なエッジのみ)
  4. Weight: 0.7-1.0

Tips:
– Thresholdを下げる → 細部まで再現、ノイジー
– Thresholdを上げる → 主要構造のみ、シンプル
– 写真→イラスト変換にはLow:50, High:100が効果的

3. Depth(奥行き制御)

用途: 3D的な奥行き情報を維持

使用例:
– 室内シーンの構造を保ったままリデザイン
– 風景写真の季節・時間帯変更
– 3Dレンダリングから2Dイラスト生成

実践手順:

  1. Preprocessor: depth_midas(汎用)またはdepth_leres(高精度)
  2. Model: control_v11f1p_sd15_depth
  3. Weight: 0.5-0.8(深度の影響度)

Tips:
– MiDaSは高速だが精度は標準
– LeResは高精度だが処理が重い
– 屋内シーンではLeResが推奨
– Weightを下げると創造性が増すが構造が崩れやすい

4. Normal(法線マップ制御)

用途: 表面の凹凸・向きを制御

使用例:
– 彫刻・レリーフのディテール保持
– キャラクターの筋肉や布のしわを再現
– 照明変更時の立体感維持

実践手順:

  1. Preprocessor: normal_bae
  2. Model: control_v11p_sd15_normalbae
  3. Weight: 0.6-1.0

DepthとNormalの使い分け:
Depth: 全体的な奥行き・距離関係
Normal: 表面の細かい凹凸・質感

5. Scribble/Lineart(スケッチから生成)

用途: 手描きラフから完成イラストを生成

使用例:
– ラフスケッチの自動着色・ディテール追加
– 簡単な線画からプロ品質のイラスト生成

実践手順(Scribble):

  1. 白背景に黒線でラフを描く
  2. Preprocessor: scribble_pidinet(既存画像から)またはnone(直接スケッチ)
  3. Model: control_v11p_sd15_scribble
  4. Weight: 0.8-1.2

実践手順(Lineart):

  1. Preprocessor: lineart_anime(アニメ風)またはlineart_realistic(リアル風)
  2. Model: control_v11p_sd15_lineart

Tips:
– Scribbleは大雑把なラフでもOK
– Lineartはクリーンな線画が必要
– アニメキャラ生成にはlineart_animeが最適

【独自データ】プリプロセッサ別・最適な使い分け早見表

ControlNetには10種類以上のプリプロセッサがあり、「どれをいつ使えばいいか」が分かりにくいのが初心者の悩みです。用途・入力画像の種類・期待する結果を軸に整理した早見表を用意しました。

プリプロセッサ 対応モデル 最適な入力画像 期待できる結果 Control Weight目安 注意点
openpose openpose 人物の写真・イラスト 体のポーズのみ再現(顔・手は不問) 0.8〜1.0 手や顔の精度は低い。顔・手も制御したいなら openpose_full
openpose_full openpose 人物の写真(手・顔が見える) 体・手・顔の表情まで再現 0.9〜1.2 処理が重い。参照画像の手が不明瞭だと誤検出
openpose_hand openpose 手のアップ写真 手の形状を正確に再現 0.8〜1.0 ADetailerと併用すると更に精度UP
canny canny 写真・線画・デザイン 境界線・輪郭を保持したまま変換 0.7〜1.0 Threshold次第で細部が変わる(写真→アニメはLow:50, High:100)
softedge_hed softedge 写真(輪郭を柔らかくしたい) Cannyより柔らかい自然な輪郭変換 0.6〜0.9 Cannyより保持度が低い分、創造性が増す
lineart_realistic lineart 線画・イラスト クリーンな線画を保持して着色・変換 0.8〜1.2 既存の線画を活かしたい場合に最適
lineart_anime lineart アニメ風イラスト・線画 アニメ線画の特徴を保持して変換 0.8〜1.2 リアル写真には向かない
scribble_pidinet scribble ラフスケッチ・手描き ラフの構造を保ちながら完成画像を生成 0.8〜1.2 精度より雰囲気重視。細部は生成AIに任せる
depth_midas depth 風景・室内・人物写真 奥行き情報を保持したまま変換 0.5〜0.8 高速だが精度は標準
depth_leres depth 建築・室内(精度重視) 高精度な奥行き保持 0.5〜0.8 処理が重い。屋内・建築パースに推奨
normal_bae normalbae 人物・オブジェクト(質感重視) 表面の凹凸・質感を保持 0.6〜1.0 Depthと組み合わせると立体感+質感を同時制御できる
seg_ofade20k segmentation 風景・複雑なシーン 領域(空・木・建物など)を分けて制御 0.6〜0.9 領域内の詳細はプロンプトに依存
none(Reference Only) reference 雰囲気・スタイルを参照したい任意の画像 参照画像の色調・スタイルを反映 0.5〜0.8 構図は変わるがスタイルは引き継ぐ。Style Transferに便利

シナリオ別おすすめプリプロセッサ組み合わせ:

シナリオ Unit 0 Unit 1 補足
人物ポーズを正確に再現 openpose_full(Weight: 1.0) ADetailerと併用で顔・手も修正
写真→アニメ風変換 softedge_hed(Weight: 0.8) cannyより自然な変換になりやすい
構図+奥行きを同時制御 openpose(Weight: 1.0) depth_midas(Weight: 0.6) 人物ポーズ+背景の奥行きを両立
線画を高品質イラストに lineart_anime(Weight: 1.0) 線画はクリーンなものを使用
建築パースのスタイル変換 canny(Weight: 0.8) depth_leres(Weight: 0.6) 構造+奥行きの両方を保持
ラフから商品デザイン scribble_pidinet(Weight: 1.0) CFG Scale 8〜10で構造を強調

実践的なテクニック

1. 複数ControlNetの同時使用

より精密な制御のため、複数のControlNetを組み合わせます。

: ポーズ + 深度を同時制御

  1. ControlNet Unit 0:
    – Preprocessor: openpose
    – Model: control_v11p_sd15_openpose
    – Weight: 1.0

  2. ControlNet Unit 1:
    – Preprocessor: depth_midas
    – Model: control_v11f1p_sd15_depth
    – Weight: 0.6

推奨組み合わせ:
– OpenPose + Canny(ポーズと輪郭を同時制御)
– Depth + Normal(奥行きと質感)
– Segmentation + Canny(領域と境界)

2. Reference OnlyモードとStyle Transferモード

Reference Only:
– 参照画像全体の雰囲気を学習
– 特定の前処理なしで画像の特徴を反映

Style Transfer:
– 参照画像のスタイル(色調、筆致)を適用
– 構図は変えたいがスタイルは保ちたい場合に有効

3. Preprocessorのパラメータ調整

多くのPreprocessorは詳細設定が可能です。

Cannyの例:

Low Threshold: 50-100(細かいエッジ検出)
High Threshold: 100-200(主要エッジ検出)

OpenPoseの例:

Hand Detection: On/Off(手の検出)
Face Detection: On/Off(顔の検出)

4. LoRAとの併用

ControlNetとLoRAを組み合わせることで、スタイルとポーズを同時に制御できます。

参考: LoRAトレーニング入門で、独自LoRAの作成方法を紹介しています。

推奨ワークフロー:
1. LoRAで特定スタイル・キャラクターを指定
2. ControlNetでポーズ・構図を制御
3. プロンプトで細部調整

高度な応用例

1. アニメーション生成への応用

ControlNetを動画の各フレームに適用することで、一貫性のあるアニメーションを生成できます。

手順:
1. 動画から各フレームを抽出
2. OpenPoseで各フレームのポーズを検出
3. 同じプロンプト + ControlNetで全フレーム生成
4. フレームを結合して動画化

ツール: EbSynth、AnimateDiff(ComfyUI)

2. 3Dモデルからイラスト生成

手順:
1. Blenderなどで3Dモデルを作成・ポーズ設定
2. Depthマップ、Normalマップをレンダリング
3. ControlNetで2Dイラストに変換

メリット:
– 複雑なポーズを正確に設定できる
– カメラアングルを自由に変更可能

3. 建築ビジュアライゼーション

手順:
1. CADソフトで建物モデル作成
2. Cannyで輪郭抽出
3. ControlNet + プロンプトで様々なスタイルに変換

用途:
– クライアントへのデザイン提案
– 複数のスタイルバリエーション生成

注意点とトラブルシューティング

ControlNetが効かない場合

確認ポイント:
– Enableにチェックが入っているか
– モデルとPreprocessorの組み合わせが正しいか
– Weightが0になっていないか
– 参照画像が正しくアップロードされているか

生成結果が参照画像に似すぎる

対処法:
– Weightを下げる(1.0 → 0.6-0.8)
– CFG Scaleを調整
– Denoising Strengthを上げる(Img2Imgの場合)

Preprocessorのプレビューがおかしい

対処法:
– Preprocessor Resolutionを調整(デフォルト: 512)
– 異なるPreprocessorを試す(例: cannysoftedge_hed

VRAMメモリ不足

対処法:
– 複数ControlNetを使用している場合、1つに減らす
– 解像度を下げる
--lowvramオプションで起動

FAQ

Q1. ControlNetはStable Diffusion 3.5でも使えますか?

SD3.5専用のControlNetモデルはまだ限定的です(2026年3月時点)。SD1.5/XL用ControlNetが最も充実しています。Stable Diffusion 3.5使い方ガイドで最新の対応状況を確認してください。

Q2. MidjourneyにもControlNet機能はありますか?

Midjourneyには直接的なControlNet機能はありませんが、--cref(キャラクター参照)や--sref(スタイル参照)パラメータで類似の制御が可能です。FLUX vs Midjourney徹底比較で詳細を解説しています。

Q3. OpenPoseで手の描写が不自然になります。どうすれば良いですか?

openpose_fullまたはopenpose_handを使用し、参照画像の手が明確に写っているか確認してください。それでも改善しない場合は、Img2Imgで手の部分だけInpaintingで修正する方法が効果的です。

Q4. 商用利用は可能ですか?

ControlNet自体はオープンソース(Apache 2.0ライセンス)で商用利用可能です。ただし、使用するStable Diffusionモデルのライセンスに従う必要があります。SD1.5は商用利用可、SD3.5は条件付き商用利用可です。

関連記事

出典

  • ControlNet公式リポジトリ: https://github.com/lllyasviel/ControlNet
  • Hugging Face ControlNet Models: https://huggingface.co/lllyasviel/ControlNet-v1-1
  • sd-webui-controlnet拡張: https://github.com/Mikubill/sd-webui-controlnet

コメント