Diffusers documentation

调度器

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

调度器

🤗 Diffusers 为扩散过程提供了许多调度器函数。调度器接收模型的输出(即扩散过程正在迭代的样本)和一个时间步,并返回一个去噪后的样本。时间步至关重要,因为它决定了当前步骤在扩散过程中的位置:数据通过向前迭代 n 个时间步来生成,而推理则通过沿时间步向后传播来实现。根据时间步的类型,调度器可以是离散的,此时时间步为 int;也可以是连续的,此时时间步为 float。

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

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

许多调度器由 Katherine Crowson 的 k-diffusion 库实现,并且它们也在 A1111 中被广泛使用。为了帮助您将 k-diffusion 和 A1111 中的调度器映射到 🤗 Diffusers 中的调度器,请查看下表:

A1111/k-diffusion🤗 Diffusers用法
DPM++ 2MDPMSolverMultistepScheduler
DPM++ 2M KarrasDPMSolverMultistepScheduler使用 use_karras_sigmas=True 进行初始化
DPM++ 2M SDEDPMSolverMultistepScheduler使用 algorithm_type="sde-dpmsolver++" 进行初始化
DPM++ 2M SDE KarrasDPMSolverMultistepScheduler使用 use_karras_sigmas=True 和 algorithm_type="sde-dpmsolver++" 进行初始化
DPM++ 2S aN/A与 DPMSolverSinglestepScheduler 非常相似
DPM++ 2S a KarrasN/A与 DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...) 非常相似
DPM++ SDEDPMSolverSinglestepScheduler
DPM++ SDE KarrasDPMSolverSinglestepScheduler使用 use_karras_sigmas=True 进行初始化
DPM2KDPM2DiscreteScheduler
DPM2 KarrasKDPM2DiscreteScheduler使用 use_karras_sigmas=True 进行初始化
DPM2 aKDPM2AncestralDiscreteScheduler
DPM2 a KarrasKDPM2AncestralDiscreteScheduler使用 use_karras_sigmas=True 进行初始化
DPM 自适应N/A
DPM 快速N/A
EulerEulerDiscreteScheduler
Euler aEulerAncestralDiscreteScheduler
HeunHeunDiscreteScheduler
LMSLMSDiscreteScheduler
LMS KarrasLMSDiscreteScheduler使用 use_karras_sigmas=True 进行初始化
N/ADEISMultistepScheduler
N/AUniPCMultistepScheduler

噪声调度与调度类型

A1111/k-diffusion🤗 Diffusers
Karras使用 use_karras_sigmas=True 进行初始化
sgm_uniform使用 timestep_spacing="trailing" 进行初始化
简单使用 timestep_spacing="trailing" 进行初始化
指数使用 timestep_spacing="linspace" 和 use_exponential_sigmas=True 进行初始化
beta使用 timestep_spacing="linspace" 和 use_beta_sigmas=True 进行初始化

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

SchedulerMixin

类 diffusers.SchedulerMixin

< >

( )

所有调度器的基类。

SchedulerMixin 包含所有调度器共用的通用函数,例如通用的加载和保存功能。

ConfigMixin 负责存储传递给调度器 __init__ 函数的配置属性(例如 num_train_timesteps),这些属性可以通过 scheduler.config.num_train_timesteps 进行访问。

类属性:

  • _compatibles (list[str]) — 与父调度器类兼容的调度器类列表。使用 from_config() 加载不同的兼容调度器类(应由父类重写)。

from_pretrained

< >

( pretrained_model_name_or_path: str | os.PathLike | None = Nonesubfolder: str | None = Nonereturn_unused_kwargs: bool = False**kwargs: Any ) → SchedulerMixin or tuple[SchedulerMixin, dict[str, Any]]

参数

  • pretrained_model_name_or_path (str 或 os.PathLike, 可选) — 可以是以下之一: Hub 上托管的预训练模型的模型 ID(例如 google/ddpm-celebahq-256)。 包含通过 save_pretrained() 保存的调度器配置的目录路径(例如 ./my_model_directory)。
    • 一个字符串,即托管在 Hub 上的预训练模型的 model id(例如 google/ddpm-celebahq-256)。
    • 指向包含使用 save_pretrained() 保存的调度器配置的目录的路径(例如 ./my_model_directory)。
  • subfolder (str, 可选) — 模型文件在 Hub 或本地更大的模型仓库中的子文件夹位置。
  • return_unused_kwargs (bool,可选,默认为 False) — 是否返回未被 Python 类使用的 kwargs。
  • cache_dir(str 或 os.PathLike,可选)— 如果未使用标准缓存,则用于缓存已下载的预训练模型配置的目录路径。
  • force_download (bool,可选,默认为 False) — 是否强制(重新)下载模型权重和配置文件,如果存在缓存版本则覆盖它们。
  • proxies (dict[str, str],可选) — 按协议或端点使用的代理服务器字典,例如 {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}。每次请求都会使用这些代理。
  • output_loading_info (bool,可选,默认为 False) — 是否同时返回一个包含缺失键、意外键和错误消息的字典。
  • local_files_only (bool,可选,默认为 False) — 是否仅加载本地的模型权重和配置文件。如果设置为 True,则不会从 Hub 下载模型。
  • token (str 或 bool,可选) — 用于远程文件的 HTTP bearer 授权令牌。如果为 True,则使用由 diffusers-cli login 生成的令牌(存储在 ~/.huggingface 中)。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。它可以是分支名称、标签名称、提交 id,或 Git 允许的任何标识符。

返回值

SchedulerMixin 或 tuple[SchedulerMixin, dict[str, Any]]

从配置实例化的调度器。如果 return_unused_kwargs 为 True,则返回一个元组,其中第二个元素是一个包含未使用的关键字参数的字典。

从本地目录或 Hub 仓库中预定义的 JSON 配置文件实例化一个调度器。

> 若要使用私有或 受控模型,请先通过 hf > auth login 登录。您还可以启用特殊的 > “离线模式”,以便在防火墙环境中使用此方法。

save_pretrained

< >

( save_directory: str | os.PathLikepush_to_hub: bool = False**kwargs: Any )

参数

  • save_directory (str 或 os.PathLike) — 用于保存配置 JSON 文件的目录(如果该目录不存在,则会自动创建)。
  • push_to_hub (bool,可选,默认为 False) — 是否在保存模型后将其推送到 Hugging Face Hub。您可以使用 repo_id 指定要推送到的仓库(默认使用您命名空间中 save_directory 的名称)。
  • kwargs (dict[str, Any],可选) — 传递给 push_to_hub() 方法的额外关键字参数。

将调度器配置对象保存到目录中,以便使用 from_pretrained() 类方法重新加载。

SchedulerOutput

class diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

参数

  • prev_sample(对于图像,形状为 (batch_size, num_channels, height, width) 的 torch.Tensor)— 前一时间步的已计算样本 (x_{t-1})。在去噪循环中,应将 prev_sample 用作下一个模型输入。

调度器 step 函数输出的基类。

KarrasDiffusionSchedulers

KarrasDiffusionSchedulers 是 🤗 Diffusers 中调度器的一种广泛泛化。该类别中的调度器在高层面上通过其噪声采样策略、网络类型与缩放方式、训练策略以及损失函数的加权方式加以区分。

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

PushToHubMixin

class diffusers.utils.PushToHubMixin

< >

( )

一个用于将模型、调度器或流水线推送到 Hugging Face Hub 的 Mixin。

push_to_hub

< >

( repo_id: strcommit_message: str | None = Noneprivate: bool | None = Nonetoken: str | None = Nonecreate_pr: bool = Falsesafe_serialization: bool = Truevariant: str | None = Nonesubfolder: str | None = None )

参数

  • repo_id (str) — 要推送模型、调度器或流水线文件的目标仓库名称。推送到组织时,应包含组织名称。repo_id 也可以是本地目录的路径。
  • commit_message (str, 可选) — 推送时提交的提交信息。默认为 "Upload {object}"。
  • private (bool,可选) — 是否将仓库设为私有。如果为 None(默认值),除非组织的默认设置为私有,否则仓库将是公开的。如果仓库已存在,则忽略此值。
  • token (str, 可选) — 用于远程文件的 HTTP bearer 授权令牌。即运行 hf auth login 时生成的令牌(存储在 ~/.huggingface 中)。
  • create_pr (bool,可选,默认为 False) — 是否使用上传的文件创建 PR,还是直接提交。
  • safe_serialization(bool,可选,默认为 True)—— 是否将模型权重转换为 safetensors 格式。
  • variant (str, 可选) — 如果指定,权重将以 pytorch_model.<variant>.bin 格式保存。

将模型、调度器或流水线文件上传到 🤗 Hugging Face Hub。

示例:

from diffusers import UNet2DConditionModel

unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")

# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")

# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")
Update on GitHub