采样器的用途
Stable Diffusion 提供的是一种称为稳定扩散的图片生成能力。
这里的重点是扩散,在 Stable Diffusion 中扩散分为两种:前向扩散和后向扩散。
简单点说,前向扩散是将图片转换为数据模型,而后向扩散是从数据模型生成图片。
后向扩散时,Stable Diffusion 先会生成一张完全的噪音图,然后根据提示词的语义,通过不断的采样来去除噪音图中不符合语义的噪音,而采样器就是去除噪音用的算法程序。
采样步数
在 Stable Diffusion 中采样器和采样步数有着紧密的关系,在采样的每一步,采样器会按照一个噪音计划表控制噪音的水平,在第一步噪音水平最高,在最后一步噪音水平降为零,如下图所示:
增加采样步数,可以减少每步之间的降噪幅度,这样可以避免截断误差。所谓截断误差就是采样器在每一步采样去噪时所使用的算法都是求近似值,这个近似值和真实的解存在误差。增加采样步数,就会降低每次采样要处理的噪音数量,从而可以降低每次采样时的误差。
如何选择采样器?
Stable Diffusion WebUI 中默认已经集成了很多采样器,比如 Euler a、DPM++、DDIM和Restart等等,随着算法的改进和新算法的出现,未来估计还会不断增加新的采样器。
这些采样器在图像生成的效果和速度上各不相同,我们应该如何选择呢?
认识采样器
所谓知己知彼,百战不殆!首先我们要来认识下这些采样器,了解它们的算法特性,然后才能更好的使用它们。为了更好的认识这些采样器,我们可以根据它们的算法特性做一些分类。
经典的常微分方程(ODE)求解方法
Euler:欧拉采样方法,20-30步就能生成效果不错的图片。
Heun:欧拉的一个更准确但是较慢的版本,耗费时间接近Euler的2倍。
LMS:Linear multi-step method,线性多步法,速度与Euler相仿,但是可能更准确 。
这些算法已经有100多年的历史,绝对可以称得上经典。
初始采样器
DDIM 是在 Stable Diffusion 初始1.0版本中自带的采样器。其在 DPM 基础上做了重要改进:预测噪声而不是直接预测信号,基于时间步顺序采样。采样速度快,质量大幅提升。
初始发布的还有PLMS (Pseudo Linear Multi-Step method),即伪线性多步法,它是为了解决LMS采样方法更新慢的问题而提出的,实测效果不太好。
这两个采样器一般被认为是过时的,而不再被广泛使用。
2S、2M、3M
很多采样器带有这些数字标识,这里介绍下它们的含义。
先看数字。
2:代表这是一个二阶采样器。
3:代表这是一个三阶采样器。
不带这些数字的就是一阶采样器,比如 Euler 采样器。
三阶采样器比二阶采样器准确,二阶采样器比一阶采样器准确,但是阶数越高,计算复杂度也更高,消耗更多的计算资源。
在数学中,"阶"通常指的是对某个变量的导数或微分。一阶通常涉及到变量的第一导数或微分,而二阶涉及到第二导数或微分,在优化和采样的上下文中,使用二阶方法意味着我们不仅考虑当前的样本点,还考虑这些点如何变化。这可以帮助我们更准确地估计函数的形状和行为,从而更好地进行采样。
再看字母。
S:代表singlestep。这意味着该采样器在每次迭代中只执行一步。
由于每次迭代只进行一次更新,采样速度更快,但可能需要更多的采样步数才能达到所需的图像质量。更适合需要快速反馈或实时渲染的应用,因为它可以快速生成图像,尽管可能需要更多的迭代来完善。
M:代表multistep。这意味着该采样器在每次迭代中会执行多步,采样质量更高,但是每次采样速度较慢。
由于每次迭代需要进行多次更新,采样速度较慢,但可能只需要较少的采样步数就能达到所需的图像质量。更适合对图像质量有较高要求的应用,或者那些可以接受稍长的计算时间以获得更好结果的应用。
祖先采样器(Ancestral sampling)
所有在名字中包含独立字母 a 的都是祖先采样器,祖先采样器会在每一步采样时都向图片添加新的随机噪声,这会导致不断采样时,图片内容一直在大幅度的变化,不会稳定下来,专业点的说法叫难以收敛。
下图是采样器 Euler a 和 Euler 在不同采样步数时生成图片的对比,可以看到随着采样步数的增加, Euler 生成的图片变化很小,而 Euler a 生成的图片则一直在发生明显的变化。
需要注意除了祖先采样器,DDIM 和带 SDE 标识的采样器也会在采样时增加随机噪声,比如 DPM++ SDE、DPM++ 2M SDE等。SDE是随机微分方程的意思,英文全称:stochastic differential equations。
因为会在采样时增加随机噪声,使用这些采样器时,即使相同的参数和随机数也有可能生成不同的图片。
DPM
很多采样器都携带 DPM 标识,那么 DPM 是什么呢?
DPM(Diffusion probabilistic model solver)和 DPM++ 是2022年发布的新采样器。它们代表了类似体系结构的解算器家族。
DPM 的主要优点是生成质量高,但是由于DPM会自适应调整步长,不能保证在约定的采样步骤内完成任务,整体速度可能会比较慢。
DPM和DPM2相似,但DPM2是二阶的(更准确但更慢)。
DPM++是对DPM的改进,引入了很多新的技术和方法,如EMA(指数移动平均)更新参数、预测噪声方差、添加辅助模型等,从而在采样质量和效率上都取得了显著的提升,是目前效果最优秀的反向扩散采样算法之一。
Karras
所有后缀带有 karras 的采样器是使用了 karras 噪声计划表,如下图所示:
karras 噪声计划表在初始采样步骤中的噪音水平较高,而在结尾采样步骤中的噪音水平较低,实验表明这样有助于提高生成图片的质量。
UniPC
UniPC (Unified Predictor-Corrector,统一预测-校正器)是2023年新发布的采样器,受到同名的常微分方程求解法思路的影响。
可以在5-10个步骤中实现高质量图像生成,收敛速度略慢于欧拉方法,但质量相当,推荐使用20-30步。
k-diffusion
这个词并不指某一个采样器,它指的是 Katherine Crowson 的 k-diffusion Github库和与之相关的采样器,正是这个库实现了karras2022年论文中的采样方法,在 Stable Diffusion WebUI 中基本上除了DDIM、PLMS、UniPC的其他采样器都来自于k-diffusion。
采样器选择建议
通过以上对采样器的认识,这里给出一些建议。
如果我们比较关注图片质量,那最好选择带 DPM++、Karras、2M或者3M的,比如:DPM++ 2M Karras、DPM++ 3M SDE Karras、DPM++ 2M SDE Heun Karras、DPM++ SDE Karras ;或者使用较新的 UniPC。
如果想要快速或者简单的图像,Euler、DDIM是不错的选择。
如果期望得到稳定、可重现的图像,避免采用任何祖先采样器、SDE采样器。
大部分采样器的采样步数在20-30之间会有比较好的出图效果,低于20时可能采样不足,高于30时可能仅在细节上有些改善,收益不大。
注意实际的效果可能会因具体的模型、数据和其他因素而异,因此在实际应用中可能需要进行实验来确定最佳策略。
资源下载
本系列使用的模型、插件,生成的图片,都已经上传到我整理的 Stable Diffusion 绘画资源中,后续也会持续更新,如有需要,请关/注/公/众/号:萤火遛AI(yinghuo6ai),发消息:SD,即可获取下载地址。
OK,以上就是本文的主要内容,介绍了 Stable Diffusion 的采样器的一些知识。如果有感觉没讲清楚的地方,欢迎留言沟通;因能力有限,以上有些说法可能不准确或者存在错误,如有问题还望指正。