Stable Diffusionの仕組み|VAE・U-Net・テキストエンコーダーの役割を解説

Stable Diffusionの仕組み|VAE・U-Net・テキストエンコーダーの役割を解説

Stable Diffusionでプロンプトから画像が生成されるまでに、内部ではいくつかのコンポーネントが連携して動いています。この記事では、主要な3つのコンポーネント——テキストエンコーダーU-Net(またはDiT)VAE——がそれぞれどんな役割を果たしているのかを、数式を使わず概念的に解説します。

Stable Diffusionの全体像

Stable Diffusionの画像生成は、大きく分けて次の3つのコンポーネントで成り立っています。

  1. テキストエンコーダー — プロンプト(テキスト)を数値表現(ベクトル)に変換する
  2. U-Net / DiT — ノイズだらけの画像から徐々にノイズを除去し、画像を復元する
  3. VAE — 潜在空間とピクセル空間を相互に変換する

ユーザーがプロンプトを入力すると、まずテキストエンコーダーがその意味を数値化します。次にU-Netがその情報をもとにノイズを除去していき、最後にVAEが人間の目で見える画像に変換します。

テキストエンコーダー(CLIP / T5)

テキストエンコーダーは、入力されたプロンプトの文字列を、モデルが理解できるベクトル(数値の列)に変換するコンポーネントです。

CLIPの役割と制限

SD1.5やSDXLでは、OpenAIが開発したCLIPがテキストエンコーダーとして使われています。CLIPは大量の画像とテキストのペアで学習されており、テキストと画像の意味的な対応関係を理解しています。

CLIPには75トークンという入力長の制限があります。この制限を超えたプロンプトは、複数のチャンクに分割して処理されます。チャンクの分割位置によって生成結果が変わることがあるため、プロンプトの語順には注意が必要です。詳しくはCLIPチャンク分割実験を参照してください。

SD3のトリプルエンコーダー構成

SD3以降では、CLIP ViT-L/14、OpenCLIP ViT-bigG/14、T5-XXLの3つのテキストエンコーダーを組み合わせた構成が採用されています。T5は自然言語の理解に特化した大規模言語モデルで、CLIPだけでは捉えきれなかった長文プロンプトや複雑な関係性の理解を補強します。

U-Net / DiT(ノイズ予測ネットワーク)

U-Netは、Stable Diffusionの中核となるノイズ予測ネットワークです。

ノイズ除去のプロセス

画像生成は、完全なランダムノイズからスタートします。U-Netは「この画像に含まれるノイズはどのようなものか」を予測し、そのノイズを少しずつ取り除いていきます。このステップを何十回も繰り返すことで、ノイズの塊だったものが徐々に意味のある画像へと変わっていきます。

Cross-Attentionによるテキスト条件付け

U-Netの内部にはCross-Attentionという仕組みがあり、ここでテキストエンコーダーからのベクトル情報が注入されます。これにより、U-Netは「どんな画像を生成すべきか」というテキストの指示に従ってノイズを除去できます。

テキスト条件付けの強度はClassifier-Free Guidance(CFG)というパラメータで制御されます。CFGの値を高くするとプロンプトへの忠実度が上がりますが、高すぎると画像が不自然になる場合があります。

MMDiT(Multi-Modal Diffusion Transformer)への移行

SD3以降では、従来のU-Net構造に代わり**MMDiT(Multi-Modal Diffusion Transformer)**が採用されています。MMDiTはDiT(Diffusion Transformer)をベースに拡張したアーキテクチャで、テキストと画像のトークンを同じTransformerブロック内で処理する点が特徴です。これによりテキストの意味をより精密に画像に反映できるようになりました。

VAE(Variational Autoencoder)

VAEは、画像を潜在空間ピクセル空間の間で変換するコンポーネントです。

潜在空間とは

通常の画像(ピクセル空間)は、例えば512×512ピクセルのRGB画像なら約78万個の数値で表現されます。VAEのエンコーダーは、この高次元データをはるかに小さい潜在表現に圧縮します。SD1.5の場合、512×512の画像が64×64×4の潜在表現(約1.6万個の数値)になります。

なぜ潜在空間で処理するのか

U-Netのノイズ除去をピクセル空間で直接行うと、計算量が膨大になります。Latent Diffusion Modelsの核心的なアイデアは、この処理を圧縮された潜在空間で行うことです。潜在空間での処理により計算量が大幅に削減され、一般的なGPUでも実用的な速度で画像生成が可能になりました。

生成プロセスの最後に、VAEのデコーダーが潜在表現をピクセル空間に戻し、最終的な画像を出力します。

VAEの違いによる色味の変化

VAEはモデルによって異なるものが使われることがあり、同じ潜在表現でも使うVAEによって最終的な画像の色味が変わります。SD1.5時代には、ft-EMA版とft-MSE版のVAEがあり、色の鮮やかさや暗部の表現に違いがありました。

スケジューラー(サンプラー)の位置づけ

3つの主要コンポーネントに加えて、**スケジューラー(サンプラー)**も重要な要素です。スケジューラーはU-Netのノイズ除去プロセスの進め方を制御します。

具体的には、何ステップでノイズを除去するか、各ステップでどの程度のノイズを除去するかを決定します。Euler、DPM++ 2M、UniPCなど多くのスケジューラーが存在し、速度と品質のバランスが異なります。サンプラーの選択についてはサンプラーガイドも参照してください。

各コンポーネントが画像品質に与える影響

各コンポーネントは、画像品質に対してそれぞれ異なる側面から影響を与えます。

  • テキストエンコーダー — プロンプトの解釈精度に影響します。エンコーダーが理解できない概念は画像に反映されません。プロンプトの書き方を工夫する必要があるのは、このコンポーネントの特性に起因します。
  • U-Net / DiT — 画像の構図、被写体の形状、ディテールの精度に影響します。モデルのチェックポイント(.safetensorsファイル)の大部分はこのコンポーネントの重みです。
  • VAE — 色の再現性、細部の鮮明さに影響します。潜在空間からの復元精度が高いほど、くっきりとした画像になります。
  • スケジューラー — 生成速度と品質のトレードオフを制御します。ステップ数が多いほど精密ですが、時間がかかります。

まとめ

Stable Diffusionは、テキストエンコーダー・U-Net(DiT)・VAEという3つの主要コンポーネントが連携して動作するシステムです。テキストエンコーダーがプロンプトの意味をベクトルに変換し、U-Netがそのベクトルを手がかりに潜在空間でノイズを除去し、VAEが最終的なピクセル画像に変換します。

各コンポーネントの役割を理解しておくと、プロンプトが意図通りに機能しないときの原因切り分けや、モデル・VAE・サンプラーの選択に役立ちます。

関連記事