Skip to content

调度器

🤗 Diffusers 提供了许多用于扩散过程的调度器函数。调度器接收模型的输出(即扩散过程正在迭代的样本)和一个时间步长,以返回一个去噪样本。时间步长非常重要,因为它决定了步骤在扩散过程中的位置;数据是通过向前迭代 n 个时间步长生成的,而推理则是通过反向传播时间步长来进行的。根据时间步长,调度器可以是 离散 的(在这种情况下,时间步长是一个 int)或 连续 的(在这种情况下,时间步长是一个 float)。

根据上下文,调度器定义了如何迭代地向图像添加噪声或如何根据模型的输出来更新样本:

  • 训练 期间,调度器向样本添加噪声(有不同的算法来添加噪声)以训练扩散模型
  • 推理 期间,调度器定义了如何根据预训练模型的输出来更新样本

许多调度器是从 k-diffusion 库中实现的,由 Katherine Crowson 开发,它们也被广泛用于 A1111。为了帮助你将 k-diffusion 和 A1111 中的调度器映射到 🤗 Diffusers 中的调度器,请查看下表:

A1111/k-diffusion🤗 DiffusersUsage
DPM++ 2M[DPMSolverMultistepScheduler]
DPM++ 2M Karras[DPMSolverMultistepScheduler]init with use_karras_sigmas=True
DPM++ 2M SDE[DPMSolverMultistepScheduler]init with algorithm_type="sde-dpmsolver++"
DPM++ 2M SDE Karras[DPMSolverMultistepScheduler]init with use_karras_sigmas=True and algorithm_type="sde-dpmsolver++"
DPM++ 2S aN/Avery similar to DPMSolverSinglestepScheduler
DPM++ 2S a KarrasN/Avery similar to DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...)
DPM++ SDE[DPMSolverSinglestepScheduler]
DPM++ SDE Karras[DPMSolverSinglestepScheduler]init with use_karras_sigmas=True
DPM2[KDPM2DiscreteScheduler]
DPM2 Karras[KDPM2DiscreteScheduler]init with use_karras_sigmas=True
DPM2 a[KDPM2AncestralDiscreteScheduler]
DPM2 a Karras[KDPM2AncestralDiscreteScheduler]init with use_karras_sigmas=True
DPM adaptiveN/A
DPM fastN/A
Euler[EulerDiscreteScheduler]
Euler a[EulerAncestralDiscreteScheduler]
Heun[HeunDiscreteScheduler]
LMS[LMSDiscreteScheduler]
LMS Karras[LMSDiscreteScheduler]init with use_karras_sigmas=True
N/A[DEISMultistepScheduler]
N/A[UniPCMultistepScheduler]

噪声计划和计划类型

A1111/k-diffusion🤗 Diffusers
Karrasinit with use_karras_sigmas=True
sgm_uniforminit with timestep_spacing="trailing"
simpleinit with timestep_spacing="trailing"
exponentialinit with timestep_spacing="linspace", use_exponential_sigmas=True
betainit with timestep_spacing="linspace", use_beta_sigmas=True

所有调度器都是基于 [SchedulerMixin] 类构建的,该类实现了所有调度器共享的底层实用工具。

SchedulerMixin

[[autodoc]] SchedulerMixin

SchedulerOutput

[[autodoc]] schedulers.scheduling_utils.SchedulerOutput

KarrasDiffusionSchedulers

[KarrasDiffusionSchedulers] 是 🤗 Diffusers 中调度器的一个广泛概括。此类中的调度器在高层上通过其噪声采样策略、网络类型和缩放方式、训练策略以及损失的加权方式来区分。

此类中的不同调度器,根据常微分方程(ODE)求解器类型,属于上述分类,并为 🤗 Diffusers 中实现的主要调度器设计提供了良好的抽象。此类中的调度器列在 这里

PushToHubMixin

[[autodoc]] utils.PushToHubMixin