Diffusers documentation

调度器

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
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