Stable Diffusion 核心流程解析:从文本提示到图像生成的潜空间原理

当你输入一句**'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)
为什么是 77×768?
以 SD 1.x 为例,最大 token 长度固定为 77(包含起止符号等),每个 token 对应一个 768 维语义向量(CLIP Text Encoder 的 hidden size)。因此最终的文本表示是一个矩阵:
这个 embedding 就是后续 U-Net 去噪过程的'条件信号',相当于让模型知道:它去噪的目标应该朝向'戴帽子的狗'。
3. 模块二:Gaussian Noise → Latents —— 为什么从噪声开始?
图的右上角是 Gaussian Noise(高斯噪声),形状为 1×4×64×64。这就是 Stable Diffusion 的'起点'。
为什么不是直接在 512×512 像素上扩散?
这是 Stable Diffusion 的核心创新:不在像素空间扩散,而在潜空间(latent space)扩散。
- 真实图像:
3×512×512 - 潜空间:

