Diffusers documentation
EDMEulerScheduler
EDMEulerScheduler
Karras 等人论文 Elucidating the Design Space of Diffusion-Based Generative Models 中提出的 Euler 调度器(算法 2)的 Karras 公式。这是一种快速调度器,通常能在 20-30 步内生成良好的输出。该调度器基于 Katherine Crowson 的原始 k-diffusion 实现。
EDMEulerScheduler
class diffusers.EDMEulerScheduler
< source >( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'v_prediction'] = 'epsilon'rho: float = 7.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )
参数
- sigma_min (
float,可选,默认为0.002) — sigma 调度中的最小噪声幅度。EDM 论文 [1] 中将其设置为 0.002;合理的取值范围为 [0, 10]。 - sigma_max (
float,可选,默认值为80.0) — sigma 调度中的最大噪声幅度。在 EDM 论文 [1] 中,该值被设置为 80.0;合理的取值范围为 [0.2, 80.0]。 - sigma_data (
float,可选,默认为0.5) — 数据分布的标准差。在 EDM 论文 [1] 中,该值被设置为 0.5。 - sigma_schedule (
Literal["karras", "exponential"],可选,默认为"karras") — 用于计算sigmas的 Sigma 调度。默认情况下,我们使用 EDM 论文中提出的调度 (https://huggingface.co/papers/2206.00364)。"exponential"调度已在此模型中引入: https://huggingface.co/stabilityai/cosxl。 - num_train_timesteps (
int,可选,默认为1000) — 用于训练模型的扩散步数。 - prediction_type (
Literal["epsilon", "v_prediction"],可选,默认为"epsilon") — 调度器函数的预测类型。"epsilon"预测扩散过程中的噪声,而"v_prediction"(参见 Imagen Video 论文的第 2.4 节)。 - rho (
float,可选,默认值为7.0) — 用于计算 Karras sigma 调度的 rho 参数,在 EDM 论文 [1] 中该值被设置为 7.0。 - final_sigmas_type (
Literal["zero", "sigma_min"],可选,默认为"zero") — 采样过程中噪声调度的最终sigma值。如果为"sigma_min",则最终 sigma 与训练调度中的最后一个 sigma 相同。如果为"zero",则最终 sigma 设为 0。
实现了 Karras 等人 2022 年 [1] 中提出的 EDM 形式下的 Euler 调度器。
[1] Karras, Tero, et al. “Elucidating the Design Space of Diffusion-Based Generative Models.” https://huggingface.co/papers/2206.00364
该模型继承自 SchedulerMixin 和 ConfigMixin。有关该库为所有调度器实现的通用方法(例如加载和保存),请参阅父类文档。
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
根据指定时间步的噪声调度,向原始样本添加噪声。
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
查找给定时间步在时间步调度中的索引。
precondition_inputs
< source >( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
根据 EDM 公式对输入样本进行缩放,以对其进行预处理。
precondition_noise
< source >( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
通过对噪声水平应用对数变换来进行预处理。
precondition_outputs
< source >( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
根据 EDM 公式对模型输出进行预处理。
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
将去噪模型输入进行缩放,以匹配 Euler 算法。确保与那些需要根据当前时间步对去噪模型输入进行缩放的调度器具有互换性。
设置调度器的起始索引。此函数应在推理之前从流水线中运行。
set_timesteps
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Union[list[float], torch.Tensor, NoneType] = None )
设置扩散链所使用的离散时间步(需在推理之前运行)。
步骤
< 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 = Truepred_original_sample: typing.Optional[torch.Tensor] = None ) → EDMEulerSchedulerOutput or tuple
参数
- model_output (
torch.Tensor) — 学习到的扩散模型的直接输出。 - timestep (
float或torch.Tensor) — 扩散链中的当前离散时间步。 - sample (
torch.Tensor) — 扩散过程生成的样本的当前实例。 - s_churn (
float,可选,默认值为0.0) — 每一步添加的随机性程度。值越高,添加的噪声越多。 - s_tmin (
float,可选,默认为0.0) — 低于此最小 sigma 阈值时,不会添加任何噪声。 - s_tmax(
float,可选,默认为float("inf"))— 超过该最大 sigma 阈值后不再添加噪声。 - s_noise (
float,可选,默认为1.0) — 添加到样本中的噪声的缩放因子。 - generator (
torch.Generator, 可选) — 用于确保可复现性的随机数生成器。 - return_dict (
bool,可选,默认为True) — 是否返回 EDMEulerSchedulerOutput 或元组。 - pred_original_sample (
torch.Tensor, 可选) — 上一步预测的去噪样本。如果提供,则跳过重新计算。
返回值
EDMEulerSchedulerOutput 或 tuple
如果 return_dict 为 True,则返回 EDMEulerSchedulerOutput;否则返回一个元组,其中第一个元素是前一个样本张量,第二个元素是预测的原始样本张量。
通过逆向 SDE 预测上一时间步的样本。此函数将扩散过程从学习到的模型输出(通常是预测的噪声)进行传播。
EDMEulerSchedulerOutput
class diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )
调度器 step 函数输出的输出类。