ControlNetとは?

拡散モデルは、ざっくり言えば「ノイズ」と「画像」の関係性を学習し、ノイズの中から画像を復元できるようにしたモデルです。

ここに、ノイズだけでなく 「画像と対応する別の情報」 を一緒に加えたらどうなるでしょうか。

  • 線画と、塗り終わったイラストの関係を学習しておけば
    • → 線画を渡すだけで、自動で色を塗ってくれる
  • 棒人間(ポーズ画像)と、人の写真の関係を学習しておけば
    • → 棒人間を渡すだけで、そのポーズをした人物の画像を作れる

そんなAIを作ることが出来ます。

このように、「追加の画像条件(ポーズ・線画・深度など)」を手がかりに生成結果をコントロールするための仕組みのひとつが ControlNet です。


代表的なControlNetの種類

ControlNet で扱える「追加情報」はアイデア次第でいくらでも増やせますが、よく使われるものはある程度パターンがあります。 代表的なものだけ挙げておきます。

openpose(ポーズ / 棒人間)

棒人間やスケルトンで、人やキャラのポーズを指定します。

depth(深度マップ)

深度マップを使って、構図や奥行きを固定します。

scribble(落書き)

ラフな落書きだけ渡し、それをもとに画像を生成します。

lineart / anime(線画)

線画を渡して、塗りを生成します。

inpaint(インペイント用)

マスクされた部分を自然に埋めます。

このほかにも、エッジ抽出(Canny)、セグメンテーション、QR コードなど、さまざまなバリエーションがありますが、「画像」と「対応する表現」を用意さえできればどんなControlNetでも作れます。


指示ベース画像編集

最近の画像編集モデルでは、従来 ControlNet でやっていたようなことを、「指示ベースの画像編集」として扱ってしまうケースも増えています。

指示ベース画像編集は、与えた画像に対して、「ズームアウトして」や「夜にして」などの指示を渡すことで画像編集を行えます。

ということは、CotrolNet的な操作も「画像編集」として扱ってしまうこともできます。

  • ポーズ画像 + 「このポーズで、黒い服のキャラを描いて」
  • 深度マップ + 「同じ構図のまま、夜景の写真にして」
  • ラフ画像 + 「このラフをきれいなイラストにして」