Diffusers documentation
EulerDiscreteScheduler
EulerDiscreteScheduler
Euler 调度器(算法 2)出自 Karras 等人撰写的论文 Elucidating the Design Space of Diffusion-Based Generative Models。这是一种快速调度器,通常能在 20-30 步内生成良好的输出。该调度器基于 Katherine Crowson 最初的 k-diffusion 实现。
EulerDiscreteScheduler
class diffusers.EulerDiscreteScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Noneprediction_type: str = 'epsilon'interpolation_type: str = 'linear'use_karras_sigmas: bool | None = Falseuse_exponential_sigmas: bool | None = Falseuse_beta_sigmas: bool | None = Falsesigma_min: float | None = Nonesigma_max: float | None = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'timestep_type: typing.Literal['discrete', 'continuous'] = 'discrete'steps_offset: int = 0rescale_betas_zero_snr: bool = Falsefinal_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )
参数
- num_train_timesteps (
int,默认为 1000) — 用于训练模型的扩散步数。 - beta_start (
float,默认为 0.0001) — 推理的起始beta值。 - beta_end (
float,默认为 0.02) — 最终的beta值。 - beta_schedule (
Literal["linear", "scaled_linear", "squaredcos_cap_v2"],默认为"linear") — beta 调度,将 beta 范围映射为用于模型步进的一系列 beta 值。可选"linear"、"scaled_linear"或"squaredcos_cap_v2"。 - trained_betas (
np.ndarray, 可选) — 直接传入 betas 数组到构造函数中,以绕过beta_start和beta_end。 - prediction_type (
Literal["epsilon", "sample", "v_prediction"], defaults to"epsilon", optional) — Prediction type of the scheduler function; can be"epsilon"(predicts the noise of the diffusion process),"sample"(directly predicts the noisy sample) or“v_prediction”` (see section 2.4 of Imagen Video paper). - interpolation_type (
Literal["linear", "log_linear"],默认为"linear",可选) — 用于计算调度器去噪步骤中间 sigmas 的插值类型。应为"linear"或"log_linear"之一。 - use_karras_sigmas (
bool,可选,默认为False) — 是否在采样过程的噪声调度中使用 Karras sigmas 来确定步长。如果为True,则 sigmas 将根据噪声水平序列 {σi} 确定。 - use_exponential_sigmas (
bool,可选,默认为False) — 在采样过程中,噪声调度的步长是否使用指数 sigmas。 - use_beta_sigmas (
bool, optional, defaults toFalse) — Whether to use beta sigmas for step sizes in the noise schedule during the sampling process. Refer to Beta Sampling is All You Need for more information. - sigma_min (
float, 可选) — 噪声调度的最小 sigma 值。如果未提供,则默认为调度中的最后一个 sigma。 - sigma_max (
float, 可选) — 噪声调度的最大 sigma 值。如果未提供,则默认为调度中的第一个 sigma。 - timestep_spacing (
Literal["linspace", "leading", "trailing"],默认为"linspace") — 时间步的缩放方式。更多信息请参阅 常见扩散噪声调度和采样步骤存在缺陷 中的表 2。 - timestep_type (
Literal["discrete", "continuous"],默认为"discrete") — 要使用的 timesteps 类型。可以是"discrete"或"continuous"。 - steps_offset (
int,默认为 0) — 添加到推理步数中的偏移量,某些模型系列需要此参数。 - rescale_betas_zero_snr (
bool,默认为False) — 是否重新缩放 betas 以实现零终端 SNR。这使模型能够生成非常明亮和非常暗的样本,而不是将其限制在中等亮度的样本上。与--offset_noise大致相关。 - final_sigmas_type (
Literal["zero", "sigma_min"],默认为"zero") — 采样过程中噪声调度的最终sigma值。如果为"sigma_min",则最终 sigma 与训练调度中的最后一个 sigma 相同。如果为"zero",则最终 sigma 设置为 0。
Euler 调度器。
该模型继承自 SchedulerMixin 和 ConfigMixin。有关该库为所有调度器实现的通用方法(例如加载和保存),请参阅父类文档。
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
根据指定时间步的噪声调度,向原始样本添加噪声。
get_velocity
< source >( sample: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
在指定的时间步上,计算给定样本和噪声的速度预测。
该方法实现了 v-prediction 模型中使用的速度预测,它预测的是样本与噪声的线性组合。
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
查找给定时间步在时间步调度中的索引。
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
确保与需要根据当前时间步缩放去噪模型输入的调度器具有互换性。将去噪模型输入按 (sigma**2 + 1) ** 0.5 进行缩放,以匹配 Euler 算法。
设置调度器的起始索引。此函数应在推理之前从流水线中运行。
set_timesteps
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device] = Nonetimesteps: list[int] | None = Nonesigmas: list[float] | None = None )
参数
- num_inference_steps (
int, 可选) — 使用预训练模型生成样本时所用的扩散步数。如果为None,则必须提供timesteps或sigmas。 - device (
str或torch.device,可选) — 时间步应移动到的设备。如果为None,则不移动时间步。 - timesteps (
list[int],可选) — 用于支持任意时间步调度的自定义时间步。如果为None,则会根据timestep_spacing属性生成时间步。如果传入了timesteps,则num_inference_steps和sigmas必须为None,并且timestep_spacing属性将被忽略。 - sigmas (
list[float], 可选) — 用于支持任意时间步调度的自定义 sigmas。如果为None,则时间步和 sigmas 将基于相关的调度器属性生成。如果传入了sigmas,则num_inference_steps和timesteps必须为None,并且时间步将基于自定义的 sigmas 调度生成。
设置扩散链所使用的离散时间步(需在推理之前运行)。
步骤
< source >( model_output: Tensortimestep: typing.Union[float, torch.Tensor]sample: Tensors_churn: float = 0.0s_tmin: float = 0.0s_tmax: float = infs_noise: float = 1.0generator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → EulerDiscreteSchedulerOutput or tuple
参数
- model_output (
torch.Tensor) — 学习到的扩散模型的直接输出。 - timestep (
float或torch.Tensor) — 扩散链中的当前离散时间步。 - sample (
torch.Tensor) — 扩散过程生成的样本的当前实例。 - s_churn (
float,可选,默认为0.0) — 控制采样过程中添加噪声量的随机性参数。值越高,随机性越强。 - s_tmin (
float,可选,默认为0.0) — 应用随机性的最小时间步阈值。仅当时间步大于该值时,才会添加噪声。 - s_tmax (
float,可选,默认为inf) — 应用随机性的最大时间步阈值。仅当时间步低于此值时,才会添加噪声。 - s_noise (
float,可选,默认为1.0) — 添加到样本中的噪声的缩放因子。 - generator (
torch.Generator, 可选) — 用于可复现采样的随机数生成器。 - return_dict (
bool,可选,默认为True) — 是否返回 EulerDiscreteSchedulerOutput 或元组。
返回值
EulerDiscreteSchedulerOutput 或 tuple
如果 return_dict 为 True,则返回 EulerDiscreteSchedulerOutput,否则返回一个元组,其中第一个元素是样本张量,第二个元素是预测的原始样本。
通过逆向 SDE 预测上一时间步的样本。此函数将扩散过程从学习到的模型输出(通常是预测的噪声)进行传播。
EulerDiscreteSchedulerOutput
class diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )
调度器 step 函数输出的输出类。