Stable Diffusion 原理与技巧:采样方法和采样步数详解
Stable Diffusion 原理与技巧:采样方法和采样步数详解
本文将详细介绍Stable Diffusion中的采样方法和采样步数,包括其原理、分类、具体实现以及使用建议。通过阅读本文,你将对Stable Diffusion的采样过程有全面的了解。
1. 原理
Sampling method即采样方法或采样器。
Sampling steps即采样步数。
为了生成图像,Stable Diffusion首先在潜在空间中生成完全随机的图像。然后噪声预测器估计图像的噪声。从图像中减去预测的噪声。这个过程重复十几次。最后,你会得到一个干净的图像。
这个去噪过程称为采样,采样所采用的方法就称为采样方法或采样器。
在从嘈杂的图像逐渐变成清晰的图像时,每个采样步骤的噪声水平是由Noise schedule控制的。
在每个步骤中,采样方法的工作就是生成噪声水平与噪声表相匹配的图像。这时,什么是Sampling steps也就清楚了。增加采样步数能够使每个步骤之间的噪音幅度降低,有助于减少采样的截断误差。
采样方法可以大致分为四类:
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. 使用建议
- 如果想使用快速、融合、新颖且质量不错的东西,那么最好的选择是:
- DPM++ 2M Karras,20–30 Steps
- UniPC,20-30 Steps
- 如果想要高质量的图像并且不关心收敛,那么不错的选择是:
- DPM++ SDE Karras,20-30 Steps
- DDIM,15-30 Steps
如果想要稳定、可重复的图像,请避免使用任何祖先采样器。
如果就想要出图快,可以选择
Euler
和Heun
。当然并不是局限于这几种采样器,出图效果很看运气和随机数,对于其他采样器,也给出以下建议:
- DPM++ SDE:收敛能力较差,图像的波动情况较为显著。通常使用采样步数20-30。
- DPM++ 2M:步数建议30左右。
- DPM++ 2M SDE Karras:采样步数尽量大于30。
对于新手,强烈推荐DPM Solver系列(尤其是DPM++ 2S a)。不推荐LMS、DPM fast、LMS Karras、PLMS。
2.1 其他资料
笔者觉得还有一个关于采样方法的探讨挺有意思的,这里也放上链接,供大家参考。