大家好,我是风雨无阻。
本文适合人群:
-
希望了解stable Diffusion WebUI中提供的Sampler究竟有什么不同,想知道如何选用合适采样器以进一步提高出图质量的朋友。
-
想要进一步了解AI绘图基本原理的朋友。
-
对stable diffusion AI绘图感兴趣的朋友。
本期内容:
- 什么是采样方法 ?
- 采样方法的分类有哪些?
- 采样方法详细介绍
- 哪个采样器最好?我们该如何选择?
在 Stable Diffusion中目前已经有22种 Sampling method 采样方法 ,不同的采样方法对出图效果有不同的影响。今天,我将详细介绍这22种采样方法,以及如何选择合适的采样方法。
一、什么是采样 ?
在了解采样之前,我们得先了解 一下Stable Diffusion webui 是如何工作的,建议看看我之前的AI 绘画Stable Diffusion 研究(七)sd webui如何工作这篇文章。
我们知道 sd webui 生成图像,大致会经过以下过程:
1、为了生成图像, Stable Diffusion 会在潜在空间中生成一个完全随机的图像
2、噪声预测器会估算图像的噪声
3、噪声预测器从图像中减去预测的噪声
4、这个过程反复重复 N 次以后,会得到一个干净准确的图像
这个去噪的过程,就被称为采样。
Stable Diffusion 在这个去噪过程中,会生成一个新的样本图像。
采样中使用的方法 被称为 Sampling method (采样方法或者是采样器)。
增加采样步骤 Sampling steps 有什么影响呢?
步骤越多,每个步骤降噪越小 。这样可以减少采样过程中的截断误差。
目前Stable Diffusion 中有 22 个采样器可以使用 。
二、采样器的分类
这些采样器有什么区别呢?
为了便于使用和理解,我们可以将这些采样方法进行分类:
(1)、传统的常微分方程求解器(ODE solvers )
包含:Euler \Heun \LMS
这三个方法历史悠久,被认为是最简单,但是不太准确的采样器。
(2)、祖先采样器 (名称中有一个字母 a 的)
包含 :Euler a \ DPM2 a \DPM++2S a \DPM2 a Karras \DPM++2S a Karras
这些采样器会在每个采样步骤中,向图像添加噪声 ,这些是祖先采样器,因为在采样结果中
具有一定的随机性。
这些采样器的缺点是,图像不会收敛。
(3)、最初官方采样器 (最初随sd v1版本发布的采样器)
DDIM、PLMS
DDIM 是为扩散模型设计的第一个采样器, PLMS 则是DDIM 更快速的替代品
(4)、DPM 和 DPM++ 系列
DPM 和 DPM++ 系列 是2022年发布的用于扩散模型的新采样器 ,它们具有相似的结构,但DPM2比DPM 更准确,不过速度较慢。
DPM++ 是对DPM 的改进,可以自适应地调整步长,但可能会很慢,并且不能保证在规定数量的采样步骤内完成。
(5)、带有Karras字样的采样器
这些采样器使用了噪声时间表 (noise schedule ),控制每个采样步骤中的噪声水平,并随着采样步骤的增加,减少了截断误差。
(6)、UniPC采样器
这UniPC采样器是2023年发布的新采样器,根据 ode 求解器中预测校正方法的启发,可在5-10步内实现高质量图像生成。
了解了以上采样器的分类,相信大家对选择采样器,已经可以缩小选择的范围了。
三、采样器方法详解
接下来我们根据 Stable Diffusion WebUI 中采样器的顺序,对每个采样器进行详细介绍。
1、Euler a
祖先采样器的一种 , 类似于 Euler ,但在每个步骤中它会减去比"应该"更多的噪声。并添加一些随机噪声以匹配噪声计划。去噪图像取决于前面步骤中添加的特定噪声。
2、Euler
最简单的采样器,在采样过程中不添加随机噪声,通过噪声计划告诉采样器,每个步骤中应该有多少噪声。并使用欧拉方法减少恰当数量的噪声。以匹配噪声计划,直到最后一步为0 为止。
3、LMS 解决常微分方程的标准方法
LMS采样速度与Euler 相同 。
4、Heum
Heum 是对Euler 更精确的改进,但是需要在每个步骤中预测两次噪声。
因此速度比Euler 慢2倍。
5、DPM2
dpm2 是Katherine Crowson在K-diffusion项目中自创的 ,灵感来源Karras论文中的DPM-Solver-2和算法2 ,受采样器设置页面中的 sigma参数影响。
6、DPM2 a
祖先采样器的一种,使用 DPM2 方法 ,受采样器设置中的ETA参数影响 。
7、DPM++2S a
随机采样器一种
在K-diffusion实现的2阶单步并受采样器设置中的ETA参数影响。
8、 DPM++2M
在Kdiffusion实现的2阶多步采样方法,在Hagging face Diffusers中被称作已知最强调度器。在速度和质量的平衡最好。这个代表m的多步比上面的s单步,在采样时会参考更多步,而非当前步,所以能提供更好的质量,但是也更复杂。
9、 DPM++SDE
DPM++的SDE版本,DPM++ 原本是0DE 求解器及常微分方程在Ktifusion实现的版本,代码中调用了随机采样方法,所以受采样器设置中的ETA参数影响。
10、 DPM fast
在Ktifusion实现的固定步长采样方法 ,用于steps小于20的情况。受采样器设置中的ETA参数影响。
11、 DPM adaptive
在K-diffusion 实现的自适应步长采样方法,DPM-Solver-12 和23,受采样器设置中的ETA参数影响。
12、带有Karras字样的6种采样器
LMS karras 、DPM2 karras 、DPM2 a karras 、DPM++ 2S a karras 、DPM++2M karras、DPM++ SDE karras 、DPM++2M SDE karras
这些含有Karras名字的采样方法 都是相当于 Karras噪声时间表的版本。
13 、DDIM
官方采样器之一,使用去噪后的图像来近似最终图像,并使用噪声预测器估计的噪声,来近似图像方向。
14、PLMS
官方采样器之一,PLMS则是DDIM的新版且更快速的替代品。
15、unipc
最新添加的采样器,应该是目前最快最新的采样方法,10步内实现高质量图像。
四、哪个采样器最好?我们该如何选择?
以下是我的建议:
- 如果想快速生成质量不错的图片,建议选择 DPM++ 2M Karras (20 -30步) 、UNIPC (15-25步)
- 如果想要高质量的图,不关心重现性,建议选择 DPM++ SDE Karras (10-15步 较慢) ,DDIM(10-15步 较快)
- 如果想要简单的图,建议选择 Euler,Heun(可以减少步骤以节省时间)
- 如果想要稳定可重现的图像,请避免选择任何祖先采样器(名字里面带a或SDE)
- 相反,如果想要每次生成不一样的图像,可以选择不收敛的祖先采样器(名字里面带a或SDE)