跳到主要内容Stable Diffusion 采样器详解与选择指南 | 极客日志PythonAI算法
Stable Diffusion 采样器详解与选择指南
本文详细解析了 Stable Diffusion 中的采样器机制,包括去噪原理、Noise Schedule 的作用以及各类采样器(如 Euler, DPM++, UniPC, Ancestral 等)的区别。文章重点分析了采样器的收敛性、速度和图像质量三个维度的表现,并提供了针对不同需求的实用选择建议。通过对比 ODE 与 SDE 底层原理,帮助读者理解为何某些采样器不可复现。此外,还补充了实战中的参数调优技巧及常见伪影问题的排查方法,旨在为用户提供一份全面且可操作的采样器选型指南。
热情1 浏览 Stable Diffusion 采样器详解与选择指南
在使用 Stable Diffusion Web UI 进行图像生成时,采样器(Sampler)的选择对最终效果、生成速度及可重复性有着至关重要的影响。本文将深入解析采样器的原理、分类、性能差异,并提供实用的选择建议。
什么是采样?
Stable Diffusion 模型通过一种称为'去噪'的过程来生成图像,这个过程涉及到在潜在空间中逐步从随机噪声中提取出有意义的图像特征。
- 初始状态:模型首先在潜在空间中生成一个完全随机的噪声图像。这个图像是随机的,不包含任何有意义的信息。
- 噪声预测:噪声预测器(也称为去噪函数)估计这个随机图像中的噪声。这个预测器是模型的一部分,它学习如何从噪声中恢复出清晰的图像。
- 迭代更新:模型从初始的随机噪声图像中减去预测的噪声,以便逐步揭示出隐藏在噪声下的图像内容。
- 逐步清晰:这个过程会重复多次(通常是十几次),每一步都会生成一个新的采样图像。这些采样图像逐渐从随机噪声转变为越来越清晰的图像。
- 最终输出:经过多次迭代后,最终得到的图像是一个干净的、去噪后的图像,它反映了文本提示中描述的内容。
下面是一个实际的采样过程示意。采样器逐渐产生越来越干净的图像。
Noise Schedule(噪声时间表)
在 Stable Diffusion 模型的去噪过程中,噪声表(noise schedule)扮演着至关重要的角色。
噪声表是一个预先定义的计划,它决定了在每一步采样过程中应用的噪声水平。
- 高噪声阶段:在去噪过程的第一步,图像充满了高噪声,这是因为初始图像是完全随机的噪声图像。在这个阶段,噪声水平最高,图像看起来是不连贯和随机的。
- 逐步降噪:随着去噪过程的进行,噪声表会逐步降低每个采样步骤中的噪声水平。这种降低是按照预定的计划进行的,旨在逐渐从噪声中提取出有意义的图像特征。
- 零噪声目标:在去噪过程的最后一步,噪声水平降低到零,此时图像应该是清晰且与文本提示相匹配的。理想情况下,最终图像应该几乎没有噪声,且细节丰富,准确地反映了文本描述的内容。
下面是一个 Noise schedule 的基本工作原理示意图:
如果我们增加采样步骤数,那么每个步骤之间的降噪幅将会变小。这有助于减少采样的截断误差。
可以比较一下 15 个步骤和 30 个步骤的噪音时间表差异:
不同的采样器分类
WebUI 自带了很多不同的采样器,并且这个采样器的个数还在不停的增加。了解它们的区别对于高效工作至关重要。
老式 ODE Solvers
让我们看一下最简单的采样器。这些采样器算法已经被发明很久很久了。它们是常微分方程 (ODE) 的老式采样器。
- Euler:最简单的采样器,计算速度快,但精度相对较低。
- Heun:更准确但更慢的 Euler 版本,属于二阶求解器。
- LMS (线性多步法):与 Euler 的速度相同,但据说更准确,利用历史步长信息。
Ancestral 采样器
如果你注意观察的话,可以看到某些采样器的名称上带有一个字母'a'。比如:
- Euler a
- DPM2 a
- DPM++ 2S a
- DPM++ 2S a Karras
他们是 Ancestral 采样器。Ancestral 采样器在每个采样步骤中都会向图像添加噪声。它们是随机采样器,因为采样结果具有一定的随机性。
使用 Ancestral 采样器的缺点是图像不会收敛。也就是说你有可能不会得到相同的结果,即使种子(Seed)相同。
还是刚刚的例子,我们比较一下使用 Euler a 和 Euler 生成的图像。(为了便于对比,我们加入了另外一个收敛的采样器)
可以看到 Euler 和 DPM++ 2M Karras 最终生成的图片其实是大致一样的,但是他们两个跟 Euler a 的结果不太相同。
所以为了可重复性,那就用收敛采样器。如果要生成细微的变化,那么可以考虑使用随机采样器。
Karras Noise Schedule
带有'Karras'标签的采样器使用 Karras 文章中推荐的 noise schedule。和传统的采样器相比,你会发现噪声步长在接近尾声时变小了。这样的变化据说可以提高图像的质量,特别是在处理细节时。
DDIM 和 PLMS
DDIM(去噪扩散隐式模型) 和 PLMS(伪线性多步法) 是原始 Stable Diffusion v1 附带的采样器。DDIM 是首批为扩散模型设计的采样器之一。PLMS 是 DDIM 的更新、更快的替代方案。
这两个采样器已经过时了,我们通常不会使用他们,除非有特定的兼容性需求。
DPM 和 DPM++
DPM(扩散概率模型求解器) 和 DPM++ 是专为 2022 年发布的扩散模型设计的新采样器。它们表示具有类似体系结构的求解器系列。
- DPM:基础版本。
- DPM2:二阶的,更准确但更慢。
- DPM++:是对 DPM 的改进,结合了多种策略。
DPM adaptive 是自适应调整步长。所以它可能很慢,并且不能保证在采样步骤数内完成。
UniPC
UniPC(统一预测器校正器) 是 2023 年发布的新采样器。受常微分方程求解器中预测变量 - 校正器方法的启发,它可以在 5-10 个步骤内实现高质量的图像生成,非常适合快速预览。
底层原理简述:ODE 与 SDE
常微分方程 (ODE)
大多数传统采样器(如 Euler, Heun, DPM++ 2M)基于常微分方程求解。它们假设去噪过程是一个确定性的路径。这意味着给定相同的种子、提示词和参数,理论上应该得到完全相同的图像。这类方法通常收敛性好,适合需要精确控制输出的场景。
随机微分方程 (SDE)
部分采样器(特别是带有 'a' 或 'SDE' 后缀的)基于随机微分方程。它们在去噪路径中引入了随机噪声项。这使得每次运行即使参数相同,结果也会有所不同。这在艺术创作中很有用,可以探索更多的可能性,但不利于调试和复现。
怎么选择采样器
那么这么多的采样器,我们应该如何选择呢?我想我们可以从采样算法是否收敛,采样的速度和最终生成图片的质量这几个方面来具体考量需要使用什么样的采样器。
是否收敛
首先,对 Euler、DDIM、PLMS、LMS Karras 和 Heun 这些老式的常微分方程求解器或原始扩散求解器来说,PLMS 和 LMS Karras 收敛效果不佳。Heun 收敛得更快。
对于所有的 Ancestral 采样器来说,都是不收敛的。这些采样器有:Euler a, DPM2 a, DPM++ 2S a, DPM2 a Karras, DPM++ 2S a Karras。
DPM++ SDE 和 DPM++ SDE Karras 与 Ancestral 采样器存在相同的缺点。它们不仅不会收敛,而且图像也会随着步数的变化而显着波动。
DPM++ 2M 和 DPM++ 2M Karras 表现良好。当步数足够高时,karras 变体收敛得更快。
UniPC 收敛速度比 Euler 慢一点,但还不错。
采样速度
虽然 DPM adaptive 在收敛方面表现良好,但它也是最慢的。
其余的渲染时间可以分为两组,第一组花费的时间大致相同 (约 1 倍),另一组花费的时间大约是两倍 (约 2 倍)。时间花费 2 倍的是因为他们用的是 2 阶求解器。
二阶求解器虽然更准确,但需要对去 U-Net 进行两次评估,所以它们花费的时间大概是 2 倍。
质量
当然,前面讲的收敛和速度都是次要的,如果最终生成的图片质量不好,那么收敛和速度也就无从谈起了。
大家觉得哪幅图更好?事实上,哪幅图更好是一个主观上的标准,每个人的审美观点不同,最后可能选出来不同的结果。
实战建议与参数调优
在实际工作中,除了选择采样器,还需要配合合适的步数和 CFG Scale。
推荐配置组合
如果您想快速、有创造力并且质量不错,那么可以这样选择:
- DPM++ 2M Karras,20-30 步:这是目前最通用的推荐配置,平衡了速度与质量。
- UniPC,20-30 步:适合需要快速出图的场景,低步数下表现优异。
如果您想要高质量的图像并且不关心收敛性,那么可以这样选择:
- DPM++ SDE Karras,10-15 步 (注意:这是一个较慢的采样器)。
- DDIM,10-15 步:适合特定风格的艺术创作。
如果您喜欢稳定、可重现的图像,请避免使用任何 Ancestral 采样器。
- Euler 和 Heun 也是不错的选择,尤其是用于测试 Prompt 的有效性。
常见问题排查
1. 图像出现棋盘格或伪影
这通常与采样步数过少或采样器选择不当有关。尝试增加步数至 30 以上,或切换到 DPM++ 2M Karras。
2. 颜色过于鲜艳或失真
可能是 CFG Scale 设置过高。建议将 CFG Scale 保持在 7-9 之间,过高的值会导致色彩溢出。
3. 生成速度慢
检查是否使用了高阶求解器(如 DPM++ 2M)。如果是,可以尝试切换回 Euler 或 UniPC 以换取速度,或者减少采样步数。
总结
Stable Diffusion 的采样器选择并非一成不变,而是需要根据具体的应用场景(如快速原型设计 vs 精细作品创作)进行权衡。
- 追求效率:UniPC, Euler。
- 追求质量:DPM++ 2M Karras, DPM++ 3M Karras。
- 追求创意随机性:Euler a, DPM++ SDE。
希望本文能帮助你更好地理解采样器机制,从而在 Stable Diffusion 的创作中获得更好的体验。
写在最后
采样技术仍在快速发展,新的求解器不断涌现。建议定期关注社区动态,尝试最新的采样器以获得最佳效果。同时,结合良好的提示词工程和 LoRA 模型使用,才能最大化发挥采样器的潜力。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online