Diffusers documentation
调度器
调度器
🤗 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 | N/A | 与 DPMSolverSinglestepScheduler 非常相似 |
| DPM++ 2S a Karras | N/A | 与 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 自适应 | N/A | |
| DPM 快速 | N/A | |
| Euler | EulerDiscreteScheduler | |
| Euler a | EulerAncestralDiscreteScheduler | |
| Heun | HeunDiscreteScheduler | |
| LMS | LMSDiscreteScheduler | |
| LMS Karras | LMSDiscreteScheduler | 使用 use_karras_sigmas=True 进行初始化 |
| N/A | DEISMultistepScheduler | |
| N/A | UniPCMultistepScheduler |
噪声调度与调度类型
| 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
所有调度器的基类。
SchedulerMixin 包含所有调度器共用的通用函数,例如通用的加载和保存功能。
ConfigMixin 负责存储传递给调度器 __init__ 函数的配置属性(例如 num_train_timesteps),这些属性可以通过 scheduler.config.num_train_timesteps 进行访问。
类属性:
- _compatibles (
list[str]) — 与父调度器类兼容的调度器类列表。使用 from_config() 加载不同的兼容调度器类(应由父类重写)。
from_pretrained
< source >( 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)。
- 一个字符串,即托管在 Hub 上的预训练模型的 model id(例如
- 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
< source >( 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
< source >( prev_sample: Tensor )
调度器 step 函数输出的基类。
KarrasDiffusionSchedulers
KarrasDiffusionSchedulers 是 🤗 Diffusers 中调度器的一种广泛泛化。该类别中的调度器在高层面上通过其噪声采样策略、网络类型与缩放方式、训练策略以及损失函数的加权方式加以区分。
根据常微分方程(ODE)求解器类型的不同,该类中的不同调度器归属于上述分类体系,并为 🤗 Diffusers 中实现的主要调度器的设计提供了良好的抽象。该类的调度器可在此处找到。
PushToHubMixin
一个用于将模型、调度器或流水线推送到 Hugging Face Hub 的 Mixin。
push_to_hub
< source >( 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")