拡散モデルは「おまかせ」だとランダム
拡散モデルによって、ノイズから意味のある画像を生成できるようになりました。
しかし、このままだとあくまで「それっぽい画像」を出してくるだけで、どんな絵を出したいのか、中身の指定をすることはできません。
ここで必要になるのが Conditioning(コンディショニング) です。
Conditioningとは?
ComfyUIでは、拡散モデルがノイズを減らしていくときに、「どんな画像にしてほしいか」「どこをどう変えてほしいか」を伝える追加情報をまとめて Conditioning と呼んでいます。
簡単に言えば、生成の方向性を決める道しるべのようなものです。
テキストによるConditioning
画像生成を制御する手段として最も一般的なのは、テキストプロンプトでしょう。
ただのテキストをConditioningにする方法を見てみましょう。
テキストエンコーダの役割
拡散モデルは、そのままでは文章を読めません。
「犬」「森」「夕焼け」といった言葉は、ただの文字列です。
そこで、テキストを拡散モデルが扱いやすい数値(ベクトル)に変換する役割を担うのが テキストエンコーダ です。
- 入力:テキスト(プロンプト)
- 出力:その意味を表すベクトル(数値のまとまり)
拡散モデルは、このベクトルを道しるべにして、テキストプロンプトに合った画像になるようにノイズを減らしていきます。
CLIP型テキストエンコーダ
Stable Diffusion 1.5のようなモデルでは、主に CLIP という仕組みをベースにしたテキストエンコーダが使われています。
CLIPは「テキストと画像のペア」を大量に学習した "見るAI" です。画像とテキストを同じ「意味の空間」に配置できるのが特徴です。
- 猫の写真を見せると、「a cat」という文章と相性がいいと判断できます
- ということは、逆に a cat というテキストを入れれば、「猫らしさ」を表すベクトルを出してくれるわけです
拡散モデル(U-Net)は、このベクトルを道しるべにして、「ノイズをどちら向きに減らせば、このテキストに合った画像になるか?」を判断していきます。
LLM / MLLM型テキストエンコーダ
最近の画像モデル・動画モデルでは、CLIPの代わりに LLM や MLLM(マルチモーダルLLM) をベースにしたテキストエンコーダを使う流れも出てきています。
LLMはChatGPTのような対話AIの基礎になっている仕組みで、文章の文脈を扱えます。MLLMは、さらに画像なども扱えるようにしたものです。
CLIPは短い説明や概念との対応には強い一方、長い文章や複雑な位置関係を画像生成に反映するのは苦手でした。
LLMやMLLMを使うことで、このような指示もより正確に理解できるようになります。
A dog on a log with a frog in a bog
丸太の上に犬、沼にはカエル、という複雑な位置関係も正確に理解している
とはいえ、ComfyUIの立場から見ると、CLIP、LLM、MLLMのどれを使っていても、「テキスト → 意味を表すベクトルに変換して、拡散モデルに渡す」という役割自体は同じです。
その他のConditioning(ざっくり)
このページではテキストに絞りましたが、実際にはテキスト以外にもさまざまなConditioningがあります。
参照画像ベースのConditioning
- IP-Adapter系など
- 「このキャラ・この塗り・この写真の雰囲気に寄せて」と伝える
構造ベースのConditioning
- ControlNetなど(ポーズ、線画、深度マップなど)
- 「このポーズ・輪郭・奥行きは守って」と伝える
どれも、拡散モデルに「何を優先して、どの方向へ寄せるか」を伝えるためのConditioningです。