Stable Diffusion 原理与技巧 第一篇:采样方法和采样步数
「Stable Diffusion Trick」
大家好,我是「查尔斯」,今天给大家分享「Stable Diffusion Web UI」中「Sampling method」和「Sampling steps」的一些理论与技巧。看完这篇文章你一定会对采样方法和采样步数有一个全面的了解。
1. 原理
「Sampling method」即采样方法或采样器。
「Sampling steps」即采样步数。
为了生成图像,Stable Diffusion首先在潜在空间中生成完全随机的图像。然后噪声预测器估计图像的噪声。从图像中减去预测的噪声。这个过程重复十几次。最后,你会得到一个干净的图像[1]。
这个去噪过程称为采样,采样所采用的方法就称为采样方法或采样器。
在从嘈杂的图像逐渐变成清晰的图像时,每个采样步骤的噪声水平是由「Noise schedule」控制的。在每个步骤中,采样方法的工作就是生成噪声水平与噪声表相匹配的图像。这时,什么是「Sampling steps」也就清楚了。增加采样步数能够使每个步骤之间的噪音幅度降低,有助于减少采样的截断误差。
采样方法可以大致分为四类:
Old-School ODE Solvers老式ODE求解器Ancestral samplers祖先采样器DPM Solvers扩散概率模型求解器其他采样器
下面依次介绍每类采样方法。
1.1 Old-School ODE Solvers
该类是使用常微分方程的求解器。例如:
Euler——最简单的求解器。 Heun——Euler的更准确但速度较慢版本。 LMS——线性多步法,与Euler速度相同,但据说更准确。
1.2 Ancestral Samplers
这类采样器都带有一个字母a。例如:
Euler a DPM2 a DPM++ 2S a DPM++ 2S a Karras
祖先采样器在每个采样步骤向图像添加噪声。它们是随机采样器,因此采样结果具有一定的随机性。使用祖先采样器的缺点是图像不会收敛,下面两幅动图展示Euler a和Euler生成的图像。
使用Euler a生成的图像在高采样步数时不会收敛。相比之下,Euler的图像收敛得很好。
1.3 DPM Solvers
DPM-Solvers(扩散概率模型求解器)是2022年发布,为扩散模型设计的新采样器系列。该系列也是个大家族,有许许多多变体,名字中有DPM的都是这一类。不过,这类中为啥有的带有S,有的带有M呢?
这是因为S代表单步(Singlestep),M代表多步(Multistep),是预测模型算法的一个近似导数。简答的说,单步使用一个固定值/随机值,多步使用的是前一Step的值,这样就造成「多步稳定性高于单步」。
1.4 其他采样方法
DDIM(更准确但速度更慢)和PLMS(伪线性多步方法)是Stable Diffusion v1附带的采样器。PLMS是DDIM更新、更快的替代方案。UniPC:Unified Predictor-Corrector,是2023年发布的新采样器。受到ODE求解器的启发,它可以在5-10步内实现高质量图像生成。另外,使用UniPC采样器,需要在「设置->采样器参数」中,将UniPc变体改为bh2。
1.5 Karras Noise Schedule
使用过Web UI的读者会发现,很多都带有Karras,这是为啥呢?
原来带有Karras标签的采样器是使用了Karras论文中推荐的噪声表。使用
Karras noise schedule能够在采样接近尾声时,噪波阈值更小,更稳定。
基本上,Web UI中除DDIM、PLMS和UniPC之外的所有采样器都是从k-diffusion借用的。下图是这些采样器的速度对比。
2. 使用建议
1.如果想使用快速、融合、新颖且质量不错的东西,那么最好的选择是:
DPM++ 2M Karras,20–30 Steps UniPC,20-30 Steps
2.如果想要高质量的图像并且不关心收敛,那么不错的选择是:
DPM++ SDE Karras,20-30 Steps DDIM,15-30 Steps
3.如果想要稳定、可重复的图像,请避免使用任何祖先采样器。
4.如果就想要出图快,可以选择
Euler和Heun。
5.当然并不是局限于这几种采样器,出图效果很看运气和随机数,对于其他采样器,也给出以下建议:
DPM++ SDE:收敛能力较差,图像的波动情况较为显著。通常使用采样步数20-30。 DPM++ 2M:步数建议30左右。 DPM++ 2M SDE Karras:采样步数尽量大于30。
对于新手,「强烈推荐」DPM Solver系列(尤其是DPM++ 2S a)。不推荐LMS、DPM fast、LMS Karras、PLMS[2]。
2.1 其他资料
笔者觉得还有一个关于采样方法的探讨挺有意思的,这里也放上链接,供大家参考。「https://huke88.com/article/8087.html」
参考资料
Stable Diffusion Samplers: A Comprehensive Guide: https://stable-diffusion-art.com/samplers/#DDIM_and_PLMShttps://www.reddit.com
[2]采样器+采样步数测试: https://articles.zsxq.com/id_iz1iq9q2a65n.html