什么是抽样?
采样器负责执行去噪步骤。
为了生成图像,Stable Diffusion 首先在潜在空间中生成一个完全随机的图像。然后噪声预测器估计图像的噪声。从图像中减去预测的噪声。这个过程重复十几次。最后,你会得到一个干净的图像。
这个去噪过程称为采样,因为 Stable Diffusion 在每个步骤中都会生成一个新的样本图像。采样中使用的方法称为采样器或采样方法。
采样只是稳定扩散模型的一部分。阅读文章“稳定扩散如何工作?” 如果你想了解整个模型。
下面是一个实际的采样过程。采样器逐渐产生越来越清晰的图像。
每个去噪步骤后的图像。
虽然框架相同,但有许多不同的方法可以执行此去噪过程。这通常是速度和准确性之间的权衡。
噪音时间表
您一定已经注意到嘈杂的图像逐渐变成清晰的图像。噪音时间表控制每个采样步骤的噪音水平。噪声在第一步最高,在最后一步逐渐降低到零。
在每个步骤中,采样器的工作是生成噪声级别与噪声计划相匹配的图像。
15 个采样步骤的噪声时间表。
增加采样步骤的数量有什么影响?每个步骤之间的降噪较小。这有助于减少采样的截断误差。
比较下面 15 步和 30 步的噪音时间表。
30 个采样步骤的噪声时间表。
采样器概述
在撰写本文时,AUTOMATIC1111 中有 19 个采样器可用。随着时间的推移,这个数字似乎在增长。有什么区别?
AUTOMATIC1111 中的采样器。
您将在本文的后面部分了解它们是什么。技术细节可能让人不知所措。因此,我在本节中包括了一个鸟瞰图。这应该可以帮助您大致了解它们是什么。
老式 ODE 求解器
让我们先淘汰简单的。名单上的一些采样器是一百多年前发明的。它们是常微分方程 (ODE) 的老式求解器。
- Euler – 最简单的求解器。
- Heun – 更准确但更慢的 Euler 版本。
- LMS(线性多步法)——速度与欧拉相同,但(据说)更准确。
祖先取样器
您是否注意到某些采样器的名称只有一个字母“a”?
- 欧拉
- DPM2a
- DPM++ 2S 一
- DPM++ 2S 卡拉斯
他们是祖先采样者。祖先采样器在每个采样步骤中向图像添加噪声。它们是随机抽样器,因为抽样结果具有一定的随机性。
请注意,许多其他人也是随机采样器,即使他们的名字中没有“a”。
使用祖先采样器的缺点是图像不会收敛。比较下面使用 Euler a 和 Euler 生成的图像。
欧拉 a 不收敛。(示例步骤 2 – 40)
欧拉收敛。(采样步骤 2-40)
使用 Euler a 生成的图像不会在高采样步长处收敛。相比之下,欧拉的图像收敛得很好。
为了再现性,希望图像会聚。如果你想产生轻微的变化,你应该使用变种。
卡拉斯噪音时间表
带有标签“Karras”的采样器使用 Karras 文章中推荐的噪声时间表。如果仔细观察,您会发现接近尾声的噪声步长较小。他们发现这可以提高图像质量。
默认和 Karras 噪音时间表之间的比较。
NO 和 PLMS
DDIM(去噪扩散隐式模型)和 PLMS(伪线性多步法)是原始稳定扩散 v1 附带的采样器。DDIM 是最早为扩散模型设计的采样器之一。PLMS 是 DDIM 的更新和更快的替代方案。
它们通常被视为过时的并且不再被广泛使用。
DPM 和 DPM++
DPM(扩散概率模型求解器)和 DPM++ 是为 2022 年发布的扩散模型设计的新采样器。它们代表了一系列具有相似架构的求解器。
DPM 和 DPM2 相似,除了 DPM2 是二阶的(更准确但更慢)。
DPM++ 是对 DPM 的改进。
DPM adaptive 自适应调整步长。它可能很慢,因为它不能保证在采样步骤数内完成。
联合电脑
UniPC(Unified Predictor-Corrector)是2023年发布的新采样器,受ODE求解器中预测校正方法的启发,可以在5-10步内实现高质量的图像生成。
k-扩散
最后,您可能听说过 k-扩散这个术语并且想知道它是什么意思。它只是指 Katherine Crowson 的 k-diffusion GitHub 存储库和与之关联的采样器。
该存储库实现了 Karras 2022 文章中研究的采样器。
基本上,AUTOMATIC1111中除了DDIM、PLMS和UniPC之外的所有采样器都是从k-diffusion借来的。
评估采样器
如何选择采样器?您将在本节中看到一些客观比较,以帮助您做出决定。
图像融合
在本节中,我将使用最多 40 个采样步骤的不同采样器生成相同的图像。第 40 步的最后一张图像用作评估采样收敛速度的参考。欧拉方法将用作参考。
Euler、DDIM、PLMS、LMS Karras 和 Heun
首先,让我们将 Euler、DDIM、PLMS、LMS Karras 和 Heun 作为一个整体来看,因为它们代表老式 ODE 求解器或原始扩散求解器。DDIM 收敛于与 Euler 相同的步骤,但有更多变化。这是因为它在采样步骤中注入了随机噪声。
Euler、DDIM、PLMS、LMS Karras 和 Heun 的图像收敛(越低越好)。
PLMS 在此测试中表现不佳。
LMS Karras 似乎很难收敛并稳定在较高的基线。
Heun 收敛速度更快但速度慢两倍,因为它是二阶方法。例如,我们应该将 30 步的 Heun 与 15 步的 Euler 进行比较。
祖先取样器
如果稳定、可重现的图像是您的目标,则不应使用祖先采样器。所有的祖先采样器都不收敛。
祖先采样器收敛不好(越低越好)。
DPM 和 DPM2
DPM fast 收敛不好。DPM2 和 DPM2 Karras 的性能优于 Euler,但同样以慢两倍为代价。
DPM adaptive 表现得非常好,因为它使用自己的自适应采样步骤。它可能非常慢。
DPM 采样器的收敛性(越低越好)。
DPM++ 求解器
DPM++ SDE 和 DPM++ SDE Karras 具有与祖先采样器相同的缺点。它们不仅不收敛,而且随着步数的变化,图像也会出现明显的波动。
DPM++ 2M 和 DPM++ 2M Karras 表现良好。当步数足够多时,Karras 变体收敛得更快。
DPM++ 采样器的收敛性(越低越好)。
联合电脑
UniPC 的收敛速度比 Euler 慢一点,但还不错。
速度
每种方法的相对渲染时间(越低越好)
DPM adaptive虽然在收敛方面表现不错,但也是最慢的。
您可能已经注意到其余的渲染时间分为两组,第一组花费大约相同的时间(大约 1 倍),另一组花费大约两倍的时间(大约 2 倍)。这只是反映了求解器的顺序。二阶求解器虽然更准确,但需要对去噪 U-Net 进行两次评估。所以它慢了 2 倍。
质量
当然,如果图像看起来很糟糕,速度和收敛就毫无意义。
最终图像
让我们首先看一下图像的样本。
欧拉
嘿
不
管理系统
LMS 卡拉斯
欧拉
DPM2
DPM2a
DPM2 卡拉斯
DPM2 卡拉斯
DPM ++2M 卡拉斯
DPM++ 2S 卡拉斯
DPM++ 2S 一
DPM++自适应
DPM++ 快
DPM++ SDE 卡拉斯
DPM++ SDE
联合电脑
DPM++ fast 失败得很厉害。祖先样本没有收敛到其他采样器收敛到的图像。
祖先采样器倾向于收敛到小猫的图像,而确定性采样器倾向于收敛到猫。没有正确答案,只要它们对你来说好看。
感性品质
即使没有收敛,图像仍然看起来不错。让我们看看每个采样器生成高质量图像的速度。
您将看到使用 BRISQUE(盲/无参考图像空间质量评估器)测量的感知质量。它是衡量自然图像质量的评估器。
DDIM 在这方面的表现出奇的好,能够在短短 8 步内生成组内最高质量的图像。
DDIM、PLMS、Heun 和 LMS Karras 的图像质量(越低越好)。
除了一两个例外,所有祖先采样器在生成高质量图像方面的表现都与 Euler 相似。
祖先采样器的图像质量(越低越好)。
DPM2 采样器略胜 Euler。
DPM 采样器的图像质量(越低越好)。
DPM++ SDE 和 DPM++ SDE Karras 在该质量测试中表现最佳。
DPM++ 采样器的图像质量(越低越好)。
UniPC 在低步上比 Euler 稍差,但在高步上与它相当。
UniPC采样器的图像质量(越低越好)。
那么……哪个最好?
以下是我的建议:
- 如果你想使用快速、融合、新颖且质量不错的东西,最好的选择是
- DPM++ 2M Karras 20 – 30 步
- 具有 20-30 个步骤的 UniPC。
- 如果您想要高质量的图像并且不关心收敛性,那么不错的选择是
- DPM++ SDE Karras 具有 8-12 个步骤(注意:这是一个较慢的采样器)
- 否,需要 10-15 个步骤。
- 如果您喜欢稳定、可重现的图像,请避免使用任何原始采样器。
- 如果您喜欢简单的东西,Euler 和 Heun 是不错的选择。减少 Heun 的步骤以节省时间。
采样器解释
您将在 AUTOMATIC1111 中找到有关可用采样器的信息。这些采样器的内部工作本质上是相当数学化的。我只会详细解释欧拉(最简单的)。他们中的许多人共享欧拉的元素。
欧拉
Euler 是最直接的采样器。它在数学上与欧拉求解常微分方程的方法相同。它是完全确定性的,这意味着在采样期间不会添加随机噪声。
以下是逐步采样。
第 1 步:噪声预测器从潜在图像中估计噪声图像。
第二步:根据噪声表计算需要减去的噪声量。这是当前和下一步之间的噪声差异。
第 3 步:将潜像减去归一化噪声图像(来自第 1 步)乘以要减少的噪声量(来自第 2 步)。
重复步骤 1 到 3,直到噪声计划结束。
噪音时间表
但是你怎么知道每一步的噪声量呢?实际上,这是你告诉采样器的事情。
噪音时间表告诉采样器每一步应该有多少噪音。为什么模型需要这些信息?噪声预测器根据假设存在的噪声总量来估计潜在图像中的噪声。(这就是它的训练方式。)
15 个采样步骤的噪声时间表。
第一步的噪音最大。噪声逐渐减小,并在最后一步降至零。
更改采样步数会更改噪声时间表。实际上,噪音时间表变得更加顺畅。采样步骤数越多,任意两个步骤之间的噪声降低越小。这有助于减少截断错误。
从随机抽样到确定性抽样
您是否想知道为什么可以使用确定性 ODE 求解器解决随机采样问题?这称为概率流公式。您不是解决样本如何演变,而是解决其概率分布的演变。这与求解随机过程中的概率分布而不是样本轨迹相同。
与漂移过程相比,这些 ODE 求解器使用以下映射。
- 时间→噪音
- 时间量化 → 噪音时间表
- 位置 → 潜像
- 速度 → 预测噪声
- 初始位置→初始随机潜像
- 最终位置 → 最终清晰潜像
采样示例
下面是使用 Euler 方法的文本到图像的示例。噪音时间表规定了每个步骤中的噪音水平。采样器的工作是在每个步骤中将噪声减少恰到好处的量以匹配噪声计划,直到在最后一步为零。
使用 Euler 方法和 15 个采样步骤进行降噪。
欧拉
欧拉祖传(Euler a)采样器类似于欧拉采样器。但在每一步,它都会减去比应有的更多的噪声,并添加一些随机噪声以匹配噪声时间表。去噪后的图像取决于前面步骤中添加的特定噪声。所以它是一个祖先采样器,从某种意义上说,图像去噪的路径取决于每一步中添加的特定随机噪声。如果再做一次,结果会不一样。
不
去噪扩散隐式模型 (DDIM) 是解决扩散模型的首批采样器之一。它基于这样的想法,即每一步的图像都可以通过添加以下三个组件来近似。
- 最终图像
- 图像方向指向当前步的图像
- 随机噪声
在我们到达最后一步之前,我们如何知道最终图像?DDIM 采样器用去噪后的图像对其进行近似。类似地,图像方向由噪声预测器估计的噪声近似。
LMS 和 LMS 卡拉斯
与欧拉方法非常相似,线性多步法 (LMS) 是求解常微分方程的标准方法。它旨在通过巧妙地使用先前时间步长的值来提高准确性。AUTOMATIC1111 默认使用最多 4 个最后值。
LMS Karras 使用 Karras 噪音计划。
嘿
Heun 法是对 Euler 法更精确的改进。但是它需要在每一步中预测噪声两次,所以它比 Euler 慢两倍。
DPM 采样器
扩散概率模型求解器 (DPM-Solvers) 属于新开发的扩散模型求解器系列。它们是 AUTOMATIC1111 中的以下求解器。
- DPM2
- DPM2 卡拉斯
- DPM2a
- DPM2 卡拉斯
- DPM 快
- DPM自适应
- DPM 卡拉斯
DPM2 是 DPM-Solver 文章中的 DPM-Solver-2(算法 1)。求解器精确到二阶。
DPM2 Karras 除了使用 Karras 噪声调度程序外,与 DPM2 相同。
DPM2 a 几乎与 DPM2 相同,只是在每个采样步骤中添加了噪声。这使它成为一个祖先采样器。
DPM2 a Karras 几乎与 DPM2 a 相同,除了使用 Karras 噪音时间表。
DPM Fast 是 DPM 求解器的一个变体,具有统一的噪声时间表。直到第一个订单都是准确的。所以它的速度是 DPM2 的两倍。
DPM adaptive 是具有自适应噪声调度的一阶 DPM 求解器。它会忽略您设置的步数并自适应地确定自己的步数。
DPM++ 采样器是 DPM 的改进版本。
联合电脑
UniPC(Unified Predictor Corrector method)是2023年新开发的扩散采样器,由两部分组成
- 统一预测器 (UniP)
- 统一校正器 (UniC)
它支持任何求解器和噪声预测器。