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 Agrawaraらによって最初に提案されました。このモデルは複数のモダリティ入力条件(エッジ検出、深度マップ、ポーズキーポイントなど)を導入することで、画像生成の制御性と詳細な再現能力を大幅に向上させています。
以下は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では、異なるバージョンの描画モデルに対応するControlNetモデルは互換性がありません。例えば、SD1.5モデルはFluxの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
ノードで上記の参照画像をロードしてください。- 上記の操作を完了したら、
Queue
ボタンをクリックするか、ショートカットキー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ノードにロードして使用してください。
1
Load Imageノードに入力画像をロードします。2
Load Checkpointノードでインストールしたモデルを選択します。3
Apply ControlNetノードでcontrol_v11f1p_sd15_openpose.pth
モデルを選択します。- Queueまたはショートカットキー
Ctrl+Enter
を使用してワークフローを実行し、画像を生成します。
4. ワークフロー解説
このワークフローは以前のワークフローと比較すると、単に画像の前処理ステップが追加されただけです。対応する画像をComfyUI ControlNet Auxiliary Preprocessorsが提供するOpenPose Pose
ノードに入力し、対応する画像前処理を完了しました。
以上がComfyUIにおけるControlNetの簡単な紹介です。今後のControlNet関連チュートリアルでは、より多くのControlNetモデルを紹介し、対応する例を提供していきます。