Stable Diffusion——采样
什么是采样?
Stable Diffusion生成图像的过程是:
首先在潜在空间中生成一个完全随机的图像,然后使用噪声预测器估计图像中的噪声,将预测得到的噪声从图像中减去,重复这一过程十几次,最后得到一个干净的图像。
这个逐步减噪的过程称为采样,因为Stable Diffusion在每一步中生成一个新的样本图像。采样中使用的方法称为采样器或采样方法。
采样只是Stable Diffusion模型的一部分。如果要理解整个模型,可以阅读“稳定扩散的工作原理是什么”这篇文章。
下面是一个采样过程的示例。采样器逐步生成更干净的图像。
尽管框架相同,但是执行这一减噪过程的方法有很多种。它们之间通常需要在速度和准确性之间做权衡。
噪声概览
您一定已经注意到,嘈杂的图像逐渐变成清晰的图像。噪声表控制每个采样步骤的噪声水平。噪声在第一步最高,在最后一步逐渐降至0。
在每个步骤中,采样器的工作是生成噪声水平与噪声表相匹配的图像。
增加采样步数的效果是什么呢?每个步骤之间的噪声减少会更小,这有助于减少采样的截断误差。
比较下面 15 步和 30 步的噪声表。
采样器概述
老式 ODE 求解器
让我们先剔除简单的。列表中的一些采样器是一百多年前发明的,它们是常微分方程 (ODE) 的老式求解器。
- Euler – 最简单的求解器。
- Heun – 欧拉的更准确但速度较慢的版本。
- LMS(线性多步法)——与欧拉速度相同,但(据说)更准确。
祖先采样器
您是否注意到某些采样器的名字有一个字母“a”?
- Euler a
- DPM2 a
- DPM++ 2S a
- DPM++ 2S a Karras
它们是祖先采样器。祖先采样器在每个采样步骤中都会向图像添加噪声。由于采样结果中存在一定的随机性,因此它们是随机采样器。
请注意,尽管名称中没有“a”,但许多其他采样器也是随机采样器。
使用祖先采样器的缺点是图像不会收敛。下面比较使用Euler a和Euler生成的图像。
使用Euler a生成的图像在高采样步数下不会收敛。相比之下,Euler生成的图像收敛性良好。
为了重现性,使图像收敛是可取的。如果想生成细微变化,应该使用变分种子。
Karras噪声概览
标有“Karras”的采样器使用了Karras文章中推荐的噪声计划。如果仔细观察,你会发现接近末端的噪声步长更小。他们发现这可以提高图像质量。
DDIM 和 PLMS
DDIM(消噪扩散隐式模型)和 PLMS(伪线性多步法)是与原始的 Stable Diffusion v1 一起发布的采样器。
DDIM 是最早为扩散模型设计的采样器之一。PLMS 是 DDIM 的一个新的、更快的替代方案。
它们现在普遍被视为过时的,不再被广泛使用。
DPM 和 DPM++
DPM(扩散概率模型求解器)和 DPM++ 是2022年为扩散模型设计的新的采样器。它们代表了具有相似架构的求解器系列。
DPM 和 DPM2 类似,除了 DPM2 是二阶的(更准确但更慢)。
DPM++ 是 DPM 的改进版本。
DPM adaptive 自适应地调整步长。它可能会比较慢,因为它不保证在采样步数内结束。
UniPC
UniPC(统一预测校正法)是2023年发布的新的采样器。它受到 ODE 求解器中的预测-校正方法的启发,可以在5-10步内生成高质量图像。
k-diffusion
最后,你可能听说过 k-diffusion 这个词,并且困惑它的含义。它仅仅指 Katherine Crowson 的 k-diffusion GitHub 仓库以及相关的采样器。
该仓库实现了 Karras 2022 文章中研究的采样器。
基本上,除了 DDIM、PLMS 和 UniPC 之外,AUTOMATIC1111 中的所有采样器都来自 k-diffusion。
选择采样器?
如何选择采样器?您将在本节中看到一些客观的比较来帮助您做出决定。
图像融合
在本节中,我将使用不同的采样器(最多 40 个采样步骤)生成相同的图像。第 40 步的最后一个图像用作评估采样收敛速度的参考。欧拉方法将被用作参考。
Euler、DDIM、PLMS、LMS Karras 和 Heun
首先,让我们将 Euler、DDIM、PLMS、LMS Karras 和 Heun 作为一组来看看,因为它们代表了老式的 ODE 求解器或原始扩散求解器。DDIM 收敛于欧拉的步长,但有更多变化。这是因为它在采样步骤中注入了随机噪声。
PLMS在这次测试中表现不佳。
LMS Karras似乎很难收敛,并稳定在较高的基线上。
Heun收敛速度更快,但速度慢两倍,因为它是二阶方法。例如,我们应该将 30 步的 Heun 与 15 步的 Euler 进行比较。
祖先采样器
如果稳定、可重复的图像是您的目标,则不应使用祖先采样器。所有祖先采样器并不收敛。
DPM 和 DPM2
DPM fast收敛得不好。DPM2和DPM2 Karras 的性能优于 Euler,但代价是速度慢了两倍。
DPM adaptive性能看似良好,因为它使用自己的自适应采样步骤。它可能会非常慢。
DPM++
DPM++ SDE和DPM++ SDE Karras具有与祖先采样器相同的缺点。它们不仅不收敛,而且图像还会随着步数的变化而大幅波动。
DPM++ 2M和DPM++ 2M Karras表现良好。当步数足够多时,Karras 变体收敛得更快。
UniPC
UniPC 的收敛速度比 Euler 慢一点,但也不算太差。
速度
尽管DPM自适应在收敛方面表现良好,但它也是最慢的。
您可能已经注意到其余的渲染时间分为两组,第一组花费大约相同的时间(约 1 倍),另一组花费大约两倍的时间(约 2 倍)。这反映了求解器的顺序。二阶求解器虽然更准确,但需要对去噪 U-Net 进行两次评估。所以它们的速度慢两倍。
质量
当然,如果图像看起来很糟糕,那么速度和收敛就毫无意义。
最终图像
我们首先看一下图像样本。
Euler | Heun | DDIM |
PLMS | LMS Karras | Euler a |
DPM2 | DPM2 a | DPM2 a Karras |
DPM2 Karras | DPM ++2M Karras | DPM++ 2S a Karras |
DPM++ 2S a | DPM++ Adaptive | DPM++ fast |
DPM++ SDE Karras | DPM++ SDE | UniPC |
DPM++ fast 非常失败。祖先样本没有收敛到其他采样器收敛到的图像。
祖先采样器倾向于收敛到小猫的图像,而确定性采样器倾向于收敛到猫的图像。没有正确的答案,只要它们对你来说看起来不错即可。
感知质量
即使图像没有收敛,图像看起来仍然不错。让我们看看每个采样器生成高质量图像的速度有多快。
您将看到使用BRISQUE(盲/无参考图像空间质量评估器)测量的感知质量。它衡量自然图像的质量。
DDIM 在这方面的表现出人意料地好,能够在短短 8 个步骤内生成组内最高质量的图像。
除了一两个例外,所有祖先采样器在生成高质量图像方面都与欧拉相似。
DPM2 采样器的性能略优于 Euler。
DPM++ SDE和DPM++ SDE Karras在本次质量测试中表现最好。
UniPC 在低步长上比 Euler 稍差,但在高步长上与 Euler 相当。
总结
Euler采样法:
- 优点:简单、快速,容易实现。图像收敛性好。
- 缺点:质量略差,需要更多采样步骤才能达到较好的图像质量。
Heun采样法:
- 优点:相比Euler法更准确,图像质量较好。
- 缺点:需要两次预测噪声,速度较Euler法慢一倍。
DDIM采样法:
- 优点:可以快速生成质量较高的图像。
- 缺点:图像不稳定,多次采样结果不同。
DPM系列采样法:
- 优点:质量整体优于Euler法,收敛性良好。
- 缺点:速度比Euler法慢,DPM自适应版较慢。
DPM++系列采样法:
- 优点:质量很高,尤其是DPM++ SDE。
- 缺点:部分方法图像不稳定,多次采样结果波动大。
UniPC采样法:
- 优点:速度快,20-30步可达较好质量。
- 缺点:低采样步数下质量略差,收敛性较差。
关于DPM系列采样器
DPM2采样法:
- 优点:相比Euler法更准确,可以达到二阶的准确度。图像质量好,收敛性强。
- 缺点:需要两次预测噪声,速度较Euler法慢一倍。
DPM2 Karras采样法:
- 优点:同DPM2,使用Karras噪声计划可以提高高采样步数下的收敛性。
- 缺点:同DPM2,速度较慢。
DPM Fast采样法:
- 优点:速度快,采用统一噪声计划。
- 缺点:只有一阶准确度,质量略差,收敛性较差。
DPM自适应采样法:
- 优点:可以自适应确定采样步数,图像质量好。
- 缺点:速度非常慢,无法控制总采样步数。
DPM++ 2M采样法:
- 优点:质量显著优于DPM,收敛性良好。
- 缺点:速度较DPM系列略慢。
DPM++ 2M Karras采样法:
- 优点:在高采样步数下,收敛性超过DPM++ 2M,质量也略优。
- 缺点:速度较慢。
我该选择哪一个采样器?
以下是我的建议:
如果你想使用快速、融合、新颖且质量不错的东西,那么最好的选择是
- DPM++ 2M Karras,20 – 30 个步骤
- UniPC有 20-30 个步骤。
如果您想要高质量的图像并且不关心收敛,那么不错的选择是
- DPM++ SDE Karras具有 10-15 个步骤(注意:这是一个较慢的采样器)
- DDIM有 10-15 个步骤。
- 如果您喜欢稳定、可重复的图像,请避免使用任何祖先采样器。
- 如果您喜欢简单的东西,Euler和Heun是不错的选择。减少 Heun 的步骤以节省时间。
文章内容引用自Stable Diffusion Samplers: A Comprehensive Guide
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。