はじめに
Stable Diffusionを使って,テキストから画像を生成する機会が増えましたが,モデルの中身の構造や生成の仕組みを知らずに扱うことに違和感がずっとあったので理解し,まとめてみます.
今回は,SD1.5をベースにまとめます.SDXLなどは勉強中です.
扱う内容
- Stable Diffusion の内部構造について
- Diffusionモデルの基本原理について
- テキストが画像生成にどのように関係してくるのか
- 生成プロセスの流れについて
目次
画像生成モデルの体系
画像生成モデルには,さまざまなアプローチが存在します.代表的なもので言えば,GAN(Generative Adversarial Network),VAE(Variational AutoEncoder),そしてDiffusion Modelなどです.これらは,画像生成する際の生成方法と学習の仕組みが大きく異なります.軽くおさえます.
GAN(Generative Adversarial Network)
GANは,生成モデル(Generator)と識別モデル(Discriminator)の2つのネットワークを競わせることで,高品質な画像を生成する仕組みを持ちます.Generatorはランダムノイズから「本物っぽい画像」を生成しようとします.一方,Discriminatorは入力された画像が「本物か偽物か」を判定します.両者は対立しながら同時に学習を行います.そのため,Generatorはより本物に近い画像を作るように学習され,Discriminatorはより正確に判別できるようになります.
(画像はGAN論文から引用)
VAE(Variational AutoEncoder)
VAEは,入力画像を潜在空間に圧縮し,そこから画像を再構成する仕組みを持っており,大きくEncoderとDecoderの2つから構成されています.Encoderは入力画像を潜在分布のパラメータに変換.Decoderは潜在変数から画像を再構成する役割があります.
生成時には,元画像が存在しないため,Encoderは使われません.VAEの画像生成の流れは以下の通りです.
-
学習時に想定された潜在空間から潜在変数 z をランダムにサンプルする
-
Decoderに潜在変数 z を入力し,画像を生成する
・Decoderは畳み込み層などを使い,「潜在空間の z が意味する画像」を推定し,出力
・学習済みのDecoderは,潜在空間のある位置 z が何の画像に対応するかを学習しているため,そこから生成画像を推定可能です.
Diffusion Model
Diffusion Modelは,データにノイズを徐々に加えて壊していき(拡散過程/forward process),その壊れたノイズから元のデータを段階的に復元する(逆拡散過程/reverse process)という発想に基づくモデルです.
-
Forward Process(拡散過程)
・元の画像 $x_0$ にガウンノイズを少しずつ足していく
・最終的には完全なノイズに変わる -
Reverse Process(逆拡散過程)
・モデルがノイズから1ステップずつ「きれいな画像」を復元する
・拡散過程のノイズの遷移を捉えることができれば,$x_t$から$x_0$を生成できる
・数百~千ステップを踏んで徐々に画像が形成される
画像生成時は,純粋なノイズから学習済みモデルでノイズを徐々に除去していきます.
(画像はDiffusion Modelのイメージ)
Diffusion Modelの登場によって,GANを超える高品質な画像生成が可能になりました.その中でも最も広く使われているのがStable Diffusionであり,テキストから様々な画像を生成できる点が大きな特徴として挙げられます.ここからは,Stable Diffusion の内部構造がどのように設計されているのか,まとめていきます.
Stable Diffusion の全体構造
Stable Diffusionの内部構造は,大きく3つに分けられます.
Text Encoder(テキストエンコーダ)
・生成する際に入力された文章を数値ベクトルに変換する部分
・通常,CLIPのText Encoder(Transformer ベース)が用いられる
・出力は画像生成の「条件」として利用される
Diffusion Model(拡散モデル)
ノイズ画像からノイズを除去するためのモデルです.Stable Diffusionでは,U-Netが主に用いられています(U-Netの文献はこちら).
・入力:
・ノイズの載った潜在画像
・テキストの埋め込み(Text Encoderからの出力)
・タイムステップ(ノイズ除去回数)
・出力:
・「どれだけのノイズが載っているか」を表すノイズ推定
通常のDiffusionモデルはいわゆる「条件なし Diffusion Model」ですが,Stable Diffusion は「条件付き Diffusion Model」となっています.
上図のように,Stable Diffusionの U-Net の各層には,Crfoss-Attention機構が組み込まれており,「画像のどの領域が」「テキストのどの単語を参照するか」が学習により決まるようになっています.
これにより,通常のノイズ除去と異なり,ノイズ除去の方向がテキストに依存して変化するため,テキストに沿った画像生成を可能にしています.
VAE(Variational AutoEncoder)
Stable Diffusion において,VAE はピクセル画像 ↔ 潜在空間を相互変換する役割を持っています.高解像度のピクセル画像を直接扱うと,計算が重くなりすぎてしまうため,Stable Diffusionでは,潜在空間に変換してからDiffusionを行います.
テキストが画像に反映される仕組み
Stable Diffusionでは,テキストと画像の対応は主に,CLIP Text Ecoder と U-Net の Cross-Attention機構の組み合わせによって実現されます.これにより,画像を生成する際のテキストプロンプトに沿った画像生成が可能となります.
軽く流れをおさえます.
テキストを埋め込み表現に変換
Stable Diffusionでは,CLIP のTransformerを用い,埋め込み表現に変換します.
流れも,トークン化,埋め込み,位置埋め込みと同じ流れです.
U-Netにテキスト埋め込みを入力
Text Encoderから出力された埋め込み表現はそのままU-Netに入力されるわけではなく,Cross-Attention層のみで使われる条件情報として渡されます.
Cross-Attentionで参照する単語を決める
Attention機構には,ResBlockからの画像埋め込み表現とText Encoderからのテキスト埋め込み表現の両方が渡されます.具体的には,Attention機構のQueryにはResBlockからの画像情報,Key・Valueにはテキスト情報が渡されるようになっています.
画像生成における,Cross-Attentionの役割は,画像の局所領域がテキスト埋め込みのどの単語に重点を置くかを決定することです.
Cross-Attention により,U-Net の各レイヤーは「現在生成している局所領域が,テキストのどの単語を参照すべきか」を自動で決定します.これにより,
・顔の部分は “girl”
・背景の部分は “forest”
・服の部分は “red dress”
といったように、画像の各領域が最も関連度の高い単語に基づいて生成される構造が実現されています.
生成プロセスの流れ
(画像生成時の全体構造)
最後に,Stable Diffusionが画像を生成する流れを整理します.
画像生成時には,Reverse Process(逆拡散過程)のみを実行します.
- ランダムな潜在ノイズの生成
- テキストをエンコード
- U-Netによるノイズ予測(スケジューラにより管理される)
- ノイズ予測をもとに,潜在空間を更新
- ノイズがほぼ除去された潜在表現をゲット
- VAE Decoder で潜在表現をピクセル画像へ復元
以上のように,Stable Diffusionの推論では比較的シンプルに,初期の完全なノイズ画像から段階的にノイズを除去していき,画像を復元する形で生成が進んでいます.その中で,テキスト条件と潜在表現の組み合わせによって高品質場画像生成が実現されています.
まとめ
今回は,Stable Diffusionの構造を理解し,整理しました.仕組みや構造を理解する前と後では,生成時の違和感が消えるだけでなく,各パラメータが「なぜ効くのか」のイメージが容易く,自分が生成したい画像へのアプローチがより効率的になたと感じています.今度は,生成時のパラメータによる生成画像の違いや,モデルごと,サンプラーごとの違いについて理解してまとめてみようと思います.





