Stable Diffusion Pipeline 核心架构
当你输入一句'戴帽子的狗',模型最终输出一张高清图片。中间到底发生了什么?这张图展示的,其实就是 Stable Diffusion 这类潜空间扩散模型(Latent Diffusion Model)最核心的工作流:文本 → 语义向量 → 潜空间噪声 → 逐步去噪 → VAE 解码成图像。
本文将按图逐块拆解,并补充它背后的关键概念与工程细节,让你真正理解扩散模型是如何'画画'的。
核心架构概览
这张图描述了典型的 Stable Diffusion 文生图管线,整体流程可以概括为五个步骤:
- Prompt 文本经过 CLIP 文本编码得到 text embeddings
- 从高斯噪声开始初始化潜变量 latents
- U-Net 在 text embeddings 条件引导下做多步迭代去噪(由 scheduler 控制)
- 得到最终的 conditioned latents
- VAE 解码成真实像素图输出(如 512×512)
文本编码:CLIP 模型的作用
图左侧是 CLIP Model,主要过程包括把文字拆成 token、映射到向量空间,最后输出 Text Embeddings (1×77×768)。
为什么是 77×768?
以 SD 1.x 为例,最大 token 长度固定为 77(包含起止符号等),每个 token 对应一个 768 维语义向量(CLIP Text Encoder 的 hidden size)。因此最终的文本表示是一个矩阵:
$$ \text{text_embeddings} \in \mathbb{R}^{1 \times 77 \times 768} $$
这个 embedding 就是后续 U-Net 去噪过程的'条件信号',相当于让模型知道:它去噪的目标应该朝向'戴帽子的狗'。
潜空间初始化:为何从噪声开始?
图的右上角是 Gaussian Noise(高斯噪声),形状为 1×4×64×64。这就是 Stable Diffusion 的'起点'。
为什么不是直接在 512×512 像素上扩散?
这是 Stable Diffusion 的核心创新:不在像素空间扩散,而在潜空间(latent space)扩散。
- 真实图像:
3×512×512 - 潜空间:
4×64×64
这相当于把图像压缩了 8 倍(512 / 64 = 8),计算量大幅下降。这就是 Latent Diffusion 的意义:更快、更省显存,同时保持画质。
这 4 个通道是什么?
这是 VAE 编码后的 latent feature map 的通道数(对 SD 1.x 常见配置就是 4)。
U-Net:扩散模型真正'画画'的地方
图中黄色块是 U-Net,它是扩散模型的核心网络,负责输入当前 timestep 的 noisy latents(含噪潜变量),结合 text embeddings 条件,输出 噪声预测(或直接预测 x0 / v,取决于训练方式)。
U-Net 为什么叫 U-Net?
因为它是'编码器 - 解码器'的结构,中间通过 skip connection 保留空间细节,适合做图像相关任务。
文本是怎么'进'U-Net 的?
通常通过 Cross-Attention(交叉注意力):Query 来自 latent feature,Key/Value 来自 text embeddings。这意味着模型每一步去噪时,都在不断'对齐'文字语义与图像潜空间结构。

