Latent Diffusion Modelとは?

Latent Diffusion Model は、画像生成AIを自宅PCでも動かせるようにした一番大きな工夫のひとつです。
普通の画像(ピクセル)のまま拡散処理をすると、画素数が多すぎて計算が重くなります。
そこで、一度画像を 「潜在空間(latent)」と呼ばれる圧縮表現 に変換してから、そこでノイズを足したり減らしたりします。
例としてStable Diffusion 1.5では、512×512×3の画像を64×64×4の「潜在画像」に圧縮して扱います。
縦横が1/8になるので、画素数は1/64です。
この「少ない画素数の世界で拡散をやる」おかげで、ご家庭でも現実的な速度で画像生成ができるようになったのです!
なぜ潜在空間で処理するのか
1. 計算量とVRAMの節約
512×512の画像を扱う場合、512×512個のドット一つ一つに対して何色か?を計算しなければいけません。
圧縮した潜在表現なら64×64になるので、ずっと計算量を減らすことができます。
2. 意味のまとまりを持った表現で処理できる
潜在空間では、ピクセル単位の細かいノイズではなく、「物体の形」「質感」「色の傾向」といった高レベルな特徴が圧縮されています。
また、潜在表現は「形が不安定な粘土」のようなものです。ピクセル画像同士を混ぜることに特に意味はありませんが、潜在画像の状態で組み合わせると、自然な合成を行えたりします。
VAEとは?
VAE(Variational Autoencoder) は、画像を潜在空間へ変換したり、逆に戻したりする変換器です。
- Encoder:画像 → 潜在画像 に変換
- Decoder:潜在画像 → 画像 に戻す
生成の流れは次のようになります。
-
- 拡散モデルは、潜在画像のノイズからスタート
-
- U-Net(拡散モデル本体)が、潜在画像上でノイズを少しずつ減らす
-
- 最後にVAEのDecoderを通して、「潜在画像 → ふつうの画像」に変換
img2imgやinpaintなど、画像を入力にする場合は、画像をEncoderで潜在表現に変換してから、同じことをします。
VAEは非可逆圧縮
VAEは 非可逆圧縮 です。
画像を潜在空間に変換して、また画像に戻しても、完全には元通りにはなりません。
わずかにボケたり、色味やコントラストが変わったりします。

拡散モデルを使わず、単純に画像を VAE でエンコードして、同じ VAE でデコードしてみると、わずかに劣化しているのが分かるはずです。
この「少しだけ劣化する代わりに、軽く扱えるようにする」というトレードオフが、潜在表現の特徴です。
どのVAEを使えばいいか?
モデルによって使われている潜在表現が違い、それを作るためのVAEも違います。
基本的には、モデルに合ったVAEを使わないといけません。
間違ったVAEを使うと、色が変になったり、ノイズが乗ったりした画像ができてしまいます。