一、引言
Stable Diffusion 入门:架构、空间与生成流程概览-CSDN博客
Stable Diffusion 核心模块深度拆解:CLIP、U-Net 与 VAE 原理全解析-CSDN博客
在上一篇博客中,我们已经完成了 Stable Diffusion 核心模块的表层拆解:CLIP 文本编码器负责将用户需求转化为模型可识别的语义信号,U-Net 作为核心生成单元承接生成任务,VAE 负责完成最终的图像渲染。但这只是 "知其然",本节课我们将更进一步,深入 Stable Diffusion 的底层原理,重点解析 U-Net 核心的 Denoise 去噪机制,以及支撑这一机制的数学逻辑与实现细节,让大家不仅知道 "模型能生成图像",更明白 "图像是如何从噪声中被还原出来的"。
二、生成流程
- 用户输入文字 → CLIP 编码成语义条件
- 随机噪声初始化 → 进入潜空间
- 迭代 Denoise 去噪循环(核心步骤)
- 每一步:U-Net 根据 当前潜变量 + 时间步 + 文本条件 预测噪声
- 从潜变量中减去预测噪声,逐步逼近清晰图像
- 去噪完成 → 潜特征送入 VAE 解码器
- VAE 解码 → 得到像素空间图像
- 后处理 → 输出最终图片
三、用户输入文字 → CLIP 编码成语义条件
3.1 用户输入提示词 Prompt
用户输入一句自然语言,例如:
A cat sitting on a moon, cyberpunk style
这是人类语言,模型无法直接理解,必须经过 CLIP 文本编码器。
由于SD的输入编码器(InputEncoder)中使用的是OpenAI的Clip模型来理解用户输入的文本,而Clip模型的底层是使用英文 进行训练的,所以Clip模型只接收英文文本,即Stable Diffusion只接收英文输入。如果我们想输入中文,那么可以先通过翻译软件进行翻译成英文之后,再输入到SD中。
3.2 CLIP
把文字 → 模型能懂的语义条件
3.2.1 分词 Tokenization
CLIP 先把句子切成子词(Token):A / cat / sitting / on / a / moon / , / cyberpunk / style
并加上起始、结束、填充符。
3.2.2 词嵌入 + 位置编码
每个 Token → 转换成向量并加入位置信息,让模型知道语序。
3.2.3 Transformer 编码
-
输入编码器(InputEncoder)在接收到用户输入的文本之后,会通过ClipText来理解用户输入的信息,并把理解的信息转换为大小为77 x 768的向量。
-
Clip模型限制了最多可以输入77个token,可以简单理解成77个单词。
-
Clip模型训练时会把大图片切成16x16大小的小图片,然后在提取小图片中的RGB3个颜色通道的数据,并最终把小图片表示成一个16x16x3=768的向量。同时Clip为了让文本Token能更好的与图片信息关联,因此也把token的向量长度设计为768。
-
-
综上所述,ClipText会把用户输入的文本为77x768大小的向量。
-
Clip除了文本(Text)编码器,还有图像(Image)编码器,因此Stable Diffusion除了用文本来创建图之外,还可以使用图片生图片。
四、随机噪声初始化 → 进入潜空间
Stable Diffusion 不从空白开始画 ,而是从标准高斯随机噪声开始。
噪声形状由 VAE 压缩比决定:
- 原图 512×512
- VAE 下采样 8 倍→ 潜空间大小 = 64×64×4
这就是模型真正操作的 "画布"。
五、Denoise去噪流程
图片生成器(Image Generator)在内部首先会在潜空间中生成一张随机的图片,这个图片用 4×64×64 大小的向量表示。它本质上就是一张完全由噪声组成的潜空间图,没有任何实际内容,只是模型生成的起点。
Stable Diffusion 生成图像,本质就是不断去噪 。模型不是 "画" 图像,而是从纯噪声里,一步步把噪声去掉,露出图像。
整个 Denoise 去噪过程,分为两大阶段:
- 前向扩散过程(训练时用):给清晰图像不断加噪声,直到变成纯高斯噪声
- 反向去噪过程(推理生成时用):从纯噪声开始,一步步预测并移除噪声,恢复图像
在生成阶段,模型会使用 U-Net 来不断提升这张随机噪声图的质量。但这个提升过程不是一步完成的,往往需要数十步迭代 才能把噪声完全去掉,因此就引入了 Scheduler 调度器,来控制和驱动这个循环提高质量的过程,直到设定步数执行完成,最终得到一张按文本描述生成好的清晰潜空间图片。
5.1 角色
在正式讲流程前,先搞清楚 4 个核心东西:
-
噪声图(A):就是当前这一步 "糊得看不清" 的潜空间图。
- 初始是纯随机噪声(第 1 步)。
- 后面每一步是上一轮去噪后的结果,噪声越来越少,图越来越清晰。
- 大小:
64×64×4(潜空间尺寸)
-
噪声预测器(U-Net):模型的核心大脑。
- 任务:看图 → 找噪声 → 输出噪声长什么样。
- 在 Stable Diffusion 里,U-Net 就是噪声预测器。
-
正向词 / 负向词(来自 CLIP):
- 正向词 :用户想要的内容(比如 "一只猫在沙滩上")。作用:告诉预测器 "像猫的部分不能删,是图像内容"。
- 负向词 :用户不想要的内容(比如 "模糊、低质量、水印")。作用:告诉预测器 "像这些杂乱东西的部分是噪声,要删掉"。
-
噪声计划 + Step(步骤):
- 噪声计划 :提前定好的噪声强度递减表。比如第 1 步噪声超强,第 10 步噪声极弱。
- Step :当前是第几次去噪(比如 Step 8)。作用:让预测器知道当前噪声有多强,该预测多大比例的噪声。
5.2 流程
Scheduler 调度器每启动一轮循环,就会执行一次完整的 Denoise 去噪。我们以第 t 步为例,完整拆解从「带噪图」到「更清晰图」的 5 步过程:
第①步:预测 "不要的噪声"(基于正向词)
动作 :噪声预测器(U-Net)盯着 噪声图(A) 和 正向词 ,输出 噪声图(B)。
通俗解释:
噪声图(A)是一张被噪声弄脏的 "脏图",正向词相当于给预测器打了个底:「这张图底下应该是一只猫」。预测器会基于这个语义,精准区分内容和噪声:
- 符合「猫」的纹理、形状、结构 → 判定为图像内容,保留
- 杂乱的、不符合「猫」的随机噪点 → 判定为噪声最终输出一张只包含噪声的图(B),也就是这张脏图里「需要被去掉的部分」。
第②步:预测 "不能有的噪声"(基于负向词)
动作 :噪声预测器再次盯着 噪声图(A) 和 负向词 ,输出 噪声图(C)。
通俗解释:
负向词是给预测器加的「质量约束」,相当于告诉它:「我不要模糊、不要重影、不要水印,这些都属于额外的脏东西」。预测器会基于负向词,专门识别那些影响画质的杂项:
- 模糊的区域、重影的纹理、多余的水印 → 判定为「负面噪声」最终输出一张代表 "负面噪声" 的图(C),也就是这张图里「绝对不能出现的部分」。
第③步:做减法,得到 "差异噪声"(D = B - C)
动作 :用 第①步的噪声(B) 减去 第②步的负面噪声(C) ,得到 差异噪声图(D)。
通俗解释:
B 是「整体需要去掉的噪声」,C 是「额外需要去掉的负面噪声」。用 B 减去 C,本质是强化真正需要去除的噪声:把那些既不属于正向内容、又属于负面杂项的部分放大,让模型更坚决地去掉这些 "双重脏点"。
第④步:放大细节 + 融合(D × CFG + 加回 C)
动作:
- 把 差异噪声(D) 乘以一个系数 CFG(放大比例)。
- 把放大后的 D,和 负面噪声(C) 相加,得到 最终不需要的噪声图(E)。
通俗解释:
- CFG(无分类器引导强度) :可以理解为 "固执程度 "。
- CFG 大:模型更听文字的话,严格去掉噪声,图像更贴合文本,但可能太死板、不自然。
- CFG 小:模型比较自由,图像更自然、多样,但可能没那么贴合文字。
- 乘以 CFG 后,差异噪声的细节更明显。
- 再加回 C,就得到了一个精准的 "噪声屏蔽列表"(E)
第⑤步:最终去噪(A - E = F)
动作 :用 原始噪声图(A) 减去 最终不需要的噪声图(E) ,得到 去噪后的高质量噪声图(F)。
通俗解释:
- A 是现在的 "脏图",E 是我们算出来的 "脏部分"。
- 减去 E,就是把脏部分去掉。
- 得到的 F 就是 这一步去噪后的结果。
关键逻辑:
- 这一步之后,图就从 A 变成了 F。
- F 比 A 噪声更少、更清晰。
- 然后 F 会作为下一轮的输入(A),继续循环几十次。
把整个流程比作擦玻璃:
- 噪声图(A):被厚灰尘完全盖住的玻璃。
- 正向词 :告诉你 "玻璃底下画的是一只猫"。
- (擦的时候要保留猫的形状)
- 负向词 :告诉你 "不要有灰尘印、不要有划痕"。
- (擦的时候要重点去掉这些)
- 噪声预测器 :你的眼睛。
- 先看哪里是灰尘(B)。
- 再看哪里是讨厌的脏(C)。
- Denoise 计算 :
- 用眼睛找出差异(D)。
- 加大力度擦(CFG)。
- 得到最终要擦的范围(E)。
- 最终结果(F) :
- 把灰尘擦掉,玻璃就清晰一点了。
六、去噪完成 → 潜特征送入 VAE 解
经过前面几十轮 Denoise 去噪后,我们已经得到了一张几乎无噪声的潜空间特征图(也就是你图里的「潜特征」):
- 尺寸:
64×64×4(Stable Diffusion 1.5 标准潜空间大小) - 本质:一串抽象的数学向量,人类肉眼完全看不见
- 状态:已经完全符合用户的正向词 / 负向词要求,只等「渲染成图」
现在要把去噪完成的潜空间特征图 ,完整输入到 VAE 解码器(Decoder) 中。
- 潜空间:是模型内部运算的「低维压缩空间」,计算量小、效率高,但不可视化
- 像素空间:是人类能看到的「高维真实图像空间」,有 RGB 三通道、可直接观看
VAE 就是连接这两个空间的唯一桥梁,它的解码器专门负责「把潜空间的抽象特征,还原成像素空间的真实图像」。
七、VAE 解码 → 得到像素空间图像
VAE 解码器的核心任务:把 64×64×4 的低维潜特征,上采样 8 倍 ,还原成 512×512×3 的高维 RGB 像素图像。
7.1 流程
7.1.1 输入:潜特征 z_0(64×64×4)
这是去噪完成的最终潜空间特征,包含了图像的所有语义、结构、细节信息。
7.1.2 多层上采样 + 卷积还原
VAE 解码器通过转置卷积(反卷积)+ 普通卷积的组合,逐步放大特征图:
- 第 1 层:64×64 → 128×128,补全中尺度结构
- 第 2 层:128×128 → 256×256,细化物体形状
- 第 3 层:256×256 → 512×512,还原细节纹理
每一层卷积都会做两件事:
- 把低维特征「放大」到更高分辨率
- 融合细节信息,让图像更清晰、更真实,避免模糊和失真
7.1.3 输出:RGB 像素图像 512×512×3
最终输出一张人类肉眼可直接观看的彩色图像:
- 3 个通道分别对应红(R)、绿(G)、蓝(B)三原色
- 每个像素点都有 0~255 的亮度值,构成完整的画面
7.2 为什么可以精准还原?
因为 VAE 是和 Stable Diffusion 一起训练的:
- 训练时,VAE 编码器把真实像素图压缩成潜特征,给 U-Net 训练用
- 训练完成后,VAE 解码器就学会了「潜特征 → 像素图」的精准映射关系
- 相当于提前练好了「图纸→房子」的施工能力,推理时直接用就行
VAE 解码就像「把压缩文件解压」:
- 潜特征 = 压缩包(体积小、看不见内容)
- VAE 解码器 = 解压工具
- 解压后 = 完整的、可直接打开的图片文件
八、后处理 → 输出最终图片
这一步是「收尾工作」,把解码后的原始像素图,处理成可使用、可保存的最终图片,核心包含这些操作:
1. 像素值归一化与格式转换
- VAE 输出的像素值是浮点型(-1~1 或 0~1) ,需要转换成整数型(0~255),符合图片存储标准
- 把浮点张量转换成 PIL Image / OpenCV 可处理的图像格式
2. 尺寸调整与裁剪(可选)
- 如果生成的是 512×512,直接输出;如果需要其他尺寸(如 768×512、1024×1024),做对应缩放或裁剪
- 部分场景会做超分辨率放大,提升图像清晰度(如 Real-ESRGAN)
3. 色彩校正与优化(可选)
- 修正 VAE 解码可能出现的色偏、过曝、欠曝问题
- 调整对比度、饱和度,让画面更符合视觉观感
4. 保存与输出
- 把处理好的图像,保存为 PNG(无损)、JPG(有损)等常用格式
- 展示在 WebUI 界面、导出到本地,完成整个文生图流程
5. 通俗理解
后处理就像「照片冲印」:
- 解码后的像素图 = 刚洗出来的底片
- 后处理 = 裁剪、调色、装裱
- 最终输出 = 你能拿到手、能分享的成品照片
九、总结
table Diffusion 从文字输入到最终出图,是一套环环相扣的完整链路,核心分为 6 大环节:
- 用户输入文字 → CLIP 编码成语义条件:用户输入的正向 / 负向提示词,经 CLIP 文本编码器处理,转化为 U-Net 可识别的文本特征,为后续去噪生成提供语义引导,明确 "要生成什么、不要生成什么"。
- 随机噪声初始化 → 进入潜空间 :图片生成器在潜空间中生成一张
4×64×64大小的纯随机噪声图,作为整个生成过程的起点,这张图仅为抽象向量,无实际图像内容,是后续去噪的初始输入。 - 迭代 Denoise 去噪循环(核心步骤) :这是整个生成流程的核心心脏,由 Scheduler 调度器驱动数十步迭代循环:
- 每一步中,U-Net 作为噪声预测器,结合当前带噪潜变量、时间步(Step)、CLIP 输出的文本条件,精准预测当前图中的噪声;
- 再通过 "预测噪声→计算差异噪声→CFG 放大→移除噪声" 的完整单步去噪流程,从潜变量中减去预测噪声,让图像逐步逼近清晰状态;
- 每一轮循环都由 Scheduler 控制噪声强度与迭代节奏,重复数十次后,完成从纯噪声到清晰潜特征的质量提升。
- 去噪完成 → 潜特征送入 VAE 解码器:迭代去噪完成后,得到符合文本描述的清晰潜空间特征图,将其送入 VAE 解码器,完成从模型内部运算到视觉呈现的过渡。
- VAE 解码 → 得到像素空间图像 :VAE 解码器将
4×64×64的低维潜特征,通过上采样与卷积还原为512×512×3的高维 RGB 像素图像,让抽象特征转化为人类肉眼可直接观看的画面。 - 后处理 → 输出最终图片:对解码后的原始像素图进行格式转换、色彩校正、尺寸调整等优化,最终保存为 PNG/JPG 格式的成品图片,完成从文字到图像的全链路闭环。
Stable Diffusion 的生成本质,是 **"从噪声中还原图像"**:CLIP 负责 "定方向",为去噪提供语义约束;U-Net 负责 "找噪声",通过多步迭代移除噪声、提升图像质量;Scheduler 负责 "控节奏",驱动去噪循环稳定执行;VAE 负责 "做渲染",将抽象潜特征转化为可视化图像。四大核心组件协同配合,最终实现从一句文字到高质量图像的生成,这也是 Stable Diffusion 文生图技术的核心底层逻辑。