本页介绍了 Stable Diffusion WebUI 中使用的采样方法和噪声调度器。采样器是控制扩散过程如何从噪声生成图像的算法,而调度器则决定在此过程中噪声的降低速率。两者共同显著影响图像质量和生成速度。
有关可与采样器一起使用的处理参数的信息,请参阅处理参数。
Stable Diffusion WebUI 提供了多种采样算法,这些算法决定了图像生成过程中去噪过程的发生方式。每种采样器都有特定的特性,会影响生成图像的质量、速度和伪影。
来源
modules/sd_samplers.py11-20
modules/sd_samplers_kdiffusion.py11-27
modules/processing.py397-406
采样器以分层架构组织,以实现灵活性和可扩展性。该系统通过Sampler基类提供通用接口,并针对不同的采样算法进行专门实现。
来源
modules/sd_samplers_common.py
modules/sd_samplers_kdiffusion.py52-67
modules/sd_samplers.py25-44
WebUI 包含三类采样器
K-Diffusion 采样器是最常用的,提供各种算法,在质量和速度之间有不同的权衡。
| 采样器名称 | 内部函数 | 描述 |
|---|---|---|
| DPM++ 2M | sample_dpmpp_2m | 二阶中点方法,质量/速度平衡良好 |
| DPM++ SDE | sample_dpmpp_sde | 随机微分方程方法,适用于创意结果 |
| DPM++ 2M SDE | sample_dpmpp_2m_sde | 结合了 2M 和 SDE,多功能采样器 |
| DPM++ 3M SDE | sample_dpmpp_3m_sde | 三阶段变体,收敛性更好 |
| Euler a | sample_euler_ancestral | 快速祖先采样,添加噪声,创意结果 |
| Euler | sample_euler | 快速确定性算法 |
| LMS | sample_lms | 线性多步法 |
| Heun | sample_heun | 二阶校正方法,高质量 |
| DPM2 | sample_dpm_2 | 二阶确定性采样器 |
| DPM2 a | sample_dpm_2_ancestral | DPM2 的祖先版本 |
| DPM fast | sample_dpm_fast | 更快的变体,具有自适应步长 |
| DPM adaptive | sample_dpm_adaptive | 完全自适应步长版本 |
每个采样器都有特定的选项和参数,会影响其行为。
来源
modules/sd_samplers_kdiffusion.py11-27
modules/sd_samplers.py11-16
某些 K-Diffusion 采样器接受可在 UI 中配置的附加参数。
| 参数 | 适用于 | 描述 |
|---|---|---|
| s_churn | Euler、Heun、DPM2 | 随机性量 |
| s_tmin | Euler、Heun、DPM2 | 随机性的最小时间步长 |
| s_tmax | Euler、Heun、DPM2 | 随机性的最大时间步长 |
| s_noise | 多个采样器 | 采样过程中添加的噪声量 |
来源
modules/sd_samplers_kdiffusion.py36-46
调度器决定去噪过程在每个步骤中去除噪声的速度。它们与采样器协同工作以控制采样轨迹。
来源
modules/sd_samplers_kdiffusion.py79-132
modules/sd_schedulers.py
调度器决定噪声水平(sigma)如何在采样步长之间分布。
| 调度器 | 描述 |
|---|---|
| 自动 | 使用所选采样器的默认调度器 |
| Karras | 非线性调度,将步骤集中在最重要的地方 |
| 指数级 | 指数递减噪声调度 |
| Polyexponential | 多项式和指数衰减的组合 |
| 线性级 | 噪声线性减小(步长等距) |
| Beta | 用于噪声调度控制的 Beta 分布 |
来源
modules/sd_schedulers.py
modules/sd_samplers_kdiffusion.py79-132
高级用户可以通过这些参数自定义调度器行为。
| 参数 | 描述 |
|---|---|
| sigma_min | 最小噪声水平(下限) |
| sigma_max | 最大噪声水平(上限) |
| rho | 控制调度器曲线的形状 |
| beta_dist_alpha | Beta 调度器的 Alpha 参数 |
| beta_dist_beta | Beta 调度器的 Beta 参数 |
来源
modules/sd_samplers_kdiffusion.py108-126
采样器与 StableDiffusionProcessing 系统集成以生成图像。
来源
modules/processing.py397-406
modules/sd_samplers_kdiffusion.py190-234
modules/sd_samplers.py33-44
txt2img 和 img2img 模式之间的采样过程略有不同。
对于 img2img,denoising_strength 参数决定了保留原始图像的多少。值为 1.0 会将图像完全替换为噪声(等同于 txt2img),而较低的值会保留更多原始图像。
来源
modules/sd_samplers_kdiffusion.py134-188
modules/sd_samplers_kdiffusion.py190-234
modules/processing.py397-406
UI 提供了几种与采样器和调度器交互的方式。
XYZ Plot 脚本还允许在一次批处理中测试多种采样器和调度器配置。
来源
modules/ui.py326-331
scripts/xyz_grid.py239-282
在使用 Hires fix 功能时,您可以为高分辨率通道指定不同的采样器和调度器。
来源
modules/ui.py326-331
modules/txt2img.py14-46
| 采样器类别 | 速度 | 质量 | 何时使用 |
|---|---|---|---|
| Euler、Euler a | 非常快 | 良好 | 快速迭代和测试 |
| DPM fast、DPM adaptive | 快 | 更好 | 在平衡速度和质量时 |
| DPM2、DPM2 a | 中等 | 非常好 | 通用 |
| DPM++ 2M、DPM++ SDE | 中慢速 | 优秀 | 高质量图像 |
| DPM++ 3M SDE | 慢 | 最高 | 当质量至关重要时 |
最佳步数因采样器而异。
| 采样器 | 推荐步数 | 备注 |
|---|---|---|
| Euler、Euler a | 20-30 | 快速,在较少步数下效果良好 |
| DPM++ 系列 | 25-35 | 在中等范围内效果良好 |
| DPM2、Heun | 40+ | 受益于更高的步数 |
| LMS | 30-60 | 取决于复杂性而异 |
来源
modules/sd_samplers_kdiffusion.py11-27
modules/processing.py397-406
几个参数可以微调采样过程。
这些可以通过“设置”选项卡或通过 XYZ Plot 脚本进行自定义,以测试不同的组合。
来源
modules/sd_samplers_kdiffusion.py36-46
scripts/xyz_grid.py254-275
采样器的实现分布在几个文件中。
modules/sd_samplers.py:主采样器注册和工厂函数。modules/sd_samplers_kdiffusion.py:K-Diffusion 采样器实现。modules/sd_samplers_timesteps.py:DDIM/PLMS 采样器实现。modules/sd_samplers_lcm.py:LCM(Latent Consistency Model)采样器。modules/sd_schedulers.py:调度器实现。modules/sd_samplers_common.py:通用基类和实用程序。modules/sd_samplers_cfg_denoiser.py:CFG(Classifier-Free Guidance)去噪器实现。modules/sd_samplers_kdiffusion.py 中的 KDiffusionSampler 类处理大多数常用的采样器,并通过 k-diffusion 库中的不同采样函数进行定制。
来源
modules/sd_samplers.py11-20
modules/sd_samplers_kdiffusion.py67-234