Diffusers 文档

自注意力引导

Hugging Face's logo
加入 Hugging Face 社区

并获取增强型文档体验

开始使用

自注意力引导

使用自注意力引导提高扩散模型样本质量 由 Susung Hong 等人撰写。

论文摘要如下

降噪扩散模型 (DDMs) 因其卓越的生成质量和多样性而备受关注。这种成功很大程度上归功于使用类别或文本条件的扩散引导方法,例如分类器引导和无分类器引导。本文从更全面的角度出发,超越了传统的引导方法。从这个广义的角度来看,我们引入了新颖的无条件和无训练策略来提高生成的图像质量。作为一种简单的解决方案,模糊引导提高了中间样本对其精细信息和结构的适用性,使扩散模型能够以适度的引导尺度生成更高质量的样本。在此基础上,自注意力引导 (SAG) 使用扩散模型的中间自注意力图来增强其稳定性和有效性。具体来说,SAG 仅在扩散模型在每次迭代中关注的区域进行对抗性模糊,并相应地引导它们。我们的实验结果表明,我们的 SAG 提高了各种扩散模型的性能,包括 ADM、IDDPM、稳定扩散和 DiT。此外,将 SAG 与传统引导方法相结合可以进一步提高性能。

您可以在 项目页面原始代码库 上找到有关自注意力引导的更多信息,并尝试在 演示笔记本 中进行尝试。

请务必查看计划程序 指南,了解如何探索计划程序速度和质量之间的权衡,并查看 跨管道重用组件 部分,了解如何有效地将相同组件加载到多个管道中。

StableDiffusionSAGPipeline

class diffusers.StableDiffusionSAGPipeline

< >

( vae: AutoencoderKL text_encoder: CLIPTextModel tokenizer: CLIPTokenizer unet: UNet2DConditionModel scheduler: KarrasDiffusionSchedulers safety_checker: StableDiffusionSafetyChecker feature_extractor: CLIPImageProcessor image_encoder: Optional = None requires_safety_checker: bool = True )

参数

  • vae (AutoencoderKL) — 用于将图像编码和解码为潜在表示的变分自编码器 (VAE) 模型。
  • text_encoder (CLIPTextModel) — 冻结的文本编码器 (clip-vit-large-patch14)。
  • tokenizer (CLIPTokenizer) — 用于对文本进行标记化的 CLIPTokenizer
  • unet (UNet2DConditionModel) — 用于对编码图像潜在向量进行降噪的 UNet2DConditionModel
  • scheduler (SchedulerMixin) — 用于与 unet 结合以对编码图像潜在向量进行降噪的计划程序。可以是 DDIMSchedulerLMSDiscreteSchedulerPNDMScheduler 之一。
  • safety_checker (StableDiffusionSafetyChecker) — 用于估计生成的图像是否可能被视为冒犯或有害的分类模块。有关模型潜在危害的更多详细信息,请参阅 模型卡
  • feature_extractor (CLIPImageProcessor) — 用于从生成的图像中提取特征的 CLIPImageProcessor;用作 safety_checker 的输入。

使用 Stable Diffusion 进行文本到图像生成的管道。

该模型继承自 DiffusionPipeline。查看超类文档以获取为所有管道实现的通用方法(下载、保存、在特定设备上运行等)。

该管道还继承了以下加载方法

__call__

< >

( prompt: Union = None height: Optional = None width: Optional = None num_inference_steps: int = 50 guidance_scale: float = 7.5 sag_scale: float = 0.75 negative_prompt: Union = None num_images_per_prompt: Optional = 1 eta: float = 0.0 generator: Union = None latents: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None ip_adapter_image: Union = None ip_adapter_image_embeds: Optional = None output_type: Optional = 'pil' return_dict: bool = True callback: Optional = None callback_steps: Optional = 1 cross_attention_kwargs: Optional = None clip_skip: Optional = None ) StableDiffusionPipelineOutputtuple

参数

  • prompt (strList[str], 可选) — 指导图像生成的提示或提示。如果未定义,您需要传递 prompt_embeds
  • height (int, 可选, 默认值为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的像素高度。
  • width (int, 可选, 默认值为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的像素宽度。
  • num_inference_steps (int, 可选, 默认值为 50) — 降噪步骤的数量。更多降噪步骤通常会导致更高质量的图像,但会以更慢的推理为代价。
  • guidance_scale (float, 可选, 默认值为 7.5) — 更高的引导比例值鼓励模型生成与文本 prompt 密切相关的图像,但会以降低图像质量为代价。当 guidance_scale > 1 时启用引导比例。
  • sag_scale (float, 可选, 默认为 0.75) — 在 [0, 1.0] 之间选择,以获得更好的质量。
  • negative_prompt (strList[str], 可选) — 指导图像生成中不包含什么的提示或提示。 如果未定义,则需要改为传递 negative_prompt_embeds。 当不使用引导时(guidance_scale < 1)忽略。
  • num_images_per_prompt (int, 可选, 默认为 1) — 每个提示生成的图像数量。
  • eta (float, 可选, 默认为 0.0) — 对应于来自 DDIM 论文的 η 参数。 仅适用于 DDIMScheduler,并在其他调度器中被忽略。
  • generator (torch.GeneratorList[torch.Generator], 可选) — 一个 torch.Generator 使生成确定性。
  • latents (torch.Tensor, 可选) — 从高斯分布采样的预生成的噪声潜码,用作图像生成的输入。 可以用来用不同的提示调整相同的生成。 如果未提供,则通过使用提供的随机 generator 采样生成潜码张量。
  • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。 可用于轻松调整文本输入(提示加权)。 如果未提供,则从 prompt 输入参数生成文本嵌入。
  • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负文本嵌入。 可用于轻松调整文本输入(提示加权)。 如果未提供,则从 negative_prompt 输入参数生成 negative_prompt_embeds。 ip_adapter_image — (PipelineImageInput, 可选): 可选的图像输入,用于与 IP 适配器一起使用。
  • ip_adapter_image_embeds (List[torch.Tensor], 可选) — 用于 IP 适配器的预生成的图像嵌入。 如果未提供,则从 ip_adapter_image 输入参数计算嵌入。
  • output_type (str, 可选, 默认为 "pil") — 生成的图像的输出格式。 在 PIL.Imagenp.array 之间选择。
  • callback (Callable, 可选) — 在推理期间每 callback_steps 步调用一次的函数。该函数使用以下参数调用: callback(step: int, timestep: int, latents: torch.Tensor).
  • callback_steps (int, 可选,默认值为 1) — callback 函数的调用频率。如果未指定,则在每一步都调用回调函数。
  • cross_attention_kwargs (dict, 可选) — 如果指定,则将作为关键字参数字典传递给 self.processor 中定义的 AttentionProcessor.
  • clip_skip (int, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。值为 1 表示将使用倒数第二层的输出计算提示嵌入。

返回值

StableDiffusionPipelineOutputtuple

如果 return_dictTrue,则返回 StableDiffusionPipelineOutput,否则返回 tuple,其中第一个元素是包含生成图像的列表,第二个元素是包含 bool 值的列表,指示相应的生成图像是否包含“不适合工作”(nsfw)内容。

用于生成管道调用的函数。

示例

>>> import torch
>>> from diffusers import StableDiffusionSAGPipeline

>>> pipe = StableDiffusionSAGPipeline.from_pretrained(
...     "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt, sag_scale=0.75).images[0]

encode_prompt

< >

( prompt device num_images_per_prompt do_classifier_free_guidance negative_prompt = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None lora_scale: Optional = None clip_skip: Optional = None )

参数

  • prompt (strList[str], 可选) — 要编码的提示 device — (torch.device): torch 设备
  • num_images_per_prompt (int) — 每个提示应该生成的图像数量
  • do_classifier_free_guidance (bool) — 是否使用分类器自由引导
  • negative_prompt (strList[str], 可选) — 不应该引导图像生成的提示或提示。如果未定义,则必须传递 negative_prompt_embeds。在不使用引导时忽略(即,如果 guidance_scale 小于 1,则忽略)。
  • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负面文本嵌入。 可用于轻松调整文本输入,例如提示权重。 如果未提供,negative_prompt_embeds 将从negative_prompt输入参数生成。
  • lora_scale (float, 可选) — 如果加载了 LoRA 层,则将应用于文本编码器所有 LoRA 层的 LoRA 比例。
  • clip_skip (int, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。 值为 1 意味着将使用预最终层的输出计算提示嵌入。

将提示编码为文本编码器隐藏状态。

StableDiffusionOutput

class diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput

< >

( images: Union nsfw_content_detected: Optional )

参数

  • images (List[PIL.Image.Image]np.ndarray) — 长度为batch_size 的去噪 PIL 图像列表或形状为(batch_size, height, width, num_channels) 的 NumPy 数组。
  • nsfw_content_detected (List[bool]) — 指示相应生成的图像是否包含“不适合工作” (nsfw) 内容的列表,如果无法执行安全检查,则为None

Stable Diffusion 管道的输出类。

< > 在 GitHub 上更新