Latent Diffusion:把扩散模型从「像素空间」搬到「压缩潜空间」,算力砍掉一个数量级
🎯 为什么重要:扩散模型好是好,就是太烧钱
2021 年底,扩散模型(DDPM/ADM)已经在图像生成上刷新 SOTA,但论文开篇就甩出两个吓人的数字:
· 训练:150–1000 V100 天(指 ADM [15])
· 采样:50k 张图需要 5 天 on 单卡 A100
原因:扩散模型在像素空间反复去噪(25-1000 步),每步都要把整个 U-Net 跑一遍,每步都在 1024×1024×3 ≈ 300 万维空间里算。
作者敏锐地意识到:这些算力大部分浪费在「人眼根本看不出区别的高频细节」上。论文 §1 把生成拆成两个阶段(Fig.2 的 rate-distortion 图):
| 阶段 | 负责 | 谁来做 |
|---|---|---|
| 感知压缩(perceptual compression) | 去掉高频不可感知细节 | autoencoder(一次训练,多次复用) |
| 语义压缩(semantic compression) | 建模对象、布局、关系的语义结构 | 扩散模型(这次在潜空间做) |
把这两个阶段解耦,扩散模型就能「专注做它最擅长的事」——建模语义结构,而把「保留高频细节」交给轻量 autoencoder 的解码器。结果:同样的语义质量,算力大幅下降。这是扩散模型从「大厂专属」走向「人人可跑」的关键一步。
💡 核心思想:先 autoencoder 压维,再潜空间扩散,cross-attention 通用条件化
两个关键设计:
- 下采样因子 f 的甜蜜点是 4–8:太小(f=1,纯像素)→ 算力浪费在高频细节;太大(f=32)→ 感知信息丢太多,质量崩。论文 §4.1 实验确定 f∈{4,8} 是质量/效率最优区间(Fig.6)。
- Cross-attention 作为「万能条件接口」:以前做文本条件扩散要改架构,做语义图条件又要改架构——LDM 把所有条件(文本、类别、bbox、语义图、图像)都用同一个 cross-attention 接口喂入 U-Net 中间层。条件 $y$ 先经领域编码器 $\tau_\theta$ 编码成 token,再与 U-Net 特征做 attention。这一抽象让 LDM 成了真正的「通用条件生成器」。
🛠️ 三个让 LDM 真正落地的关键设计
| 设计 | 心智 | 为什么必要 |
|---|---|---|
| ① 感知损失 + 对抗损失训 autoencoder | L1 重建 + LPIPS 感知 + PatchGAN 判别器,确保 z → x̂ 锐利不糊 | 纯 L2 重建会出模糊图(像素平均);对抗损失把重建拉回「图像流形」上,让潜空间保留高频纹理 |
| ② KL-reg 或 VQ-reg 正则潜空间 | 两种方案:KL 正则(VAE 风格,连续 z)或 VQ 量化(离散 z) | 避免潜空间方差爆炸 / 训练发散;论文报告两者效果相近(VQ 略胜)——后续 Stable Diffusion 选了 KL-reg |
| ③ Cross-attention 统一条件接口 | $\tau_\theta(y)$ 把条件编码为 token,U-Net 中间层做 Attention(Q=u, K=V=τ_θ(y)) | 同一架构可吃文本/类别/语义图/图像——以前每加一种条件都要改 backbone,现在只换 $\tau_\theta$ |
传统 DM 的 U-Net 既要学「这里有一只猫」(语义)又要学「猫毛纹理应该长这样」(高频细节)——两个目标竞争同一份算力。LDM 把高频细节交给一个小 autoencoder(一次性训好),扩散模型只学语义结构。结果是:相同的语义质量,扩散要拟合的维度从 300 万降到约 6 万(48× 砍,对应 f=8 推荐配置),算力 / 显存都同步下降。
📊 关键结果:训练/采样 2.7× 提速,FID 1.6× 改善,多任务 SOTA
Table 6:训练/采样效率(inpainting 任务,同算力对比)
| 模型 | 训练吞吐 (samples/s) | 采样吞吐 @256 (samples/s) | 采样吞吐 @512 | 训练时 / epoch | FID@2k |
|---|---|---|---|---|---|
| LDM-1(纯像素基线) | 0.11 | 0.26 | 0.07 | 20.66 h | 24.74 |
| LDM-4(KL,w/ attn) | 0.32 | 0.97 | 0.34 | 7.66 h | 15.21 |
Table 1:无条件生成 FID(多个数据集 SOTA)
| 数据集 | 之前 SOTA | LDM |
|---|---|---|
| CelebA-HQ 256² | LSGM 7.22 / UDM 7.16(likelihood-based SOTA) | 5.11(likelihood-based 新 SOTA) |
| FFHQ 256² | StyleGAN 4.16 | 4.98 |
| LSUN-Churches | StyleGAN2 3.86 / DDPM 7.89 | 4.02(LDM-8,逼近 StyleGAN2) |
| LSUN-Bedrooms | ADM 1.90 | 2.95(LDM-4,接近 ADM,参数仅其一半) |
Table 3:ImageNet 256² 类条件生成
| 方法 | FID ↓ | IS ↑ | Precision ↑ | Recall ↑ | 参数量 |
|---|---|---|---|---|---|
| BigGAN-deep | 6.95 | 203.6 | 0.87 | 0.28 | 340M |
| ADM | 10.94 | 100.98 | 0.69 | 0.63 | 554M |
| ADM-G(引导) | 4.59 | 186.7 | 0.82 | 0.52 | 608M |
| LDM-4(class-cond) | 10.56 | 103.49 | 0.71 | 0.62 | 400M |
| LDM-4-G(引导) | 3.60 | 247.67 | 0.87 | 0.48 | 400M |
Table 2:文本→图像(MS-COCO 256²):LDM-KL-8-G FID 12.63 / IS 30.29,参数 1.45B(与 GLIDE 等同期扩散/自回归模型持平,显著更少参数)。
Table 7:Places Inpainting(512²):LDM-4 (big, w/ finetune) FID 9.39,超过 LaMa 12.0、CoModGAN 10.4 等专门设计的 inpainting 模型。
Table 4:用户研究:SR 任务 30.4% 偏好 LDM-SR vs 16.0% 偏好 pixel-DM;Inpainting 任务 21.0% LDM vs 13.6% LaMa。
🌐 在领域中的位置
LDM 是「扩散模型民主化」的分水岭。它把「先压缩、再生成」的两阶段思路注入主流,cross-attention 也成了后续所有条件扩散模型的标准接口(ControlNet、DiT、视频扩散、3D 扩散全部沿用)。关联线索:T05 扩散策略谱系(动作扩散也常借鉴潜空间思想)。
❓ 常见误区
「潜空间扩散」和「VAE 生成」是一回事吗?
不是。VAE 直接从高斯采样 z 然后解码,潜空间没有结构化的生成过程,所以 VAE 出图模糊。LDM 在 VAE 的潜空间里训一个扩散模型——扩散模型负责「把噪声 z_T 一步步变成有意义的 z_0」,VAE 只负责「像素 ↔ 潜向量」的转换。VAE 是底座,扩散是大脑。
下采样因子 f 选 4 还是 8?
论文 §4.1 给出实验曲线(Fig.6):f=4 保真度最高(细节多),f=8 算力最省。Stable Diffusion v1 选了 f=8(潜空间 64×64×4,从 512×512×3 压缩 48×);高分辨率任务(如 1024²)时 f=4 更好。论文结论:「LDM-{4,8} 是近-optimal 点」。
autoencoder 为什么不直接用普通的 VAE?
普通 VAE 的 L2 + KL 损失倾向出模糊重建(像素级高斯假设)。LDM 用 L1 + LPIPS(感知损失)+ PatchGAN(对抗损失)联合训练——LPIPS 让重建对齐人眼感知,PatchGAN 强迫高频纹理真实。这是从 VQGAN [Esser 2021] 借来的成熟方案。
Cross-attention 为什么重要?以前做条件生成不也有「拼接」或「AdaGN」吗?
拼接和 AdaGN 只能吃定长向量条件(如类别标签)。Cross-attention 能吃变长 token 序列——文本(变长)、bbox 集合、语义图(变空间维度)——无需改架构,只换条件编码器 $\tau_\theta$。这一抽象让同一个 U-Net 骨干可以训出文本、类别、布局、语义图等多种条件生成器,工程上极省心。
那它和 Stable Diffusion 是什么关系?
Stable Diffusion v1 就是 LDM 论文方法的具体实例化:同一团队(Rombach 等)、同样架构(KL-reg autoencoder + U-Net 潜扩散 + cross-attention),只是把训练数据从 ImageNet/COCO 换成了 LAION-5B(数十亿图文对)、模型规模扩到 ~1B 参数。LDM 是方法论奠基,Stable Diffusion 是大规模落地的产品。