Diffusers 文档

多扩散

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

入门

MultiDiffusion

MultiDiffusion: 用于受控图像生成的融合扩散路径 是 Omer Bar-Tal、Lior Yariv、Yaron Lipman 和 Tali Dekel 的作品。

论文摘要如下

基于扩散模型的文本到图像生成技术的最新进展在图像质量方面展现出变革性的能力。然而,生成图像的用户可控性和快速适应新任务仍然是一个开放的挑战,目前主要通过昂贵且耗时的重新训练和微调或针对特定图像生成任务的临时调整来解决。在这项工作中,我们提出了MultiDiffusion,一个统一的框架,它允许使用预训练的文本到图像扩散模型进行多功能且可控的图像生成,而无需任何额外的训练或微调。我们方法的核心是一个新的生成过程,它基于一个优化任务,将多个扩散生成过程与一组共享的参数或约束捆绑在一起。我们证明了MultiDiffusion可以很容易地应用于生成符合用户提供控制的高质量和多样化图像,例如所需的纵横比(例如,全景)和空间引导信号,从精确的分割掩码到边界框。

您可以在项目页面原始代码库中找到有关MultiDiffusion的更多信息,并可以在演示中试用它。

提示

在调用StableDiffusionPanoramaPipeline时,可以指定view_batch_size参数大于1。对于一些高性能的GPU,这可以加快生成过程并增加VRAM使用率。

要生成类似全景的图像,请确保相应地传递宽度参数。我们建议使用默认值2048的宽度值。

应用圆形填充以确保在处理全景时不会出现拼接伪影,从而确保从最右端到最左端平滑过渡。通过启用圆形填充(设置circular_padding=True),操作会在图像最右端点后应用额外的裁剪,使模型能够“看到”从最右端到最左端的过渡。这有助于在360度意义上保持视觉一致性,并创建可以使用360度全景查看器观看的正确“全景”。在Stable Diffusion中解码潜在向量时,会应用圆形填充以确保解码后的潜在向量在RGB空间中匹配。

例如,在没有圆形填充的情况下,会出现拼接伪影(默认):img

但使用圆形填充后,右侧和左侧部分会匹配(circular_padding=True):img

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

StableDiffusionPanoramaPipeline

class diffusers.StableDiffusionPanoramaPipeline

< >

( vae: AutoencoderKL text_encoder: CLIPTextModel tokenizer: CLIPTokenizer unet: UNet2DConditionModel scheduler: DDIMScheduler 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 的输入。

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

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

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

__call__

< >

( prompt: Union = None height: Optional = 512 width: Optional = 2048 num_inference_steps: int = 50 timesteps: List = None guidance_scale: float = 7.5 view_batch_size: int = 1 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 cross_attention_kwargs: Optional = None guidance_rescale: float = 0.0 circular_padding: bool = False clip_skip: Optional = None callback_on_step_end: Optional = None callback_on_step_end_tensor_inputs: List = ['latents'] **kwargs: Any ) StableDiffusionPipelineOutputtuple

参数

  • prompt (strList[str]可选) — 指导图像生成的提示或提示。如果未定义,您需要传递 prompt_embeds
  • height (int可选,默认为 512) — 生成的图像的像素高度。
  • width (int可选,默认为 2048) — 生成的图像的像素宽度。宽度保持较高,因为管道应该生成全景式图像。
  • num_inference_steps (int, 可选, 默认值:50) — 降噪步骤数。更多的降噪步骤通常会导致更高质量的图像,但会降低推理速度。
  • timesteps (List[int], 可选) — 生成图像的时步。如果没有指定,则使用调度器的默认时步间隔策略。
  • guidance_scale (float, 可选, 默认值:7.5) — 更高的指导尺度值会鼓励模型生成与文本prompt密切相关的图像,但会降低图像质量。当guidance_scale > 1时,启用指导尺度。
  • view_batch_size (int, 可选, 默认值:1) — 用于降噪拆分视图的批次大小。对于某些具有高性能的 GPU,较高的视图批次大小可以加快生成速度并增加 VRAM 使用量。
  • negative_prompt (strList[str], 可选) — 指导图像生成中不应包含的内容的提示或提示。如果没有定义,则需要传递negative_prompt_embeds。当不使用指导(guidance_scale < 1)时忽略。
  • num_images_per_prompt (int, 可选, 默认值:1) — 每个提示生成图像的数量。
  • eta (float, 可选, 默认值:0.0) — 对应于来自DDIM论文的参数 eta (η)。仅适用于DDIMScheduler,在其他调度器中被忽略。
  • generator (torch.GeneratorList[torch.Generator], 可选) — 一个torch.Generator,用于使生成确定性。
  • latents (torch.Tensor, 可选) — 从高斯分布中采样的预生成噪声潜伏,用作图像生成的输入。可用于用不同的提示微调相同的生成。如果没有提供,则通过使用提供的随机generator采样来生成潜伏张量。
  • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入(提示加权)。如果没有提供,则从prompt输入参数生成文本嵌入。
  • ip_adapter_image_embeds (List[torch.Tensor], 可选) — 为 IP-Adapter 预生成的图像嵌入。它应该是一个列表,长度与 IP-Adapter 的数量相同。每个元素应该是一个形状为 (batch_size, num_images, emb_dim) 的张量。如果 do_classifier_free_guidance 设置为 True,它应该包含负图像嵌入。如果没有提供,则从 ip_adapter_image 输入参数计算嵌入。
  • output_type (str, 可选,默认为 "pil") — 生成的图像的输出格式。在 PIL.Imagenp.array 之间选择。
  • return_dict (bool, 可选,默认为 True) — 是否返回 StableDiffusionPipelineOutput 而不是普通元组。
  • cross_attention_kwargs (dict, 可选) — 如果指定,则传递给 AttentionProcessor 的关键字参数字典,如 diffusers.models.attention_processor 中的 self.processor 下所定义。
  • guidance_rescale (float, 可选,默认为 0.0) — 指导嵌入的重新缩放因子。值为 0.0 表示不应用重新缩放。
  • circular_padding (bool, 可选,默认为 False) — 如果设置为 True,则应用圆形填充以确保没有缝合伪影。圆形填充允许模型无缝地从图像的最右侧生成过渡到最左侧,在 360 度范围内保持一致性。
  • clip_skip (int, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。值为 1 表示将使用倒数第二层的输出计算提示嵌入。
  • callback_on_step_end (Callable, 可选) — 在推理过程中每次去噪步骤结束时调用的函数。该函数使用以下参数调用:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)callback_kwargs 将包含按 callback_on_step_end_tensor_inputs 指定的所有张量列表。
  • callback_on_step_end_tensor_inputs (List[str], 可选) — callback_on_step_end 函数的张量输入列表。列表中指定的张量将作为 callback_kwargs 参数传递。您只能包含管道类 ._callback_tensor_inputs 属性中列出的变量。

返回值

StableDiffusionPipelineOutputtuple

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

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

示例

>>> import torch
>>> from diffusers import StableDiffusionPanoramaPipeline, DDIMScheduler

>>> model_ckpt = "stabilityai/stable-diffusion-2-base"
>>> scheduler = DDIMScheduler.from_pretrained(model_ckpt, subfolder="scheduler")
>>> pipe = StableDiffusionPanoramaPipeline.from_pretrained(
...     model_ckpt, scheduler=scheduler, torch_dtype=torch.float16
... )

>>> pipe = pipe.to("cuda")

>>> prompt = "a photo of the dolomites"
>>> image = pipe(prompt).images[0]

decode_latents_with_padding

< >

( latents: Tensor padding: int = 8 ) torch.Tensor

参数

  • latents (torch.Tensor) — 用于解码的输入潜码。
  • padding (int, 可选) — 每边添加的潜码数量,用于填充。默认值为 8。

返回值

torch.Tensor

去除填充后的解码图像。

使用填充解码给定的潜码,用于圆形推断。

注意

  • 填充被添加以移除边界伪影,并提高输出质量。
  • 这将略微增加内存使用量。
  • 然后从解码图像中移除填充像素。

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,则忽略)。
  • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。可以用来轻松调整文本输入,例如 提示加权。如果未提供,文本嵌入将从 prompt 输入参数生成。
  • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负文本嵌入。可用于轻松调整文本输入,例如 提示权重。如果没有提供,negative_prompt_embeds 将从 negative_prompt 输入参数生成。
  • lora_scale (float, 可选) — 如果加载了 LoRA 层,则将应用于文本编码器所有 LoRA 层的 LoRA 比例。
  • clip_skip (int, 可选) — 在计算提示嵌入时要从 CLIP 跳过的层数。值为 1 表示将使用倒数第二层的输出来计算提示嵌入。

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

get_guidance_scale_embedding

< >

( w: Tensor embedding_dim: int = 512 dtype: dtype = torch.float32 ) torch.Tensor

参数

  • w (torch.Tensor) — 使用指定的引导比例生成嵌入向量,以随后丰富时间步长嵌入。
  • embedding_dim (int, 可选,默认为 512) — 生成的嵌入的维度。
  • dtype (torch.dtype, 可选,默认为 torch.float32) — 生成的嵌入的数据类型。

返回值

torch.Tensor

形状为 (len(w), embedding_dim) 的嵌入向量。

参见 https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

get_views

< >

( panorama_height: int panorama_width: int window_size: int = 64 stride: int = 8 circular_padding: bool = False ) List[Tuple[int, int, int, int]]

参数

  • panorama_height (int) — 全景图的高度。
  • window_size (int, 可选) — 窗口大小。默认为 64。
  • stride (int, 可选) — 步长值。默认为 8。
  • circular_padding (bool, 可选) — 是否应用圆形填充。默认为 False。

返回值

List[Tuple[int, int, int, int]]

表示视图的元组列表。每个元组包含四个整数,分别代表全景图中窗口的起始和结束坐标。

根据给定的参数生成视图列表。在这里,我们定义了映射 F_i(参见 MultiDiffusion 论文 https://arxiv.org/abs/2302.08113 中的等式 7)。如果全景图的高度/宽度 < window_size,则高度/宽度的 num_blocks 应返回 1。

StableDiffusionPipelineOutput

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