Diffusers 文档

T2I-Adapter

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

T2I 适配器

T2I 适配器:学习适配器以挖掘文本到图像扩散模型的更多可控能力 作者:Chong Mou、Xintao Wang、Liangbin Xie、Jian Zhang、Zhongang Qi、Ying Shan、Xiaohu Qie。

使用预训练模型,我们可以提供控制图像(例如,深度图)来控制稳定扩散文本到图像生成,使其遵循深度图像的结构并填充细节。

论文摘要如下:

大型文本到图像 (T2I) 模型的出色生成能力证明了其学习复杂结构和有意义语义的强大力量。然而,仅仅依靠文本提示无法充分利用模型学习到的知识,尤其是在需要灵活和准确控制(例如,颜色和结构)时。在本文中,我们旨在“挖掘” T2I 模型隐式学习的能力,然后明确地使用它们以更精细地控制生成。具体来说,我们建议学习简单且轻量级的 T2I 适配器,以将 T2I 模型中的内部知识与外部控制信号对齐,同时冻结原始大型 T2I 模型。通过这种方式,我们可以根据不同的条件训练各种适配器,从而在生成结果的颜色和结构中实现丰富的控制和编辑效果。此外,所提出的 T2I 适配器具有可组合性和泛化能力等具有实际价值的吸引人特性。大量实验表明,我们的 T2I 适配器具有良好的生成质量和广泛的应用范围。

该模型由社区贡献者 HimariO ❤️ 贡献。

StableDiffusionAdapterPipeline

class diffusers.StableDiffusionAdapterPipeline

< >

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

参数

  • adapter (T2IAdapterMultiAdapterList[T2IAdapter]) — 在去噪过程中为 unet 提供额外的条件。如果将多个 Adapter 设置为列表,则来自每个 Adapter 的输出将加在一起以创建一个组合的额外条件。
  • adapter_weights (List[float], 可选, 默认值为 None) — 代表权重的浮点数列表,该权重将在将每个适配器的输出加在一起之前乘以每个适配器的输出。
  • vae (AutoencoderKL) — 将图像编码和解码到潜在表示的变分自动编码器 (VAE) 模型。
  • text_encoder (CLIPTextModel) — 冻结的文本编码器。Stable Diffusion 使用 CLIP 的文本部分,特别是 clip-vit-large-patch14 变体。
  • tokenizer (CLIPTokenizer) — 类 CLIPTokenizer 的标记器。
  • unet (UNet2DConditionModel) — 用于对编码的图像潜在变量进行去噪的条件 U-Net 架构。
  • scheduler (SchedulerMixin) — 与 unet 一起使用的调度器,用于对编码的图像潜在变量进行去噪。可以是 DDIMSchedulerLMSDiscreteSchedulerPNDMScheduler 之一。
  • safety_checker (StableDiffusionSafetyChecker) — 分类模块,估计生成的图像是否可以被认为是冒犯或有害的。请参阅 模型卡 了解详细信息。
  • feature_extractor (CLIPImageProcessor) — 从生成的图像中提取特征的模型,用作 safety_checker 的输入。

使用增强了 T2I-Adapter 的 Stable Diffusion 进行文本到图像生成的管道 https://arxiv.org/abs/2302.08453

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

__call__

< >

( prompt: Union = None image: Union = None height: Optional = None width: Optional = None num_inference_steps: int = 50 timesteps: List = None sigmas: List = None guidance_scale: float = 7.5 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 output_type: Optional = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 cross_attention_kwargs: Optional = None adapter_conditioning_scale: Union = 1.0 clip_skip: Optional = None ) ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput or tuple

参数

  • prompt (strList[str], 可选) — 指导图像生成的提示或提示。如果未定义,则必须传递 prompt_embeds。 取而代之。
  • image (torch.Tensor, PIL.Image.Image, List[torch.Tensor]List[PIL.Image.Image]List[List[PIL.Image.Image]]) — 适配器输入条件。适配器使用此输入条件为 Unet 生成指导。如果类型指定为 torch.Tensor,则按原样传递给适配器。 PIL.Image.Image 也可以作为图像接受。控制图像将自动调整大小以适合输出图像。
  • 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) — 降噪步骤的数量。更多的降噪步骤通常会导致更高质量的图像,但会降低推理速度。
  • timesteps (List[int], 可选) — 用于降噪过程的自定义时间步长,适用于在他们的 set_timesteps 方法中支持 timesteps 参数的调度程序。如果未定义,将使用传递 num_inference_steps 时的默认行为。必须按降序排列。
  • sigmas (List[float], 可选) — 用于降噪过程的自定义西格玛,适用于在他们的 set_timesteps 方法中支持 sigmas 参数的调度程序。如果未定义,将使用传递 num_inference_steps 时的默认行为。
  • guidance_scale (float, 可选, 默认值为 7.5) — 指导尺度,如 Classifier-Free Diffusion Guidance 中所定义。guidance_scale 定义为 Imagen 论文 中公式 2 的 w。通过设置 guidance_scale > 1 来启用指导尺度。较高的指导尺度鼓励生成与文本 prompt 密切相关的图像,通常以降低图像质量为代价。
  • negative_prompt (strList[str], 可选) — 不引导图像生成的提示或提示。如果未定义,则必须传递 negative_prompt_embeds。 相反。如果未定义,则必须传递 negative_prompt_embeds。 相反。当不使用指导时会被忽略(即,如果 guidance_scale 小于 1,则会被忽略)。
  • num_images_per_prompt (int, 可选, 默认值为 1) — 每个提示要生成的图像数量。
  • eta (float, 可选, 默认值为 0.0) — 对应于 DDIM 论文中的参数 eta (η):https://arxiv.org/abs/2010.02502。仅适用于 schedulers.DDIMScheduler,其他情况将被忽略。
  • generator (torch.GeneratorList[torch.Generator], 可选) — 一个或多个 torch 生成器,用于使生成确定性。
  • latents (torch.Tensor, 可选) — 预生成的噪声潜码,从高斯分布采样,用作图像生成的输入。可用于使用不同的提示调整相同的生成。如果没有提供,则会通过使用提供的随机 generator 采样来生成潜码张量。
  • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,文本嵌入将从 prompt 输入参数生成。
  • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负文本嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,negative_prompt_embeds 将从 negative_prompt 输入参数生成。
  • output_type (str, 可选, 默认值为 "pil") — 生成的图像的输出格式。在 PIL 之间进行选择:PIL.Image.Imagenp.array
  • return_dict (bool, 可选, 默认值为 True) — 是否返回 ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput 而不是普通元组。
  • callback_steps (int, 可选, 默认值为 1) — callback 函数的调用频率。如果未指定,则回调函数将在每个步骤调用。
  • cross_attention_kwargs (dict, 可选) — 如果指定,则作为关键字参数传递给 diffusers.models.attention_processorself.processor 定义的 AttnProcessor
  • adapter_conditioning_scale (floatList[float], 可选, 默认值为 1.0) — 适配器的输出在添加到原始 unet 中的残差之前,会乘以 adapter_conditioning_scale。如果在初始化时指定了多个适配器,则可以将相应的比例设置为列表。
  • clip_skip (int, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。值为 1 表示将使用倒数第二层的输出计算提示嵌入。

返回值

~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutputtuple

如果 return_dict 为 True,则返回 ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput,否则返回 tuple。当返回元组时,第一个元素是包含生成的图像的列表,第二个元素是包含bool的列表,表示根据safety_checker`,相应的生成图像是否可能代表“不适合工作”(nsfw)内容。

调用管道进行生成时调用的函数。

示例

>>> from PIL import Image
>>> from diffusers.utils import load_image
>>> import torch
>>> from diffusers import StableDiffusionAdapterPipeline, T2IAdapter

>>> image = load_image(
...     "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/color_ref.png"
... )

>>> color_palette = image.resize((8, 8))
>>> color_palette = color_palette.resize((512, 512), resample=Image.Resampling.NEAREST)

>>> adapter = T2IAdapter.from_pretrained("TencentARC/t2iadapter_color_sd14v1", torch_dtype=torch.float16)
>>> pipe = StableDiffusionAdapterPipeline.from_pretrained(
...     "CompVis/stable-diffusion-v1-4",
...     adapter=adapter,
...     torch_dtype=torch.float16,
... )

>>> pipe.to("cuda")

>>> out_image = pipe(
...     "At night, glowing cubes in front of the beach",
...     image=color_palette,
... ).images[0]

enable_attention_slicing

< >

( slice_size: Union = 'auto' )

参数

  • slice_size (strint, 可选, 默认值为 "auto") — 当为 "auto" 时,将注意力头的输入减半,因此注意力将在两个步骤中计算。如果为 "max",则每次只运行一个切片,可以最大限度地节省内存。如果提供数字,则使用与 attention_head_dim // slice_size 一样多的切片。在这种情况下,attention_head_dim 必须是 slice_size 的倍数。

启用切片注意力计算。启用此选项后,注意力模块会将输入张量切分成多个切片,以便分多个步骤计算注意力。对于多个注意力头,计算将按顺序对每个头执行。这有助于在牺牲少量速度的情况下节省一些内存。

⚠️ 如果您已经使用来自 PyTorch 2.0 或 xFormers 的 scaled_dot_product_attention (SDPA),请勿启用注意力切片。这些注意力计算已经非常节省内存,因此您不需要启用此功能。如果您在 SDPA 或 xFormers 中启用注意力切片,可能会导致严重的减速!

示例

>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "runwayml/stable-diffusion-v1-5",
...     torch_dtype=torch.float16,
...     use_safetensors=True,
... )

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

disable_attention_slicing

< >

( )

禁用切片注意力计算。如果之前调用了 enable_attention_slicing,则注意力将在一步骤中计算。

enable_vae_slicing

< >

( )

启用切片 VAE 解码。启用此选项后,VAE 将将输入张量切分成多个切片,以便分多个步骤计算解码。这有助于节省一些内存并允许更大的批次大小。

disable_vae_slicing

< >

( )

禁用切片 VAE 解码。如果之前启用了 enable_vae_slicing,此方法将返回一步计算解码。

enable_xformers_memory_efficient_attention

< >

( attention_op: Optional = None )

参数

  • attention_op (Callable, 可选) — 覆盖默认的 None 运算符,用于作为 memory_efficient_attention() 函数的 op 参数。xFormers.

启用来自 xFormers 的内存高效注意力。当启用此选项时,您应该观察到推理过程中的 GPU 内存使用量降低以及潜在的加速。训练期间的加速无法保证。

⚠️ 当内存高效注意力和分片注意力都启用时,内存高效注意力优先。

示例

>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)

disable_xformers_memory_efficient_attention

< >

( )

禁用来自 xFormers 的内存高效注意力。

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输入参数生成negative_prompt_embeds
  • 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

StableDiffusionXLAdapterPipeline

diffusers.StableDiffusionXLAdapterPipeline

< >

( vae: AutoencoderKL text_encoder: CLIPTextModel text_encoder_2: CLIPTextModelWithProjection tokenizer: CLIPTokenizer tokenizer_2: CLIPTokenizer unet: UNet2DConditionModel adapter: Union scheduler: KarrasDiffusionSchedulers force_zeros_for_empty_prompt: bool = True feature_extractor: CLIPImageProcessor = None image_encoder: CLIPVisionModelWithProjection = None )

参数

  • adapter (T2IAdapterMultiAdapterList[T2IAdapter]) — 在降噪过程中为 unet 提供额外的条件。 如果您将多个 Adapter 设置为列表,则来自每个 Adapter 的输出将加在一起以创建一个组合的额外条件。
  • adapter_weights (List[float], 可选, 默认值 None) — 表示权重的浮点数列表,该权重将在将每个适配器输出加在一起之前乘以每个适配器的输出。
  • vae (AutoencoderKL) — 变分自动编码器 (VAE) 模型,用于将图像编码和解码为潜伏表示。
  • text_encoder (CLIPTextModel) — 冻结的文本编码器。 Stable Diffusion 使用 CLIP 的文本部分,特别是 clip-vit-large-patch14 变体。
  • tokenizer (CLIPTokenizer) — 类 CLIPTokenizer 的分词器。
  • unet (UNet2DConditionModel) — 条件 U-Net 架构,用于对编码的图像潜伏表示进行降噪。
  • scheduler (SchedulerMixin) — 与 unet 结合使用以对编码的图像潜伏表示进行降噪的调度器。 可以是 DDIMSchedulerLMSDiscreteSchedulerPNDMScheduler 之一。
  • safety_checker (StableDiffusionSafetyChecker) — 用于估计生成的图像是否可能被视为冒犯性或有害的分类模块。 请参阅 模型卡 获取详细信息。
  • feature_extractor (CLIPImageProcessor) — 从生成的图像中提取特征的模型,用作 safety_checker 的输入。

使用增强了 T2I-Adapter 的 Stable Diffusion 进行文本到图像生成的管道 https://arxiv.org/abs/2302.08453

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

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

  • load_textual_inversion() 用于加载文本反转嵌入
  • from_single_file() 用于加载 .ckpt 文件
  • load_lora_weights() 用于加载 LoRA 权重
  • save_lora_weights() 用于保存 LoRA 权重
  • __call__

    < >

    ( prompt: Union = None prompt_2: Union = None image: Union = None height: Optional = None width: Optional = None num_inference_steps: int = 50 timesteps: List = None sigmas: List = None denoising_end: Optional = None guidance_scale: float = 5.0 negative_prompt: Union = None negative_prompt_2: 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 pooled_prompt_embeds: Optional = None negative_pooled_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: int = 1 cross_attention_kwargs: Optional = None guidance_rescale: float = 0.0 original_size: Optional = None crops_coords_top_left: Tuple = (0, 0) target_size: Optional = None negative_original_size: Optional = None negative_crops_coords_top_left: Tuple = (0, 0) negative_target_size: Optional = None adapter_conditioning_scale: Union = 1.0 adapter_conditioning_factor: float = 1.0 clip_skip: Optional = None ) ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutputtuple

    参数

    • prompt (strList[str], 可选) — 指导图像生成的提示或提示。 如果未定义,则必须传递 prompt_embeds。 代替。
    • prompt_2 (strList[str], 可选) — 要发送到 tokenizer_2text_encoder_2 的提示或提示。 如果未定义,则 prompt 在两个文本编码器中使用
    • image (torch.Tensor, PIL.Image.Image, List[torch.Tensor]List[PIL.Image.Image]List[List[PIL.Image.Image]]) — 适配器输入条件。 适配器使用此输入条件来生成对 Unet 的指导。 如果类型指定为 torch.Tensor,则按原样传递给适配器。 也可以接受 PIL.Image.Image 作为图像。 控制图像会自动调整大小以适合输出图像。
    • height (int, 可选,默认值为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的高度(以像素为单位)。 低于 512 像素的任何内容都不适用于 stabilityai/stable-diffusion-xl-base-1.0 和未针对低分辨率专门微调的检查点。
    • width (int, 可选, 默认为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的像素宽度。对于 stabilityai/stable-diffusion-xl-base-1.0 和没有专门针对低分辨率微调的检查点,低于 512 像素的宽度效果不佳。
    • num_inference_steps (int, 可选, 默认为 50) — 降噪步骤的数量。更多的降噪步骤通常会以更慢的推理为代价,产生更高质量的图像。
    • timesteps (List[int], 可选) — 用于降噪过程的自定义时间步长,用于支持其 set_timesteps 方法中 timesteps 参数的调度器。如果未定义,则将使用传递 num_inference_steps 时的默认行为。必须按降序排列。
    • sigmas (List[float], 可选) — 用于降噪过程的自定义西格玛值,用于支持其 set_timesteps 方法中 sigmas 参数的调度器。如果未定义,则将使用传递 num_inference_steps 时的默认行为。
    • denoising_end (float, 可选) — 当指定时,确定在有意提前终止之前要完成的整个降噪过程的比例(介于 0.0 和 1.0 之间)。因此,返回的样本将仍然保留大量由调度器选择的分离时间步长决定的噪声。 denoising_end 参数最好在该管道构成“去噪器混合”多管道设置的一部分时使用,如 细化图像输出 中所述。
    • guidance_scale (float, 可选, 默认为 5.0) — 无分类器扩散引导 中定义的引导比例。 guidance_scale 定义为 Imagen 论文 中公式 2 的 w 。通过将 guidance_scale > 1 来启用引导比例。更高的引导比例鼓励生成与文本 prompt 密切相关的图像,通常以降低图像质量为代价。
    • negative_prompt (strList[str], 可选) — 不引导图像生成的提示或提示。如果未定义,则必须传递 negative_prompt_embeds 。在不使用引导时(即,如果 guidance_scale 小于 1 )将被忽略。
    • negative_prompt_2 (strList[str], 可选) — 要发送到 tokenizer_2text_encoder_2 的不引导图像生成的提示或提示。如果未定义,则 negative_prompt 在两个文本编码器中使用
    • num_images_per_prompt (int, 可选, 默认为 1) — 每个提示生成的图像数量。
    • eta (float, 可选, 默认值 0.0) — 对应于 DDIM 论文中的参数 eta (η):https://arxiv.org/abs/2010.02502。仅适用于 schedulers.DDIMScheduler,其他调度器将忽略此参数。
    • generator (torch.GeneratorList[torch.Generator], 可选) — 一个或多个 torch 生成器,用于使生成确定性。
    • latents (torch.Tensor, 可选) — 预生成的噪声潜变量,从高斯分布采样得到,用作图像生成的输入。可用于使用不同的提示调整相同的生成结果。如果没有提供,将使用提供的随机 generator 采样生成一个潜变量张量。
    • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从 prompt 输入参数生成文本嵌入。
    • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负面文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从 negative_prompt 输入参数生成 negative_prompt_embeds
    • pooled_prompt_embeds (torch.Tensor, 可选) — 预生成的池化文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从 prompt 输入参数生成池化文本嵌入。
    • negative_pooled_prompt_embeds (torch.Tensor, 可选) — 预生成的负面池化文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从 negative_prompt 输入参数生成池化 negative_prompt_embeds。ip_adapter_image — (PipelineImageInput, 可选): 可选的图像输入,用于与 IP 适配器配合使用。
    • ip_adapter_image_embeds (List[torch.Tensor], 可选) — 用于 IP 适配器的预生成的图像嵌入。它应该是一个与 IP 适配器数量相同的列表。每个元素应该是形状为 (batch_size, num_images, emb_dim) 的张量。如果 do_classifier_free_guidance 设置为 True,它应该包含负面图像嵌入。如果没有提供,将从 ip_adapter_image 输入参数计算嵌入。
    • output_type (str, 可选, 默认值 "pil") — 生成图像的输出格式。在 PIL 之间选择:PIL.Image.Imagenp.array
    • return_dict (bool, 可选, 默认值 True) — 是否返回一个 ~pipelines.stable_diffusion_xl.StableDiffusionAdapterPipelineOutput 而不是一个简单的元组。
    • callback_steps (int, 可选, 默认值为 1) — callback 函数的调用频率。如果没有指定,则在每一步都会调用回调。
    • cross_attention_kwargs (dict, 可选) — 如果指定,则传递给 diffusers.models.attention_processorself.processor 下定义的 AttentionProcessor 的 kwargs 字典。
    • guidance_rescale (float, 可选, 默认值为 0.0) — Common Diffusion Noise Schedules and Sample Steps are Flawed 提出的引导重缩放因子,guidance_scale 定义为 Common Diffusion Noise Schedules and Sample Steps are Flawed 中方程 16 的 φ。引导重缩放因子应该在使用零终端 SNR 时修复过度曝光。
    • original_size (Tuple[int], 可选, 默认值为 (1024, 1024)) — 如果 original_sizetarget_size 不相同,则图像将看起来向下或向上采样。如果没有指定,original_size 默认值为 (height, width)。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。
    • crops_coords_top_left (Tuple[int], 可选, 默认值为 (0, 0)) — crops_coords_top_left 可用于生成看起来从 crops_coords_top_left 位置向下“裁剪”的图像。通常通过将 crops_coords_top_left 设置为 (0, 0) 来获得有利的、居中的图像。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。
    • target_size (Tuple[int], 可选, 默认值为 (1024, 1024)) — 在大多数情况下,target_size 应设置为所需生成的图像高度和宽度。如果没有指定,它将默认值为 (height, width)。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。
    • negative_original_size (Tuple[int], 可选, 默认值为 (1024, 1024)) — 基于特定图像分辨率对生成过程进行负面条件化。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。有关更多信息,请参阅此问题线程:https://github.com/huggingface/diffusers/issues/4208
    • negative_crops_coords_top_left (Tuple[int], 可选, 默认值为 (0, 0)) — 基于特定裁剪坐标对生成过程进行负面条件化。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。有关更多信息,请参阅此问题线程:https://github.com/huggingface/diffusers/issues/4208
    • negative_target_size (Tuple[int], 可选, 默认值为 (1024, 1024)) — 基于目标图像分辨率对生成过程进行负面条件化。在大多数情况下,它应该与 target_size 相同。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。有关更多信息,请参阅此问题线程:https://github.com/huggingface/diffusers/issues/4208
    • adapter_conditioning_scale (floatList[float], 可选, 默认值 1.0) — 在将适配器输出添加到原始 U-Net 中的残差之前,它们将乘以 adapter_conditioning_scale。 如果在初始化中指定了多个适配器,则可以将相应的比例设置为列表。
    • adapter_conditioning_factor (float, 可选, 默认值 1.0) — 适配器应用的时间步长的分数。 如果 adapter_conditioning_factor0.0,则完全不应用适配器。 如果 adapter_conditioning_factor1.0,则适配器将应用于所有时间步长。 如果 adapter_conditioning_factor0.5,则适配器将应用于一半的时间步长。
    • clip_skip (int, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。 值为 1 表示将使用倒数第二层的输出计算提示嵌入。

    返回值

    ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutputtuple

    ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput 如果 return_dict 为 True,否则为 tuple。 返回元组时,第一个元素是包含生成图像的列表。

    调用管道进行生成时调用的函数。

    示例

    >>> import torch
    >>> from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, DDPMScheduler
    >>> from diffusers.utils import load_image
    
    >>> sketch_image = load_image("https://huggingface.co/Adapter/t2iadapter/resolve/main/sketch.png").convert("L")
    
    >>> model_id = "stabilityai/stable-diffusion-xl-base-1.0"
    
    >>> adapter = T2IAdapter.from_pretrained(
    ...     "Adapter/t2iadapter",
    ...     subfolder="sketch_sdxl_1.0",
    ...     torch_dtype=torch.float16,
    ...     adapter_type="full_adapter_xl",
    ... )
    >>> scheduler = DDPMScheduler.from_pretrained(model_id, subfolder="scheduler")
    
    >>> pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
    ...     model_id, adapter=adapter, torch_dtype=torch.float16, variant="fp16", scheduler=scheduler
    ... ).to("cuda")
    
    >>> generator = torch.manual_seed(42)
    >>> sketch_image_out = pipe(
    ...     prompt="a photo of a dog in real world, high quality",
    ...     negative_prompt="extra digit, fewer digits, cropped, worst quality, low quality",
    ...     image=sketch_image,
    ...     generator=generator,
    ...     guidance_scale=7.5,
    ... ).images[0]

enable_attention_slicing

< >

( slice_size: Union = 'auto' )

参数

  • slice_size (strint, 可选, 默认值 "auto") — 当为 "auto" 时,将输入到注意力头的数量减半,因此注意力将分两步计算。 如果为 "max",则通过一次只运行一个切片来节省最大内存。 如果提供数字,则使用 attention_head_dim // slice_size 个切片。 在这种情况下,attention_head_dim 必须是 slice_size 的倍数。

启用切片注意力计算。启用此选项后,注意力模块会将输入张量切分成多个切片,以便分多个步骤计算注意力。对于多个注意力头,计算将按顺序对每个头执行。这有助于在牺牲少量速度的情况下节省一些内存。

⚠️ 如果您已经使用来自 PyTorch 2.0 或 xFormers 的 scaled_dot_product_attention (SDPA),请勿启用注意力切片。这些注意力计算已经非常节省内存,因此您不需要启用此功能。如果您在 SDPA 或 xFormers 中启用注意力切片,可能会导致严重的减速!

示例

>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "runwayml/stable-diffusion-v1-5",
...     torch_dtype=torch.float16,
...     use_safetensors=True,
... )

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

disable_attention_slicing

< >

( )

禁用切片注意力计算。如果之前调用了 enable_attention_slicing,则注意力将在一步骤中计算。

enable_vae_slicing

< >

( )

启用切片 VAE 解码。启用此选项后,VAE 将将输入张量切分成多个切片,以便分多个步骤计算解码。这有助于节省一些内存并允许更大的批次大小。

disable_vae_slicing

< >

( )

禁用切片 VAE 解码。如果之前启用了 enable_vae_slicing,此方法将返回一步计算解码。

enable_xformers_memory_efficient_attention

< >

( attention_op: Optional = None )

参数

启用来自 xFormers 的内存高效注意力。当启用此选项时,您应该观察到推理过程中的 GPU 内存使用量降低以及潜在的加速。训练期间的加速无法保证。

⚠️ 当内存高效注意力和分片注意力都启用时,内存高效注意力优先。

示例

>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)

disable_xformers_memory_efficient_attention

< >

( )

禁用来自 xFormers 的内存高效注意力。

encode_prompt

< >

( prompt: str prompt_2: Optional = None device: Optional = None num_images_per_prompt: int = 1 do_classifier_free_guidance: bool = True negative_prompt: Optional = None negative_prompt_2: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None pooled_prompt_embeds: Optional = None negative_pooled_prompt_embeds: Optional = None lora_scale: Optional = None clip_skip: Optional = None )

参数

  • 提示 (strList[str], 可选) — 要编码的提示
  • prompt_2 (strList[str], 可选) — 要发送到 tokenizer_2text_encoder_2 的提示或提示。 如果未定义,则在两个文本编码器中都使用 prompt device — (torch.device): torch 设备
  • 每个提示的图像数量 (int) — 每个提示应生成的图像数量
  • 是否使用无分类器引导 (bool) — 是否使用无分类器引导
  • 负面提示 (strList[str], 可选) — 不引导图像生成的提示或提示。 如果未定义,则必须改为传递 negative_prompt_embeds。 当不使用引导时忽略(即,如果 guidance_scale 小于 1,则忽略)。
  • negative_prompt_2 (strList[str], 可选) — 要发送到 tokenizer_2text_encoder_2 的不引导图像生成的提示或提示。 如果未定义,则在两个文本编码器中都使用 negative_prompt
  • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。 可用于轻松调整文本输入,例如提示加权。 如果未提供,文本嵌入将从 prompt 输入参数生成。
  • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负文本嵌入。 可用于轻松调整文本输入,例如 提示权重。 如果未提供,则将从negative_prompt 输入参数生成 negative_prompt_embeds。
  • pooled_prompt_embeds (torch.Tensor, 可选) — 预生成的池化文本嵌入。 可用于轻松调整文本输入,例如 提示权重。 如果未提供,则将从prompt 输入参数生成池化文本嵌入。
  • negative_pooled_prompt_embeds (torch.Tensor, 可选) — 预生成的负池化文本嵌入。 可用于轻松调整文本输入,例如 提示权重。 如果未提供,则将从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

< > 在 GitHub 上更新