Diffusers 文档

调度器

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

调度器

🤗 Diffusers 为扩散过程提供了许多调度器函数。调度器接收模型的输出(扩散过程迭代的样本)和一个时间步,以返回去噪后的样本。时间步非常重要,因为它决定了扩散过程中的步骤;数据通过向前迭代 *n* 个时间步生成,而推理则通过向后传播时间步发生。根据时间步,调度器可能是*离散的*(此时时间步是 `int`)或*连续的*(此时时间步是 `float`)。

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

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

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

A1111/k-diffusion 🤗 Diffusers 用法
DPM++ 2M DPMSolverMultistepScheduler
DPM++ 2M Karras DPMSolverMultistepScheduler 使用 `use_karras_sigmas=True` 初始化
DPM++ 2M SDE DPMSolverMultistepScheduler 使用 `algorithm_type="sde-dpmsolver++"` 初始化
DPM++ 2M SDE Karras DPMSolverMultistepScheduler 使用 `use_karras_sigmas=True` 和 `algorithm_type="sde-dpmsolver++"` 初始化
DPM++ 2S a 不适用 与 `DPMSolverSinglestepScheduler` 非常相似
DPM++ 2S a Karras 不适用 与 `DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...)` 非常相似
DPM++ SDE DPMSolverSinglestepScheduler
DPM++ SDE Karras DPMSolverSinglestepScheduler 使用 `use_karras_sigmas=True` 初始化
DPM2 KDPM2DiscreteScheduler
DPM2 Karras KDPM2DiscreteScheduler 使用 `use_karras_sigmas=True` 初始化
DPM2 a KDPM2AncestralDiscreteScheduler
DPM2 a Karras KDPM2AncestralDiscreteScheduler 使用 `use_karras_sigmas=True` 初始化
DPM adaptive 不适用
DPM fast 不适用
Euler EulerDiscreteScheduler
Euler a EulerAncestralDiscreteScheduler
Heun HeunDiscreteScheduler
LMS LMSDiscreteScheduler
LMS Karras LMSDiscreteScheduler 使用 `use_karras_sigmas=True` 初始化
不适用 DEISMultistepScheduler
不适用 UniPCMultistepScheduler

噪声 schedules 和 schedule 类型

A1111/k-diffusion 🤗 Diffusers
Karras 使用 `use_karras_sigmas=True` 初始化
sgm_uniform 使用 `timestep_spacing="trailing"` 初始化
simple 使用 `timestep_spacing="trailing"` 初始化
exponential 使用 `timestep_spacing="linspace"`、`use_exponential_sigmas=True` 初始化
beta 使用 `timestep_spacing="linspace"`、`use_beta_sigmas=True` 初始化

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

SchedulerMixin

class 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: typing.Union[str, os.PathLike, NoneType] = None subfolder: typing.Optional[str] = None return_unused_kwargs = False **kwargs )

参数

  • pretrained_model_name_or_path (stros.PathLike, 可选) — 可以是以下之一:

    • 一个字符串,即 Hub 上托管的预训练模型的*模型 ID*(例如 `google/ddpm-celebahq-256`)。
    • 一个指向*目录*的路径(例如 `./my_model_directory`),该目录包含使用 save_pretrained() 保存的调度器配置。
  • subfolder (str, 可选) — Hub 或本地大型模型仓库中模型文件的子文件夹位置。
  • return_unused_kwargs (bool, 可选, 默认为 False) — 是否返回未被 Python 类使用的 kwargs。
  • cache_dir (Union[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 (strbool, 可选) — 用于远程文件的 HTTP Bearer 授权的令牌。如果为 `True`,则使用 `diffusers-cli login` 生成的令牌(存储在 `~/.huggingface` 中)。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。它可以是分支名称、标签名称、提交 ID 或 Git 允许的任何标识符。

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

要使用私有模型或受限模型,请使用 `huggingface-cli login` 登录。您还可以激活特殊的“离线模式”,以便在有防火墙的环境中使用此方法。

save_pretrained

< >

( save_directory: typing.Union[str, os.PathLike] push_to_hub: bool = False **kwargs )

参数

  • save_directory (stros.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 (torch.Tensor,对于图像,形状为 (batch_size, num_channels, height, width)) — 计算出的前一个时间步的样本 (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: str commit_message: typing.Optional[str] = None private: typing.Optional[bool] = None token: typing.Optional[str] = None create_pr: bool = False safe_serialization: bool = True variant: typing.Optional[str] = None )

参数

  • repo_id (str) — 您希望将模型、调度器或 pipeline 文件推送到的仓库名称。推送到组织时应包含您的组织名称。`repo_id` 也可以是本地目录的路径。
  • commit_message (str, 可选) — 推送时要提交的消息。默认为 `"Upload {object}"`。
  • private (bool, 可选) — 是否将仓库设为私有。如果为 `None`(默认),仓库将为公开,除非组织的默认设置为私有。如果仓库已存在,则忽略此值。
  • token (str, 可选) — 用于远程文件的 HTTP Bearer 授权的令牌。运行 `huggingface-cli 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")
< > 在 GitHub 上更新