先说建议
- 如果想使用快速、融合、新颖且质量不错的东西,那么最好的选择是
-
- DPM++ 2M Karras, 20 – 30 个步骤
- UniPC有 20-30 个步骤。
- 如果想要高质量的图像并且不关心收敛,那么不错的选择是
-
- DPM++ SDE Karras 10-15 个步骤(注意:这是一个较慢的采样器)
- DDIM 10-15 个步骤。
- 如果喜欢稳定、可重复的图像,请避免使用任何祖先采样器(祖先采样器是什么?)。
- 如果喜欢简单的东西,Euler和Heun是不错的选择。减少 Heun 的步骤以节省时间。
- 建议使用
trailing
间距法,因为当采样步数较少时,该方法可以生成更高质量、更详细的图像。
DPMSolverMultistepScheduler.from_config(
pipeline.scheduler.config,
timestep_spacing="trailing"
)
- 可以使用
guidance_rescale
以防止过度曝光。较低的值会增加亮度,但某些细节可能会显得褪色。
pipeline.scheduler = DDIMScheduler.from_config(
pipeline.scheduler.config,
rescale_betas_zero_snr=True,
timestep_spacing="trailing"
)
pipeline(prompt, guidance_rescale=0.7, generator=generator).images[0]
Stable Diffusion v2-1 默认生图
使用了 zero SNR 和and trailing timestep spacing
正文
那么什么是采样器?它们如何工作?它们之间有什么区别?应该使用哪一个?
什么是抽样?
为了生成图像,稳定扩散首先在潜在空间中生成完全随机的图像。然后噪声预测器估计图像的噪声。从图像中减去预测的噪声。这个过程重复十几次。最后,你会得到一个干净的图像。
这个去噪过程称为采样,因为稳定扩散在每个步骤中都会生成一个新的样本图像。抽样所采用的方法称为抽样器或抽样方法。
下面是一个正在运行的采样过程。采样器逐渐产生越来越清晰的图像。
虽然框架是相同的,但有许多不同的方法可以执行此去噪过程。这通常是速度和准确性之间的权衡。
通过Stable Diffusion源码,我们可以看到通过传入unet预测噪声和pre latents进行采样
噪音表
您一定已经注意到,嘈杂的图像逐渐变成清晰的图像。噪声表控制每个采样步骤的噪声水平。噪声在第一步最高,在最后一步逐渐降至零。
在每个步骤中,采样器的工作是生成噪声水平与噪声表相匹配的图像。
增加采样步数有什么影响?每个步骤之间的噪音降低幅度较小。这有助于减少采样的截断误差。
比较下面 15 步和 30 步的噪声表。
扩散轨迹
潜空间中的扩散是什么样的?SDXL 样本在 65,536 维的潜在空间中扩散!,所以很难想象。使用 PCA 在二维空间中投影了扩散过程。两个主要组成部分如下所示。
与噪声时间表一致,扩散最初采取较大的步骤,并在接近结束时采取较小的步骤。初始步骤设置图像的全局组成。后面的步骤会完善细节。
样本需要经过复杂的概率分布环境中的训练,才能获得最终的潜在图像。
改变种子
更改图像的种子会生成相似但不同的图像。抽样过程中实际发生了什么?它们的轨迹略有不同,但终点相似。
更改Prompt
更改prompt将极大地改变示例的终点,因为您最终会得到一个非常不同的图像。
采样器概述
Webui自带了多种采样器供选择
Huggingface diffusers库中提供的采样器
将在本文的后面部分了解它们是什么
老式 ODE 求解器
让我们先剔除简单的。列表中的一些采样器是一百多年前发明的。它们是常微分方程 (ODE) 的老式求解器。
- Euler– 最简单的求解器。
- Heun– 欧拉的更准确但速度较慢的版本。
- LMS(线性多步法)——与欧拉速度相同,但(据说)更准确。
祖先采样器
您是否注意到某些采样器的名字有一个字母“a”?
- Euler
- DPM2a
- DPM++ 2S a
- DPM++ 2S Karras
它们是祖先采样器。祖先采样器在每个采样步骤中都会向图像添加噪声。它们是随机采样器,因为采样结果具有一定的随机性。
请注意,许多其他采样器也是随机采样器,尽管他们的名字中没有“a”。
使用祖先采样器的缺点是图像不会收敛。比较使用 Euler a 和下面的 Euler 生成的图像。
Euler a 不收敛
Euler 收敛
使用 Euler a 生成的图像在高采样步长时不会收敛。相比之下,欧拉的图像收敛得很好。
为了再现性,希望图像收敛。如果你想生成轻微的变化,你应该使用变分种子。
Karras
带有“ Karras ”标签的采样器使用Karras 中推荐的噪声表。如果仔细观察,会发现噪声步长在接近末尾时较小。研究发现这提高了图像质量。
在HuggingFace官方提供的schedulers中,我们可以通过传入use_karras_sigmas来使用Karras, 内部会采用Karras方法进行采样,具体使用方法如下:
内部转换逻辑:
DDIM 和 PLMS
原始稳定扩散v1附带了两种采样器,分别是DDIM(去噪扩散隐式模型)和PLMS(伪线性多步方法)。 DDIM 是最早为扩散模型设计的采样器之一。 PLMS 是 DDIM 更新、更快的替代方案。
它们通常被认为已经过时并且不再广泛使用。
DPM 和 DPM++
DPM(扩散概率模型求解器)和 DPM++ 是为 2022 年发布的扩散模型设计的新采样器。它们代表了一系列具有相似架构的求解器。
DPM 和 DPM2 类似,只是 DPM2 是二阶(更准确但速度更慢)。
DPM++ 是对 DPM 的改进。
DPM 自适应自适应调整步长。它可能会很慢,因为它不能保证在采样步骤数内完成。
在HuggingFace官方提供的schedulers中,我们可以通过传入algorithm_type来指定使用的算法 , 内部会采用不同的方法进行采样,具体使用方法如下:
内部实现逻辑:
深入了解的话,可以参考这篇文章 zhuanlan.zhihu.com/p/667869002
UniPC
UniPC(Unified Predictor-Corrector)是 2023 年发布的新采样器。受到 ODE 求解器中的预测器-校正器方法的启发,它可以在 5-10 步内实现高质量图像生成。
k-diffusion
它只是指 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 收敛于欧拉的步长,但有更多变化。这是因为它在采样步骤中注入了随机噪声。
PLMS 在这次测试中表现不佳。
LMS Karras 似乎很难收敛,并稳定在较高的基线上。
Heun 收敛速度更快,但计算速度慢两倍,因为它是二阶方法。例如,我们应该将 30 步的 Heun 与 15 步的 Euler 进行比较。
祖先采样器
如果稳定、可重复的图像是最终目标,则不应使用祖先采样器。 所有祖先采样器并不收敛。
DPM 和 DPM2
DPM fast 收敛得不好。DPM2 和 DPM2 Karras 的性能优于 Euler,但代价是速度慢了两倍。
DPM 自适应性能看似良好,因为它使用自己的自适应采样步骤。它可能会非常慢。
DPM++ 求解器
DPM++ SDE和DPM++ SDE Karras具有与祖先采样器相同的缺点。它们不仅不收敛,而且图像还会随着步数的变化而大幅波动。
DPM++ 2M和DPM++ 2M Karras表现良好。当步数足够多时,Karras 变体收敛得更快。
UniPC
UniPC 的收敛速度比 Euler 慢一点,但还不错。
速度
尽管DPM自适应在收敛方面表现良好,但它也是最慢的。
可能已经注意到其余的渲染时间分为两组,第一组花费大约相同的时间(约 1 倍),另一组花费大约两倍的时间(约 2 倍)。这反映了求解器的顺序。二阶求解器虽然更准确,但需要对去噪 U-Net 进行两次评估。所以它们的速度慢两倍。
质量
当然,如果图像看起来很糟糕,那么速度和收敛就毫无意义。
最终图像
我们首先看一下图像样本。
DPM++ fast 非常失败。祖先样本没有收敛到其他采样器收敛到的图像。
祖先采样器倾向于收敛到小猫的头像,而确定性采样器倾向于收敛到猫的整体图像。没有正确的答案,只要它们对你来说看起来不错即可。
感知质量
即使图像没有收敛,图像看起来仍然不错。让我们看看每个采样器生成高质量图像的速度有多快。
将看到使用BRISQUE(盲/无参考图像空间质量评估器)测量的感知质量。它衡量自然图像的质量。
DDIM 在这方面的表现出人意料地好,能够在短短 8 个步骤内生成组内最高质量的图像。
除了一两个例外,所有祖先采样器在生成高质量图像方面都与Euler相似。
DPM2 采样器的性能略优于 Euler。
DPM++ SDE和DPM++ SDE Karras在本次质量测试中表现最好。
UniPC 在低步长上比 Euler 稍差,但在高步长上与 Euler 相当。