拡散モデルの仕組み - Stable Diffusion の技術解説
拡散モデルの基本原理 - ノイズ除去で画像を生成する
拡散モデル (Diffusion Model) は、画像に段階的にノイズを加える過程 (前方拡散) と、ノイズから画像を復元する過程 (逆拡散) を学習する生成モデルです。2020 年に DDPM (Denoising Diffusion Probabilistic Models) として提案され、GAN を超える画質と安定した訓練を実現しました。Stable Diffusion、DALL-E、Midjourney などの画像生成 AI の核心技術です。
前方拡散過程:
元画像 x0 に小さなガウシアンノイズを T ステップにわたって段階的に加えます。各ステップで q(xt|xt-1) = N(xt; sqrt(1-βt)*xt-1, βt*I) に従いノイズを加算します。T が十分大きいと (T=1000 が一般的)、最終的に純粋なガウシアンノイズ N(0,I) に収束します。
逆拡散過程:
ニューラルネットワークが各ステップでノイズを予測し、段階的に除去して画像を復元します。モデルは εθ(xt, t) としてノイズを予測し、損失関数は単純な MSE: L = E[||ε - εθ(xt, t)||^2] です。このシンプルな目的関数が安定した訓練を可能にします。
GAN との比較:
- 訓練の安定性: GAN はモード崩壊や訓練不安定が問題だが、拡散モデルは安定した訓練が可能
- 多様性: 拡散モデルはデータ分布全体をカバーし、多様なサンプルを生成
- 速度: GAN は 1 回のフォワードパスで生成、拡散モデルは数十-数百ステップ必要
U-Net アーキテクチャとノイズ予測ネットワーク
拡散モデルのノイズ予測ネットワークには U-Net アーキテクチャが標準的に使用されます。エンコーダ・デコーダ構造とスキップ接続により、多スケールの情報を統合して高品質なノイズ予測を実現します。Stable Diffusion v1.5 の U-Net は約 860M パラメータで構成され、入力として 64x64x4 の潜在表現とタイムステップ情報を受け取ります。
U-Net の構造:
エンコーダは画像を段階的にダウンサンプリングし、抽象的な特徴を抽出します。具体的には 64→32→16→8 の 4 段階で解像度を下げ、チャネル数を 320→640→1280→1280 と増加させます。デコーダはアップサンプリングで解像度を復元し、スキップ接続でエンコーダの対応する解像度の特徴を直接受け取ります。各段階は ResNet ブロックと Transformer ブロックの組み合わせで構成されます。
時間ステップの埋め込み:
ノイズ予測モデルは現在のタイムステップ t を入力として受け取ります。t は正弦波位置エンコーディング (Sinusoidal Positional Encoding) でベクトル化され、MLP を通じて各 ResNet ブロックに注入されます。これによりモデルはノイズレベルに応じた適切な除去量を学習できます。
Self-Attention の導入:
U-Net の中間層に Self-Attention レイヤーを追加することで、大域的な依存関係を捕捉します。解像度 16x16 や 32x32 の特徴マップに適用され、画像全体の整合性を保つ生成を可能にします。計算コストは O(n^2) ですが、低解像度の特徴マップにのみ適用することで実用的な速度を維持します。
潜在拡散モデル - Stable Diffusion のアーキテクチャ
Stable Diffusion は潜在拡散モデル (Latent Diffusion Model, LDM) を採用し、ピクセル空間ではなく潜在空間で拡散過程を実行します。これにより計算コストを大幅に削減し、消費者向け GPU でも実行可能な高品質画像生成を実現しました。
VAE (変分オートエンコーダ):
画像を潜在空間に圧縮するエンコーダと、潜在表現から画像を復元するデコーダで構成されます。512 × 512の画像を 64x64x4 の潜在表現に圧縮し、空間的な次元を 1/64 に削減します。拡散過程はこの圧縮された潜在空間で実行されるため、計算量が大幅に削減されます。
CLIP テキストエンコーダ:
テキストプロンプトをベクトル化し、U-Net の Cross-Attention レイヤーに注入します。CLIP のテキストエンコーダがプロンプトを 77 トークン x 768 次元のベクトルに変換し、U-Net の各レイヤーで Cross-Attention を通じて画像生成を条件付けます。
サンプリングスケジューラ:
推論時のステップ数を削減するためのサンプリングスケジューラが重要です。DDPM の 1000 ステップを DDIM で 50 ステップ、DPM-Solver で 20 ステップまで削減できます。Euler、LMS、DPM++ 2M Karras など多数のスケジューラが存在し、速度と品質のトレードオフが異なります。
テキスト条件付けと Classifier-Free Guidance
テキストプロンプトに応じた画像を生成するための条件付け技術と、生成品質を向上させる Classifier-Free Guidance (CFG) の仕組みを解説します。
Cross-Attention による条件付け:
U-Net の各レイヤーに Cross-Attention を追加し、テキスト埋め込みを Key/Value、画像特徴を Query として注意機構を計算します。これによりテキストの意味的情報が画像生成過程に反映されます。「a cat sitting on a red chair」というプロンプトでは、「cat」「sitting」「red」「chair」の各トークンが空間的に適切な位置に反映されます。
Classifier-Free Guidance:
訓練時に一定確率 (10-20%) でテキスト条件を空にして無条件生成も学習します。推論時には条件付き予測と無条件予測の差をスケールして加算します: ε_guided = ε_uncond + w * (ε_cond - ε_uncond)。ガイダンススケール w が大きいほどプロンプトへの応答性が高まりますが、大きすぎると彩度が過剰になります。w=7.5 が標準的です。
Negative Prompt:
生成したくない要素を指定するネガティブプロンプトは、無条件予測の代わりにネガティブプロンプトの予測を使用することで実現されます。「blurry, low quality」などを指定することで、それらの特徴から離れる方向に生成を誘導します。
高速化技術 - SDXL, LCM, Turbo
拡散モデルの最大の課題である生成速度を改善するための技術が急速に発展しています。従来 50 ステップ必要だった生成が、1-4 ステップで実現可能になっています。
SDXL (Stable Diffusion XL):
Stability AI が 2023 年にリリースした高品質モデルです。2 段階のパイプライン (Base + Refiner) で 1,024 × 1,024の高解像度画像を生成します。テキストエンコーダに OpenCLIP ViT-bigG と CLIP ViT-L の 2 つを併用し、プロンプト理解力が向上しています。
LCM (Latent Consistency Models):
一貫性蒸留 (Consistency Distillation) により、少ないステップ数で高品質な生成を実現します。4-8 ステップで SD 1.5 の 50 ステップと同等の品質を達成します。LoRA として提供され、既存モデルに適用可能です。
SDXL Turbo / SD Turbo:
Adversarial Diffusion Distillation (ADD) により、1 ステップでのリアルタイム生成を実現します。GAN の識別器を蒸留損失に組み込み、少ないステップでもシャープな画像を生成します。RTX 3090 で 512 × 512の画像を約 200ms で生成可能です。
Flash Diffusion:
知識蒸留とプログレッシブ学習を組み合わせた手法で、4 ステップで高品質な生成を実現します。既存のカスタムモデル (LoRA 適用済み) にも対応し、汎用性が高いです。
実践的な活用 - ControlNet とカスタムモデル
拡散モデルを実用的に活用するための制御技術とカスタマイズ手法を解説します。テキストプロンプトだけでは制御が難しい構図やポーズを、追加の条件で制御します。
ControlNet:
エッジ検出、深度マップ、ポーズ推定、セグメンテーションマップなどの追加条件で生成を制御する技術です。U-Net のエンコーダをコピーし、追加条件を入力として受け取るブランチを作成します。元の U-Net の重みは固定したまま、ControlNet ブランチのみを訓練します。
LoRA (Low-Rank Adaptation):
モデルの重み行列に低ランクの更新を加えるファインチューニング手法です。全パラメータを更新する代わりに、少数の追加パラメータ (rank=4-128) のみを訓練します。モデルサイズの 1% 未満の追加でスタイルやキャラクターを学習でき、複数の LoRA を組み合わせることも可能です。
IP-Adapter:
参照画像のスタイルや構図を新しい画像に転写する技術です。CLIP 画像エンコーダの出力を Cross-Attention に注入し、テキストと画像の両方で条件付けします。スタイルの強度を調整でき、テキストプロンプトとのバランスを制御可能です。
実行環境:
Stable Diffusion は diffusers ライブラリ (Hugging Face) で簡単に実行できます。VRAM 8GB 以上の GPU が推奨で、xformers や torch.compile による高速化が可能です。ComfyUI や AUTOMATIC1111 などの GUI ツールも充実しています。