ControlNetチュートリアル:ComfyUIでControlNetを使用して正確に制御された画像生成を行う
この記事ではComfyUIでControlNetモデルをインストールして使用する方法を説明します。
AI画像生成のプロセスにおいて、画像生成を正確に制御することは簡単な作業ではありません。通常、満足のいく画像を生成するには何度も試行が必要ですが、ControlNetの登場により、この問題は効果的に解決されました。
ControlNetは十数種類の制御ネットワークモデルを提供しており、画像のスタイル、詳細、人物のポーズ、シーン構造などをさらに制御できるようになります。これらの条件によりAI画像生成はより制御可能になり、描画プロセス中に複数のControlNetモデルを同時に使用することで、より良い結果を得ることができます。
ControlNetは翻訳アシスタントのようなものと考えることができます。参照画像をAIが理解できる指示に変換し、AIモデルに伝達することで、要件を満たす画像を生成します。
例えば、この画像では、人物の画像を入力し、プリプロセッサを通じて人物の制御条件を抽出し、ControlNetモデルを適用することで、ポーズの一貫した人物画像が生成されています。
このチュートリアルでは以下の内容を扱います:
- ControlNetの基本紹介
- ComfyUIでのControlNetのワークフロー
- ControlNet関連リソース
- ComfyUIにおける典型的なControlNetワークフローの構成
その後、ComfyUI-Wikiの他のControlNet関連記事では、個々のControlNetモデルの使用方法を関連例とともに具体的に説明します。
ControlNetの簡単な紹介
ControlNetは、拡散モデル(Stable Diffusionなど)に基づく条件制御生成モデルで、2023年にLvmin Zhang、Maneesh Agrawalaらによって最初に提案されました。このモデルは、マルチモーダル入力条件(エッジ検出、深度マップ、ポーズキーポイントなど)を導入することで、画像生成における制御性と詳細再現能力を大幅に向上させています。
以下はControlNet関連のリンクです:
- 著者ホームページ:lllyasviel
- ControlNet 1.0:ControlNet
- ControlNet-v1-1-nightly:ControlNet-v1-1-nightly
- Hugging Face:ControlNet-v1-1
- 論文:ControlNext-to-Image Diffusion Models
ControlNetの一般的な制御タイプ
ここ数年のControlNetの発展とコミュニティの貢献により、現在ControlNetは十数種類の制御タイプをサポートしています。以下は一般的なタイプで、それぞれ異なるシナリオに適しています。
1. ライン制御タイプ
- Canny:エッジ検出で細かい線を生成し、元の構造を正確に模倣するのに適しています。
- MLSD:直線のみを検出し、建築やインテリアデザインなどに適しています。
- Lineart:新世代の線画認識で、Cannyよりも精細で、アニメ線の抽出をサポートします。
- SoftEdge:ソフトエッジ検出で、大きな輪郭線を優先し、正確な模倣を必要としないシナリオに適しています。
- Scribble/Sketch:落書き制御で、大まかな輪郭認識や手描きスケッチからの画像生成をサポートします。
2. 深度と構造タイプ
- Depth:明るさで前景と背景の深度関係を区別し、白い領域が近く、黒い領域が遠くなります。
- NormalMap:法線マップで、物体表面の質感(窓の凹み効果など)を制御します。
- OpenPose:骨格ポーズ認識で、人体のポーズを自動検出または手動編集できます。
3. セマンティックとセグメンテーションタイプ
- Segmentation:セマンティックセグメンテーションで、物体カテゴリに対応する色(青は空など)に基づいて画像を生成します。
- Inpaint/局所再描画:画像の特定部分を修正し、元のスタイルとの一貫性を維持します。
4. スタイルと色彩タイプ
- Shuffle:ランダムシャッフルで、参照画像のセマンティック要素を並べ替えて多様なシーンを生成します。
- Recolor:白黒画像の再着色で、自動またはキーワード定義の色をサポートします。
- IP-Adapter:スタイル/顔の模倣で、生成画像の一貫性を維持します。
5. 機能拡張タイプ
- InstructP2P:テキスト指示で画像を修正します(家に「火をつける」など)。
- Instant_ID:AI顔交換で、顔の一貫性を維持し、複数画像の融合をサポートします。
- Tile/Blur:ぼやけた画像の高精細化と詳細強調。
OpenPoseの顔/手専用プロセッサおよび一部のセマンティックセグメンテーション前処理とは互換性がありません。
ComfyUIでのControlNetのワークフロー
ComfyUIでは、ControlNetは条件制御装置として機能し、通常以下の処理ステップが含まれます。現在ComfyUIのControlNetモデルバージョンは多数あるため、具体的なプロセスは異なる場合があります。ここではControlNet V1.1モデルを例に説明し、具体的なワークフローは後続の関連チュートリアルで追加します。
- 画像の前処理
参照画像をアップロードする必要があります。ControlNetのプリプロセッサが画像から主要な特徴(輪郭、線、ポーズなど)を抽出します。例えば、この記事の冒頭の人物画像はOpenposeの制御条件になります。
- 条件注入
ControlNetは抽出した特徴を「条件信号」に変換し、サンプラー(Kサンプラーなど)に伝達します。これらの信号はAIに「画像生成時に、参照画像の線/ポーズ/構造にできるだけ一致させる」ように指示します。
- サンプラーによる画像生成
サンプラー(Kサンプラーなど)は、ノイズ除去プロセスで画像を生成する際に、ControlNetが提供する条件信号を考慮し、最終的にテキスト説明に一致し、かつ参照画像の特徴にも合致する画像を生成します。
ControlNetワークフロー
プリプロセッサを使用しないControlNetワークフロー
このセクションでは、サードパーティプラグインに依存しない典型的なSD1.5 ControlNetワークフローを紹介します。
1. モデルファイルの準備
このワークフローを使用するには、以下のものをインストールしていることを確認してください:
- Dreamshaper 8をダウンロードして
ComfyUI/models/checkpoints/ディレクトリに保存 - control_v11p_sd15_openpose.pthをダウンロードして
ComfyUI/models/controlnet/ディレクトリに保存
ComfyUI/models/checkpoints/sd1.5
- ComfyUI/models/controlnet/sd1.5
2. ワークフローと関連素材
下のボタンをクリックして対応するワークフローをダウンロードし、ComfyUIインターフェースにドラッグするか、メニューWorkflows -> Open(Ctrl+O)を使用してロードしてください。
以下の画像を参照画像として使用します。ダウンロードして保存してください。
3. ワークフローの実行
画像内の番号に従って、このControlNetワークフローを完成させるための操作を順番に行ってください。
Load CheckpointノードでSD1.5モデルがロードされていることを確認してください。Load ControlNet Modelノードでcontrol_v11p_sd15_openpose.pthモデルが認識されロードされていることを確認してください。Load Imageノードで上記の参照画像をロードしてください。- 上記の操作を完了したら、
Runボタンをクリックするか、ショートカットキーCtrl(cmd) + Enterを使用して画像生成を行ってください。
Apply ControlNetノード内のさまざまなパラメータを調整して生成を試み、異なる強度(Strength)と異なる開始比率(start_percent)および終了比率(end_percent)が生成結果にどのような影響を与えるかを確認してください。
4. ワークフロー解説
上記のフローでは、テキストから画像へのワークフローと比較すると:

主な違いは、元のテキストから画像へのフローにおいて、対応する条件をApply ControlNetノードに入力し、このノードを通じて対応する制御条件を追加し、その結果得られる出力条件をKSamplerノードの条件入力に送信している点です。
対応する人物が適切に生成されていることがわかります。さらに、SD1.5モデルでよく見られる手足の誤りがこのワークフローでは発生していません。
上記の操作を完了したら、Empty Latent Imageノードのサイズを変更してみてください。例えば512x512に設定し、再度生成して、生成された画像と参照画像の違いを観察してください。
最終的に生成された画像は参照画像の中心部分のみを使用していることがわかるでしょう。また、異なるタイプの参照画像には異なるタイプのControlNetモデルが必要です。例えば、Openposeにはcontrol_v11p_sd15_openpose.pthモデルが必要で、Canny画像にはcontrol_v11p_sd15_canny.pthモデルが必要です。
上記のワークフローでは、使用した参照画像(Openpose)があまり一般的ではないという疑問が生じるかもしれません。他のより一般的な参照画像を使用して対応する画像を生成できるでしょうか?この場合、プリプロセッサを使用する必要があります。次のセクションでプリプロセッサを使用したワークフローを続けましょう。
プリプロセッサを使用したControlNetワークフロー
プリプロセッサとは何でしょうか?
例えば下の画像では、ComfyUIのCannyプリプロセッサを使用しており、画像の輪郭エッジ特徴を抽出しています。
これがプリプロセッサの目的です。参照画像(写真、線画、落書きなど)を構造化された特徴マップに変換し、ControlNetモデルが理解して生成結果を導けるようにします。
一般的なプリプロセッサには以下のようなものがあります:
- ラインアートプリプロセッサ(cannyやlineartなど):画像のエッジ輪郭を抽出し、白黒のラインアートを生成。
- 深度マッププリプロセッサ(depth_midasなど):画像内のオブジェクトの距離レベルを計算し、グレースケールの深度マップを生成。
- ポーズプリプロセッサ(openposeなど):人体骨格のキーポイントを認識し、棒人間の骨格図を生成。
ただし、ComfyUIにはCannyプリプロセッサしかないため、画像前処理作業を完了するには他のプラグインに依存する必要があります。以下では対応するワークフローの内容を進めていきます。
1. 関連プラグインのインストール
このチュートリアルではComfyUI ControlNet Auxiliary Preprocessorsプラグインを使用する必要があります。
プラグインのインストール方法についてはComfyUIプラグインインストールチュートリアルを参照してください。
2. モデルファイルの準備
この例では、前のセクションと同じモデルファイルを使用します。
- Dreamshaper 8をダウンロードして
ComfyUI/models/checkpoints/ディレクトリに保存 - control_v11p_sd15_openpose.pthをダウンロードして
ComfyUI/models/controlnet/ディレクトリに保存
3. ワークフローと入力画像素材
以下のワークフローファイルをダウンロードしてください。
ComfyUIを実行した後、ワークフローをドラッグするか、ComfyUIのショートカットキー`Ctrl+O`を使用してこのワークフローファイルを開いてください。以下の画像をダウンロードし、Load Imageノードにロードして使用してください。

1Load Imageノードに入力画像をロードします。2Load Checkpointノードでインストールしたモデルを選択します。3Apply ControlNetノードでcontrol_v11f1p_sd15_openpose.pthモデルを選択します。- Queueまたはショートカットキー
Ctrl+Enterを使用してワークフローを実行し、画像を生成します。
4. ワークフロー解説
このワークフローは以前のワークフローと比較すると、画像の前処理ステップが追加されただけです。対応する画像をComfyUI ControlNet Auxiliary Preprocessorsが提供するOpenPose Poseプリプロセッサに入力し、画像前処理を完了しています。
以上がComfyUIにおけるControlNetの簡単な紹介です。今後のControlNet関連チュートリアルでは、より多くのControlNetモデルを紹介し、対応する例を提供していきます。
コメント
GitHubでサインインしてディスカッションに参加しましょう。