菜单

采样器与调度器

相关源文件

本页介绍了 Stable Diffusion WebUI 中使用的采样方法和噪声调度器。采样器是控制扩散过程如何从噪声生成图像的算法,而调度器则决定在此过程中噪声的降低速率。两者共同显著影响图像质量和生成速度。

有关可与采样器一起使用的处理参数的信息,请参阅处理参数

1. 采样系统概述

Stable Diffusion WebUI 提供了多种采样算法,这些算法决定了图像生成过程中去噪过程的发生方式。每种采样器都有特定的特性,会影响生成图像的质量、速度和伪影。

来源
modules/sd_samplers.py11-20
modules/sd_samplers_kdiffusion.py11-27
modules/processing.py397-406

2. 采样器架构

采样器以分层架构组织,以实现灵活性和可扩展性。该系统通过Sampler基类提供通用接口,并针对不同的采样算法进行专门实现。

来源
modules/sd_samplers_common.py
modules/sd_samplers_kdiffusion.py52-67
modules/sd_samplers.py25-44

3. 可用的采样器

WebUI 包含三类采样器

3.1 K-Diffusion 采样器

K-Diffusion 采样器是最常用的,提供各种算法,在质量和速度之间有不同的权衡。

采样器名称内部函数描述
DPM++ 2Msample_dpmpp_2m二阶中点方法,质量/速度平衡良好
DPM++ SDEsample_dpmpp_sde随机微分方程方法,适用于创意结果
DPM++ 2M SDEsample_dpmpp_2m_sde结合了 2M 和 SDE,多功能采样器
DPM++ 3M SDEsample_dpmpp_3m_sde三阶段变体,收敛性更好
Euler asample_euler_ancestral快速祖先采样,添加噪声,创意结果
Eulersample_euler快速确定性算法
LMSsample_lms线性多步法
Heunsample_heun二阶校正方法,高质量
DPM2sample_dpm_2二阶确定性采样器
DPM2 asample_dpm_2_ancestralDPM2 的祖先版本
DPM fastsample_dpm_fast更快的变体,具有自适应步长
DPM adaptivesample_dpm_adaptive完全自适应步长版本

每个采样器都有特定的选项和参数,会影响其行为。

来源
modules/sd_samplers_kdiffusion.py11-27
modules/sd_samplers.py11-16

3.2 K-Diffusion 采样器的特殊参数

某些 K-Diffusion 采样器接受可在 UI 中配置的附加参数。

参数适用于描述
s_churnEuler、Heun、DPM2随机性量
s_tminEuler、Heun、DPM2随机性的最小时间步长
s_tmaxEuler、Heun、DPM2随机性的最大时间步长
s_noise多个采样器采样过程中添加的噪声量

来源
modules/sd_samplers_kdiffusion.py36-46

4. 调度器系统

调度器决定去噪过程在每个步骤中去除噪声的速度。它们与采样器协同工作以控制采样轨迹。

来源
modules/sd_samplers_kdiffusion.py79-132
modules/sd_schedulers.py

4.1 调度器函数

调度器决定噪声水平(sigma)如何在采样步长之间分布。

调度器描述
自动使用所选采样器的默认调度器
Karras非线性调度,将步骤集中在最重要的地方
指数级指数递减噪声调度
Polyexponential多项式和指数衰减的组合
线性级噪声线性减小(步长等距)
Beta用于噪声调度控制的 Beta 分布

来源
modules/sd_schedulers.py
modules/sd_samplers_kdiffusion.py79-132

4.2 调度器参数

高级用户可以通过这些参数自定义调度器行为。

参数描述
sigma_min最小噪声水平(下限)
sigma_max最大噪声水平(上限)
rho控制调度器曲线的形状
beta_dist_alphaBeta 调度器的 Alpha 参数
beta_dist_betaBeta 调度器的 Beta 参数

来源
modules/sd_samplers_kdiffusion.py108-126

5. 与处理系统集成

采样器与 StableDiffusionProcessing 系统集成以生成图像。

来源
modules/processing.py397-406
modules/sd_samplers_kdiffusion.py190-234
modules/sd_samplers.py33-44

5.1 Txt2Img 与 Img2Img 采样

txt2img 和 img2img 模式之间的采样过程略有不同。

  • txt2img:从按初始 sigma 缩放的纯噪声开始。
  • img2img:从输入图像开始,并根据去噪强度添加噪声。

对于 img2img,denoising_strength 参数决定了保留原始图像的多少。值为 1.0 会将图像完全替换为噪声(等同于 txt2img),而较低的值会保留更多原始图像。

来源
modules/sd_samplers_kdiffusion.py134-188
modules/sd_samplers_kdiffusion.py190-234
modules/processing.py397-406

6. 用户界面集成

UI 提供了几种与采样器和调度器交互的方式。

  1. 主下拉菜单:选择主要的采样算法。
  2. 调度器下拉菜单:在设置中可用,用于选择噪声调度。
  3. 步数滑块:控制采样步数。
  4. CFG Scale 滑块:控制提示词的影响力(Classifier-Free Guidance)。
  5. Hires fix 设置:用于为高分辨率通道选择不同采样器的选项。

XYZ Plot 脚本还允许在一次批处理中测试多种采样器和调度器配置。

来源
modules/ui.py326-331
scripts/xyz_grid.py239-282

6.1 Hires fix 和采样器

在使用 Hires fix 功能时,您可以为高分辨率通道指定不同的采样器和调度器。

来源
modules/ui.py326-331
modules/txt2img.py14-46

7. 性能和质量考量

7.1 性能与质量的权衡

采样器类别速度质量何时使用
Euler、Euler a非常快良好快速迭代和测试
DPM fast、DPM adaptive更好在平衡速度和质量时
DPM2、DPM2 a中等非常好通用
DPM++ 2M、DPM++ SDE中慢速优秀高质量图像
DPM++ 3M SDE最高当质量至关重要时

7.2 步数建议

最佳步数因采样器而异。

采样器推荐步数备注
Euler、Euler a20-30快速,在较少步数下效果良好
DPM++ 系列25-35在中等范围内效果良好
DPM2、Heun40+受益于更高的步数
LMS30-60取决于复杂性而异

来源
modules/sd_samplers_kdiffusion.py11-27
modules/processing.py397-406

8. 高级用法:自定义参数

几个参数可以微调采样过程。

  1. DDIM ETA:控制 DDIM 采样器的随机性。
  2. sigma_min/sigma_max:控制噪声级别的范围。
  3. s_churn/s_tmin/s_tmax/s_noise:调整特定采样器的行为。
  4. UniPC Order:UniPC 采样器的参数。

这些可以通过“设置”选项卡或通过 XYZ Plot 脚本进行自定义,以测试不同的组合。

来源
modules/sd_samplers_kdiffusion.py36-46
scripts/xyz_grid.py254-275

9. 代码实现细节

采样器的实现分布在几个文件中。

  • 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