Diffusers 文档

调度程序

Hugging Face's logo
加入 Hugging Face 社区

获得增强文档体验的权限

开始操作

调度器

🤗 Diffusers 为扩散过程提供了许多调度器函数。调度器接收模型输出(扩散过程在其上迭代的样本)和时间步长,以返回去噪样本。时间步长很重要,因为它决定了步骤在扩散过程中的位置;通过向前迭代 n 个时间步长生成数据,通过向后传播时间步长执行推理。根据时间步长,调度器可以是离散的,在这种情况下,时间步长是int连续的,在这种情况下,时间步长是float

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

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

许多调度器由Katherine Crowsonk-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=Truealgorithm_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 自适应
DPM 快速
欧拉 EulerDiscreteScheduler
欧拉 a EulerAncestralDiscreteScheduler
休恩 HeunDiscreteScheduler
LMS LMSDiscreteScheduler
LMS Karras LMSDiscreteScheduler 使用 use_karras_sigmas=True 初始化
DEISMultistepScheduler
UniPCMultistepScheduler

所有调度器都建立在基础的 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: Union = None subfolder: Optional = None return_unused_kwargs = False **kwargs )

参数

  • pretrained_model_name_or_path (stros.PathLike可选) — 可以是以下任一项:

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

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

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

save_pretrained

< >

( save_directory: Union 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

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

diffusers.utils.PushToHubMixin

< >

( )

一种将模型、调度程序或管道推送到 Hugging Face Hub 的混合。

push_to_hub

< >

( repo_id: str commit_message: 可选 = None private: 可选 = None token: 可选 = None create_pr: bool = False safe_serialization: bool = True variant: 可选 = None )

参数

  • repo_id (str) — 希望将你的模型、调度器或管道文件推送到其上的存储库的名称。推送到某个组织时
  • commit_message (str, 可选) - 推送时提交的消息。默认为 "Upload {object}".
  • private (bool, 可选) - 创建的仓库是否为私有。
  • create_pr (bool可选,默认为 False) — 是否使用已上传的文件创建 PR 或直接提交。
  • safe_serialization (bool可选,默认为 True) — 是否将模型权重转换为 safetensors 格式。
  • 变体 (str, 可选) —如果指定,则权重将保存为 pytorch_model.<variant>.bin 格式。

将模型、调度器或管道文件上传至

示例

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 上更新