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

