想象你走进一间雾气弥漫的石材工坊。正中央摆着一块粗糙的大理石,雾太浓,你根本看不清里面藏着什么——也许是维纳斯,也许只是一块普通的石头。你接过凿子,在雾气中一刀一锤地雕琢。Stable Diffusion 生图,就是这场“雾中雕刻”:模型先给你一团纯随机噪声,也就是那块被浓雾裹住的石头;采样器(Sampler)是雕刻手法,决定每一刀怎么下、下多重;采样步数(Steps)是你总共雕多少刀,决定成品精细到什么程度。换一个采样器,就像换一位老师傅:有人大刀阔斧、几分钟出雏形;有人步步为营、慢工出细活。这篇文章不扯复杂的数学,就用工坊里那些事,把采样器的原理、派别、选择策略一次讲明白,让你下次生图时心里有数。
采样器是连接“噪声”与“美图”的那双手。掌握它,你就能把出图从碰运气变成可控的工艺——这是 AI 绘画从业者从“会玩”走向“专业”的关键一步。
目录
可视化演示
动态演示Stable Diffusi的核心机制,通过架构/数据/状态/性能四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Stable Diffusi:采样器的 采样器的作用原理与去噪生成过程 常见采样器类型与特性对比 核心机制可视化 Stable Diffusi整体架构与关键组件
采样器是什么——雾中雕刻的刀法手册
回到那间雾气弥漫的工坊。你面前的大理石其实不是普通石头——它内部藏着一团被浓雾裹住的半成品雕像,雾就是噪声。雕刻的第一步不是急着动手,而是先搞清楚:雾有多厚?从哪里下刀?采样器就是那个替你回答这两个问题的“刀法手册”。
在 Stable Diffusion 里,真正的雕刻发生在潜空间,也就是大理石内部那套看不见的腔体结构。模型先随机撒下一团高斯噪声作为起点,然后用一个叫 UNet 的“灰尘探测器”估算每块区域的噪声浓度,再按采样器规定的力度把灰尘擦掉。擦一次,雾淡一层,重复若干次,清晰的图像就浮现出来了。
每一轮去噪都可以写成一次简单的“减法”:
所以采样器不是“画家”,而是“雕刻手法”——它不决定雕像长什么样(那是底模和提示词的活),只决定你从乱石到成品走了怎样一条路。同一位模特,大刀阔斧的刀法和步步为营的刀法,最后成品的质感完全不同。
- 当前状态 \(x_t\)这是第 \(t\) 步的“半成品石头”,噪声还没去完,轮廓若隐若现。
- 噪声预测 \(\varepsilon_\theta\)UNet 这个“灰尘探测器”估算当前石头里还剩多少噪声。
- 步长 \(\alpha_t\)采样器决定这一刀削多厚——是贪快冒进,还是稳扎稳打。
- 相减去噪把预测出来的噪声从石头上“擦掉”,得到更清晰的一版,进入下一步循环。
采样步数的作用——雕多少刀才够
工坊老师傅常说:“雕多少刀,比用什么刀更重要。”雕 5 刀,你可能只看到一个模糊的轮廓;雕 20 刀,肌肉线条开始浮现;雕 200 刀,除非你是神匠,否则只是在同一个地方反复打磨。采样步数就是“刀数”。
参数面板里的 Steps(步数)控制去噪循环的执行次数,WebUI 默认值通常在 20~30 之间。步数太少,噪声没擦干净,画面发糊、色块脏;步数太多,每一刀增加的细节越来越少,出图时间却线性上涨——甚至有采样器在极端步数下会把画面“磨花”,出现伪影(画面中奇怪的纹理或水痕)。
画质随步数的提升,是一条先陡后平的曲线:
记住这条曲线:陡峭的起点是“出形期”,平坦的尾巴是“磨光期”。会雕的人不会把 100 刀全花在磨光上,而是用 20 刀出形、再花 10 刀点睛。选步数,选的是“够用”,不是“最多”。
- 完成度 \(D(s)\)雕了 \(s\) 刀之后,画面离“理想状态”还有多远,取值在 0 到 1 之间。
- 上限 \(D_{\max}\)这台工坊(底模 + 提示词)能到达的最精细程度,步数再多也突破不了。
- 指数项 \(e^{-s/\tau}\)剩余“缺失感”随步数指数衰减,其中 \(\tau\) 是收敛速度常数。
- 整体形状完成度先陡升后趋平,拐点之后继续加步数,收益微乎其微。
采样器的两大派系——浪人与学院派
工坊里住着两派性格迥异的雕刻师。浪人派的规矩是:每下一刀都先喝口酒,手抖一下,让刀路带着一点“不可预测的意外”——可能砍出惊喜,也可能砍坏。学院派相反:每刀都记录在案,下一刀永远可以精确重现上一刀的结果。
这两种性格,对应采样器的两大派系:祖先采样器(名字带 a,如 Euler a、DPM++ 2M SDE)和非祖先采样器(如 Euler、DPM++ 2M、DDIM)。非祖先类的每一步都是确定性的:同样的起点、同样的提示词,出来的图可以复现。祖先类每一步额外掷一次骰子,加入随机噪声,让轨迹更“野”,同一设置下每次结果都不同。
它们的区别,只是在确定性结果上是否追加一份随机噪声:
选浪人还是学院派,取决于你在干什么:找灵感时,浪人派给你惊喜;交付复现时,学院派给你稳定。先想清楚你要“惊喜”还是“可复现”,派系就选对了一半。
- 干净预测 \(\hat{x}_{t-1}\)非祖先采样器会先算出这个“确定性的下一步”。
- 随机噪声 \(z_t\)祖先采样器额外掷一次骰子,加入一份标准随机噪声。
- 噪声强度 \(\sigma_t\)每步加的随机量大小,这是祖先类的专属“手抖幅度”。
- 两支流对比当 \(\sigma_t = 0\) 时,公式退化为非祖先采样器,轨迹确定、可复现。
常见采样器逐个认——四位老师傅
工坊里最常用的四位老师傅,各有绝活。老实勤快的 Euler:数学最简单、速度快,适合快速验证构图;随性艺术家 Euler a:比 Euler 多一路随机性,初稿阶段常出人意料的好构图;理工男 DPM++:会记录历史动量,用巧劲加速收敛,细节在同步数下更扎实;严谨机器 DDIM:确定性去噪的代表,常用于需要精确复现的流程。
这些名字里的“2M“是二阶方法的意思,核心是动量修正——像推铅球前先蓄力,把过去几步的方向加权平均,再沿这个方向前进,路线更平滑。名字里的 Karras 后缀则是”节奏表”(调度器),让前期大步快走、后期小步精修,刀还是那把刀,节奏换了。
DPM++ 类采样器的动量更新可以写成:
四位师傅没有绝对高下,只有合适与否。想快出概念稿,找 Euler a;想精修细节,找 DPM++;想批量复现,找 DDIM 或 DPM++ 2M 这类非祖先选手。认熟了人,下次就不用在列表里一个个瞎试了。
- 动量项 \(v_t\)像推铅球前的“蓄力”,记录了过去几步方向的加权和。
- 衰减系数 \(\beta\)过去的信息会慢慢遗忘,通常保留 0.5~0.9 的比例。
- 沿动量更新用动量代替单步噪声预测来移动,路线更平滑,高步数下细节更稳。
速度与质量的天平——会算账的工坊主
工坊接了一个大单:三天要交出 30 座雕像。这时“雕得好”还得配上“雕得快”。速度和质量是一架天平,采样器是砝码的位置——你总得知道把砝码放哪边,才能算出最划算的结果。
出图速度由两个因素决定:单步耗时 × 步数。单步耗时主要看模型大小、显卡、图像分辨率,跟采样器关系不大;采样器真正影响的是“同样的步数,画面走到哪了”——也就是收敛速度。新式采样器(DPM++、UniPC 等)在相同步数下往往比老式采样器收敛得更快、细节更稳,而显存占用差异通常很小。
把“每多花一秒能换多少完成度”算出来,就是采样器的性价比:
会算账的工坊主会盯着“性价比曲线”:每多花一秒,画面提升多少。与其无脑加步数,不如换一个收敛更快的采样器,或者把省下的时间拿去多出几个构图方案。速度与质量从来不是单选题,而是算出来的最优解。
- 总耗时 \(T(s)\)每步耗时乘以步数,步数越多,时间越长。
- 性价比 \(\eta\)单位时间内获得的完成度,是衡量采样器优劣的关键指标。
- 新采样器为什么香同样的步数 \(s\) 下,新采样器的收敛常数 \(\tau\) 更小,完成度更高,\(\eta\) 自然更大。
选择策略指南——先定需求再选刀
接单之前,老匠人会先问清楚:甲方要的是“看方向的草稿”,还是“能交付的成品”?需求不同,刀法就不同。采样器选择的本质也是一样——先想清场景,再挑工具。
新手第一次进工坊,最稳的路径是:默认选 DPM++ 2M Karras,步数 20~30,跑通流程后再微调。试稿和探索阶段:Euler a + 低步数(15~20),快速看构图和风格方向。人像与写实定稿:DPM++ 2M 或 DPM++ SDE Karras,步数 25~35,皮肤和发丝细节更稳。二次元线稿:优先非祖先采样器,保证同一角色多角度风格统一。高清放大阶段:先低步数出小图选优,再配合放大模型和略高步数精修。
把“场景需求”翻译成分数,选型就变成一道算术题:
工坊的最后一课:工具是死的,需求是活的。把“这个采样器好不好”换成“这个场景适不适合它”,你就从“会点按钮”进阶成“会选工具”了。雾会散,雕像会显形,而那个懂得按需下刀的人,永远最有把握。
- 质量分 \(Q(S)\)某场景下采样器 \(S\) 的细节表现,取值 0 到 1。
- 耗时 \(T(S)\)跑完固定步数需要的秒数,花得越少越好。
- 场景权重 \(w\)赶稿时把 \(w_t\) 调大,交付时把 \(w_q\) 调大。
- 取总分最高者算出所有候选采样器的得分,挑最高的那个。
AI 应用场景
电商产品图的批量稳定输出
阶段:图像生成与批量出图
解决的问题:传统电商详情页靠摄影师实拍加后期修图,一组产品图动辄数小时,且每张图光线、角度难以统一。用非祖先采样器(如 DPM++ 2M)加固定随机种子,可以在相同提示词模板下批量生成风格一致、角度可控的产品图,并保证同批次结果可复现。
具体案例:某家居品牌需要 200 张香薰瓶白底图。设计师选用 DPM++ 2M、30 步、固定种子,配合统一的提示词模板批量出图,两小时交付初稿,后期只需统一微调瑕疵,效率比实拍提升数倍。
二次元头像的快速试稿
阶段:草图生成与快速迭代
解决的问题:接单画师最怕“方向错了白画一场”。传统手绘一版草稿要 20 分钟,而用带随机性的祖先采样器低步数出图,可以在几分钟内给出多种构图和姿态供客户挑选,把不确定性留在最便宜的环节。
具体案例:某头像工作室用 Euler a、16 步先出 8 张风格草稿给客户投票,锁定方向后再换 DPM++ 2M、30 步精修出最终成品,客诉率明显下降。
影视概念图的精细定稿
阶段:高清放大与精修
解决的问题:概念设计大图最容易在细节处崩坏——毛发、金属反光、远处建筑结构。新式采样器配合“先小图选优、后放大精修”的策略,可以在高分辨率下保留更多纹理细节,避免画面被反复去噪磨成“塑料感”。
具体案例:影视概念设计师做科幻场景时,首轮用 20 步小图筛选构图,定稿后换 DPM++ SDE Karras、50 步配合放大模型重绘,最终输出接近 4K 级的概念图用于提案。
Python 演示
import mathimport random class TinySampler: """用 64 个噪声粒子模拟 Stable Diffusion 的采样去噪过程.""" TARGET = [(math.sin(i * 0.35) + 1) / 2 for i in range(64)] def __init__(self, strategy="euler", steps=20): self.strategy = strategy self.steps = steps self.particle_list = [random.random() for _ in range(64)] self.momentum_list = [0.0 for _ in range(64)] def fraction(self, step): if self.strategy == "euler": return step / self.steps return 1 - (1 - step / self.steps) ** 1.5 def denoise(self): report = [] for s in range(1, self.steps + 1): f = self.fraction(s) for i in range(64): target = self.TARGET[i] if self.strategy == "euler": self.particle_list[i] = target + (self.particle_list[i] - target) * (1 - f) else: self.momentum_list[i] = 0.7 * self.momentum_list[i] + (target - self.particle_list[i]) self.particle_list[i] += 0.35 * self.momentum_list[i] noise = sum(abs(self.particle_list[i] - self.TARGET[i]) for i in range(64)) / 64 report.append((s, noise)) return report def main(): random.seed(42) for strategy in ("euler", "dpm"): sampler = TinySampler(strategy=strategy, steps=20) report = sampler.denoise() picked = [r for r in report if r[0] in (1, 5, 10, 15, 20)] summary = " ".join("第%d步:%.3f" % (s, v) for s, v in picked) print("[%s] %s" % (strategy, summary)) if __name__ == "__main__": main()
TARGET = [(math.sin(i * 0.35) + 1) / 2 for i in range(64)]构建一个正弦目标信号,代表“最终图像”藏在噪声里的骨架。self.particle_list = [random.random() for _ in range(64)]64 个 0~1 随机数,模拟生图起始的纯噪声。def fraction(self, step):每种采样器对“第几步”有自己的节奏函数,相当于刀法节奏。return 1 - (1 - step / self.steps) ** 1.5新式采样器曲线:前期快速逼近,后期精细微调。self.momentum_list[i] = 0.7 * self.momentum_list[i] + (target - self.particle_list[i])动量项记住历史方向,让路线更顺滑。self.particle_list[i] += 0.35 * self.momentum_list[i]沿动量方向前进,这是 DPM 类方法的精髓。noise = sum(abs(self.particle_list[i] - self.TARGET[i]) for i in range(64)) / 64计算平均绝对误差,衡量“还剩多少噪声”。random.seed(42)固定起点,保证两种策略在相同噪声上竞争,公平对比。
常见误区
误区“我之前把步数拉到 60,还是觉得不够清晰,是不是再调高到 100 就更好了?”
正解步数收益递减,画质曲线先陡后平。步数过高不仅浪费时间,某些采样器还会出现过度平滑甚至伪影。就像雕石头:前 30 刀把轮廓雕出来,后面 70 刀可能只是反复刮同一处,石头反而被磨花。正确做法是先跑 20~30 步看效果,再决定是否加步。
为何常见:UI 上步数是最直观的“数值越大越高级”的旋钮,让人误以为它是质量开关。
误区“我在列表里看到 'DPM++ 2M Karras',Karras 应该也是一种采样器吧?”
正解Karras 不是刀法,是“节奏表”(调度器)。它只决定每一步的步长怎么随时间变化——前期大步、后期小步精修。同一把刀配上不同节奏表,效果会有差异,但算法底子还是 DPM++ 2M 那套。选的时候先看刀法名,再看后缀的调度器。
为何常见:采样器列表把算法名和调度器名连在一起显示,UI 没有区分这两个概念。
误区“同一组提示词,换 Euler a 出二次元,换 DPM++ 出写实,所以采样器决定画风。”
正解画风主要来自底模、LoRA 和提示词,采样器只决定“从噪声走向图像的路线”。同一终点,不同路线只是中途细节不同;换底模才是换了一间工坊。采样器更多影响的是细节锐度、伪影多少、是否可复现,而不是美术风格。
为何常见:新手在探索阶段同时换了采样器和提示词,控制变量没做好,产生了“换了采样器画风就变了”的因果错觉。
误区“DPM++ 这种高级采样器,不加到 40 步以上都是浪费。”
正解恰恰相反,新式采样器的卖点就是“少步数高效收敛”——20~30 步已经能到不错的效果,40 步以上收益很小;真正需要较多步数的反而是某些老式设计。判断标准是看收敛曲线,而不是“功能越强越费资源”。
为何常见:直觉上觉得“高级工具要用力用”,但采样器优化的正是效率,这也是它存在的意义。
面试题
Q1. 采样器在 Stable Diffusion 中的主要作用是什么?
- A.把低分辨率图强行放大
- B.把随机噪声逐步还原成图像← 正确答案
- C.对生成图像做自动锐化
- D.为提示词自动扩展词语
答案:B。采样器负责在多步去噪循环中决定每一步怎么走,把随机噪声一步步“擦”成清晰图像。放大分辨率是放大模型的事,锐化是后处理滤镜的事,扩展词语则属于提示词助手的功能。
Q2. 采样步数太少,最常见的后果是什么?
- A.生成速度明显变慢
- B.画面色彩过于鲜艳
- C.画面模糊细节严重缺失← 正确答案
- D.图片尺寸被自动缩小
答案:C。步数太少意味着去噪循环没跑完,噪声没被擦干净,画面就会发糊、细节缺失。速度变慢是步数太多的问题,色彩和尺寸则与步数无直接关系。
Q3. 关于祖先采样器,下列说法正确的是?
- A.每步都能精确倒推上一步
- B.完全不需要设置采样步数
- C.只适合放大图像分辨率
- D.每步都加入随机性不可回溯← 正确答案
答案:D。祖先采样器(如 Euler a)每一步都会额外加入随机噪声,轨迹带有随机性,不可精确回溯。它同样需要设置步数,也不承担放大图像的工作。
Q4. 以下哪些属于常见的采样器?
- A.Euler a 采样器← 正确答案
- B.DPM++ 系列采样器← 正确答案
- C.PNG 图表压缩工具
- D.DDIM 去噪采样器← 正确答案
答案:ABD。Euler a、DPM++、DDIM 都是主流采样器。PNG 是图片格式,压缩工具与采样无关,属于干扰项。
Q5. Karras 调度器的主要作用是什么?
- A.提高提示词长度上限
- B.增加模型神经元的数量
- C.调整去噪步长随时间曲线← 正确答案
- D.固定图片输出宽高比例
答案:C。Karras 是“节奏表”,它改变每一步去噪步长随时间的分布——前期大步、后期小步精修。提示词长度、神经元数量、宽高比例都和它无关。
Q6. 在相同采样步数下,DPM++ 相比 Euler 通常表现如何?
- A.必定占用更多显存空间
- B.细节更丰富收敛速度更快← 正确答案
- C.只能生成黑白色调图像
- D.不再需要任何采样步数
答案:B。DPM++ 利用动量修正加速收敛,相同步数下通常细节更扎实、完成度更高。显存占用与采样器关系不大,它也不是黑白专用,更不可能不需要步数。
Q7. 采样步数过高之后,可能出现哪些现象?
- A.画质提升趋于停止← 正确答案
- B.出图耗时持续增加← 正确答案
- C.部分采样器出现伪影← 正确答案
- D.分辨率自动翻倍提升
答案:ABC。步数过高时收益递减,画质接近上限不再提升,耗时却线性增长,少数采样器还会产生过度平滑的伪影。分辨率由模型和输出设置决定,不会因为步数变高而翻倍。
Q8. 为什么祖先采样器每一步都要加入随机噪声?
- A.为了降低显卡的内存占用
- B.为了让生成视频更加流畅
- C.探索更大轨迹且过程不可逆← 正确答案
- D.为了提升提示词的权重
答案:C。加入随机噪声是为了在去噪轨迹中引入多样性,探索更大的生成空间,代价是过程不可复现。显存、视频流畅度、提示词权重都不是它加入随机性的目的。
Q9. 做批量电商产品图,追求稳定可复现,应该优先选择?
- A.每步全随机的祖先采样器
- B.任意更换随机种子出图
- C.完全不做任何高清放大
- D.非祖先采样器如 DPM++ 2M← 正确答案
答案:D。批量出图要求同提示词、同种子能稳定复现相同结果,非祖先采样器(如 DPM++ 2M)轨迹确定,最适合这类流程。祖先采样器带随机性,难以精确复现。
Q10. 关于采样器选择策略,下列说法正确的有哪些?
- A.探索阶段低步数快出草稿← 正确答案
- B.精细阶段适当提高采样步数← 正确答案
- C.采样器可完全替代提示词
- D.祖先采样器适合精准复现
答案:AB。探索阶段用低步数快速看构图,定稿阶段适当加步数精修,是推荐的节奏。采样器不能替代提示词;祖先采样器带随机性,恰恰不适合精准复现,反而非祖先采样器才是复现场景的首选。