Latent Diffusion Model (LDM)
潜在拡散モデル(LDM)は、ピクセル上ではなくオートエンコーダーの圧縮された潜在空間で拡散処理を行います。Stable Diffusionの基盤となる設計です。
潜在拡散モデル(LDM)は、生のピクセルではなく、事前学習済みオートエンコーダーで圧縮した表現をデノイズしてデータを生成する拡散モデルです。Robin Rombach、Andreas Blattmann、Dominik Lorenz、Patrick Esser、Björn Ommerは、CVPR 2022で発表した潜在拡散モデルによる高解像度画像合成でこの手法を紹介しました。オートエンコーダーは、モデル化にコストがかかる一方で画像の見た目にはあまり影響しない細かなピクセル情報を取り除くため、拡散ネットワークは内容と構図に容量を集中できます。その結果、ピクセル空間での拡散よりトレーニングとサンプリングのコストが大幅に下がり、最もよく知られたLDMであるStable Diffusionは、一般向けの単一GPUで画像を生成できます。生成AIの現在の画像、動画、音声生成モデルの多くは、同じ2段階設計に従います。
潜在拡散の仕組み#
第1段階では画像を圧縮します。エンコーダーはH×W×3サイズの画像をH/f×W/f×cサイズの潜在表現に変換します。ここでfはダウンサンプリング係数、cは潜在チャネル数です。デコーダーは潜在表現をピクセルに戻します。Rombach氏らは、GANの識別器のような知覚損失とパッチベースの敵対的目的関数を使ってこのオートエンコーダーを学習し、再構成画像の鮮明さを保ちました。また、標準正規分布に近づける小さなKLペナルティ、またはベクトル量子化で潜在表現を正則化しました。ダウンサンプリング係数を4から16にすると、速度と品質のバランスが取れます。ピクセル空間での学習(f = 1)は低速であり、f = 32では圧縮しすぎてサンプル品質が低下しました。Stable Diffusionのオートエンコーダーはf = 8、チャネル数は4です。以下のコードでは、写真をエンコードして再びデコードし、変換で失われる情報を測定します。
import urllib.request
import numpy as np
import torch
from diffusers import AutoencoderKL
from PIL import Image
# Stable Diffusion's autoencoder, the first stage of a latent diffusion model
vae = AutoencoderKL.from_pretrained("stabilityai/sd-vae-ft-mse")
# Load a photo and scale its pixels to [-1, 1]
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg")).convert("RGB").resize((480, 640))
x = torch.tensor(np.array(image), dtype=torch.float32).permute(2, 0, 1)[None] / 127.5 - 1
# Encode to the latent that diffusion runs on, then decode back to pixels
with torch.no_grad():
latent = vae.encode(x).latent_dist.mode()
recon = vae.decode(latent).sample.clamp(-1, 1)
psnr = 10 * torch.log10(4 / torch.mean((recon - x) ** 2))
print(f"image {tuple(x.shape)} -> latent {tuple(latent.shape)}: {x.numel() // latent.numel()}x fewer values")
print(f"reconstruction PSNR: {psnr:.1f} dB")
Image.fromarray(((recon[0] + 1) * 127.5).byte().permute(1, 2, 0).numpy()).save("bus_reconstructed.jpg")image (1, 3, 640, 480) -> latent (1, 4, 80, 60): 48x fewer valuesとreconstruction PSNR: 23.0 dBが出力されます。保存されたbus_reconstructed.jpgではバス、人々、道路は保たれていますが、バス側面の小さな文字は崩れています。4チャネルの潜在表現では保持できない細部です。
第2段階では、これらの潜在表現で通常の拡散モデルを学習します。学習時には画像をエンコードし、ランダムなステップでガウスノイズを加え、そのノイズを予測するようにノイズ除去ネットワークを学習させます。元の研究ではU-Net、新しいモデルの多くでは拡散Transformerを使用します。整流フローモデルでは、ノイズをクリーンな潜在表現へ運ぶ速度を予測します。条件はクロスアテンション層を介して取り込まれ、潜在表現がテキストプロンプト、クラスラベル、セマンティックマップの埋め込みを参照できるようにします。生成では、ランダムな潜在ノイズから始め、条件に従って段階的にノイズを除去し、最後にデコーダーを一度実行します。そのため、コストのかかる各ステップを小さな潜在表現上で実行できます。
Stable Diffusionから現在のモデルまで#
- Stable Diffusion: 2022年8月にリリースされ、512×512のテキスト画像生成にLDMの手法を適用しました。64×64×4の潜在表現、8億6,000万パラメーターのU-Net、CLIPテキストエンコーダーを使用し、重みを誰でもダウンロードできました。
- Stable Diffusion 3: オートエンコーダーを16チャネルに変更し、4チャネルで25.12 dBだった再構成PSNRを28.62 dBに引き上げました。また、U-Netをマルチモーダル拡散Transformerに置き換え、整流フローで学習しました。Black Forest LabsのFLUX.1モデルも、整流フローTransformerで16チャネルの潜在表現をノイズ除去します。
- 動画と音声: 動画生成モデルはクリップを空間と時間の両方で圧縮します。OpenAIはSoraについて、動画を低次元の潜在空間に圧縮し、時空間パッチに分割すると説明しています。AudioLDMとStability AIのStable Audioは、スペクトログラムまたは波形の潜在表現に同じ手法を適用します。
- 潜在整合性モデル: LDMを蒸留し、20~50ステップではなく2~4ステップで生成できるようにします。これにより、ほぼリアルタイムの生成が可能になります。
LDMと関連用語#
- ピクセル空間拡散モデル: すべてのピクセルに対してノイズ付加とノイズ除去のプロセスを実行します。LDMも拡散モデルの一種であり、プロセスを実行する場所だけが異なります。
- 変分オートエンコーダー: VAEはサンプリングした潜在表現を1回の処理でデコードして生成し、サンプルはぼやける傾向があります。LDMではVAE形式のオートエンコーダーを圧縮だけに使い、生成は拡散モデルに任せます。
- Stable Diffusion: Stability AI、CompVis、RunwayによるLDMのファミリーの1つです。そのため、Stable DiffusionのモデルはすべてLDMですが、LDMにはFLUX、動画生成モデル、音声モデルも含まれます。
用途#
LDMは、テキストから画像生成、画像インペインティング、超解像、セマンティックマップからのレイアウト画像生成に使われます。元の論文では、画像インペインティングが当時の最高性能を更新しました。コンピュータービジョンでは、撮影が難しい希少な欠陥、珍しい天候、一般的でない視点などの合成データも生成します。生成画像にはラベルがありませんが、Ultralyticsのauto_annotate関数はフォルダー内の画像にラベルを付け、YOLO26モデルで物体を検出し、Meta SAMセグメンテーションモデルで各検出ボックスの輪郭を描き、トレーニング用のYOLO形式のセグメンテーションラベルを書き込みます。










