三分钟秒懂:Stable Diffusion 系列模型的 推理流程
【一】前序
目前常用的主流的AI模型分为两大类: LLM(大语言模型) 和 SD(文生图扩散生成模型)。
LLM 是 基于 transformer架构,核心靠 自注意力机制 生成数据。
而 SD 是基于 diffusion扩散架构,核心靠 逐步去噪 生成数据。
transformer架构 相信大家都很熟悉了(几乎天天都在用), 接下来重点给大家聊聊 Diffusion 的 推理流程。
【二】Stable Diffusion 完整推理流程
先记住核心一句话:
LLM Transformer 是从左到右逐字生成文字;Stable Diffusion 是从满是噪点的纯灰图,一步步擦掉噪声、还原出清晰图片。
1、核心基础组件(C U V)
- CLIP文本编码器(Transformer结构,你熟的自注意力)
你输入的提示词(比如“一只白猫站在草地上”),会交给CLIP Transformer,把文字转换成一组数字向量(文本特征)。
后面画图的核心网络UNet,全靠这组向量知道你想要什么画面。 - UNet(SD核心去噪网络,卷积+注意力混合,不是纯Transformer)
唯一干活的模块:接收「带噪声的图片潜空间张量 + CLIP文字向量」,计算出当前图片里噪声长什么样,输出噪声预测值,用来擦掉噪声。 - VAE解码器
UNet处理的不是真实像素图,是压缩后的小尺寸“潜空间数据”;VAE负责把压缩数据还原成肉眼可见的RGB图片。
2、完整推理分步 大白话流程(以文生图为例)
步骤1:处理文字提示词(CLIP Transformer)
你输入正向prompt、反向prompt(负面提示,比如模糊、畸形、低画质)
- CLIP用自注意力理解词语之间的关系,把文字转成 固定长度 的数字向量;
- 反向prompt向量会约束模型:不要生成向量对应的糟糕画面。
步骤2:生成一张纯随机噪声图(潜空间)
程序先造一张全是杂乱白点黑点的“纯噪声底片”(潜空间格式,尺寸很小,比如512图对应64×64潜图),这是绘图起点。
类比:相当于一张完全糊掉、什么都看不见的照片。
步骤3:循环迭代去噪(核心流程,步数就是采样步数,比如20/28步)
循环N次(采样步数),每一轮做三件事:
- 把当前带噪声的潜图 + CLIP文字向量一起喂进UNet;
- UNet计算:识别出这张图里哪些是无意义噪声,输出噪声预测;
- 采样器(Euler/DPM++等)根据预测的噪声,从原图里减去一部分噪声,画面变清晰一点点;
循环逻辑通俗比喻:
第1轮:全是噪点,只能隐约看出一点轮廓;
第10轮:物体轮廓、颜色出现;
第28轮:几乎所有噪声擦干净,物体细节、光影完整。
和Transformer自注意力的核心区别:
Transformer一次只生成1个字,依赖上文;UNet每一步 修改整张图,靠文本向量全局约束画面。
步骤4:去噪循环结束,得到干净潜空间数据
几十轮循环跑完,噪声基本全部剔除,现在得到一张压缩版的清晰图像数据,还不能直接看。
步骤5:VAE解码,输出最终图片
把压缩潜图送入VAE解码器,还原成正常RGB像素图片,保存/展示。
重点说明:
为什么需要采样步数?
噪声不能一次性全部擦掉,一步擦干净会画面崩坏;分多轮缓慢去除,画面稳定、细节丰富。步数越高画面越好,但速度越慢。UNet里也有注意力层(Cross-Attention交叉注意力)
这是SD连接文字和图片的关键,和自注意力有区别:- 自注意力:只看图片自身像素、文字自身单词;
- 交叉注意力:图片像素作为Query,文字CLIP向量作为Key/Value,让图片每一处像素都对齐文字描述。
简单说:交叉注意力保证“图像中 猫 的位置 对应 文字 里的猫,草 地对应 文字 里的草地”。
3、举个生活化完整例子
需求:生成“阳光下的橘猫,草坪,高清写实”
- CLIP Transformer解析文字,输出「橘猫、阳光、草坪」语义向量;
- 生成一张纯雪花噪点底片;
- 循环28次:每次UNet根据文字向量,擦掉不匹配“橘猫草坪阳光”的噪声,轮廓慢慢浮现;
- 前5步:只有色块,分不清是什么;
- 中间10步:出现猫的轮廓、绿色地面、黄色光斑;
- 最后几步:细化毛发、光影、草叶细节;
- 循环结束,VAE把压缩底片转成真实照片,输出图片。
