Diffusers 文档

修复

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

修复

稳定扩散模型也可以应用于修复,修复让你通过提供遮罩和文本提示,使用稳定扩散编辑图像的特定部分。

提示

建议使用专门针对修复微调过的检查点来使用此管道,例如 runwayml/stable-diffusion-inpainting。 默认的文本到图像稳定扩散检查点,例如 runwayml/stable-diffusion-v1-5 也可以兼容,但它们可能性能较差。

一定要查看稳定扩散的 提示 部分,了解如何探索调度器速度和质量之间的权衡,以及如何有效地重用管道组件!

如果你有兴趣使用官方检查点之一来完成任务,请探索 CompVisRunwayStability AI 中心组织!

StableDiffusionInpaintPipeline

class diffusers.StableDiffusionInpaintPipeline

< >

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

参数

  • vae ([AutoencoderKL, AsymmetricAutoencoderKL]) — 变分自动编码器 (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 image: Union = None mask_image: Union = None masked_image_latents: Tensor = None height: Optional = None width: Optional = None padding_mask_crop: Optional = None strength: float = 1.0 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 ip_adapter_image: Union = None ip_adapter_image_embeds: Optional = None output_type: Optional = 'pil' return_dict: bool = True cross_attention_kwargs: Optional = None clip_skip: int = None callback_on_step_end: Union = None callback_on_step_end_tensor_inputs: List = ['latents'] **kwargs ) StableDiffusionPipelineOutput or tuple

参数

  • prompt (strList[str], 可选) — 指导图像生成的提示或提示列表。 如果未定义,您需要传递 prompt_embeds
  • image (torch.Tensor, PIL.Image.Image, np.ndarray, List[torch.Tensor], List[PIL.Image.Image]List[np.ndarray]) — 表示要修复的图像批次的 Image、numpy 数组或张量(使用 mask_image 掩盖图像的哪些部分并根据 prompt 重绘)。 对于 numpy 数组和 pytorch 张量,预期值范围在 [0, 1] 之间。 如果它是张量或张量列表,则预期形状应为 (B, C, H, W)(C, H, W)。 如果它是 numpy 数组或数组列表,则预期形状应为 (B, H, W, C)(H, W, C)。 它还可以接受图像潜码作为 image,但如果直接传递潜码,则不会再次进行编码。
  • mask_image (torch.Tensor, PIL.Image.Image, np.ndarray, List[torch.Tensor], List[PIL.Image.Image]List[np.ndarray]) — 表示掩盖 image 的图像批次的 Image、numpy 数组或张量。 掩码中的白色像素将被重新绘制,而黑色像素将被保留。 如果 mask_image 是 PIL 图像,则在使用之前将其转换为单通道(亮度)。 如果它是 numpy 数组或 pytorch 张量,它应该包含一个颜色通道 (L) 而不是 3,因此 pytorch 张量的预期形状将是 (B, 1, H, W)(B, H, W)(1, H, W)(H, W)。 对于 numpy 数组,将是 (B, H, W, 1)(B, H, W)(H, W, 1)(H, W)
  • height (int, 可选,默认值为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的高度(以像素为单位)。
  • width (int, 可选,默认值为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的宽度(以像素为单位)。
  • padding_mask_crop (int, 可选,默认值为 None) — 应用于图像和掩码的裁剪边距的大小。 如果为 None,则不会对图像和 mask_image 应用裁剪。 如果 padding_mask_crop 不为 None,它将首先找到一个与图像具有相同纵横比并包含所有掩码区域的矩形区域,然后根据 padding_mask_crop 扩展该区域。 然后,图像和 mask_image 将根据扩展的区域进行裁剪,然后再调整大小以适应原始图像大小以进行修复。 当掩码区域很小而图像很大且包含与修复无关的信息(例如背景)时,这很有用。
  • 强度 (float, 可选, 默认值为 1.0) — 指示对参考 图像 进行变换的程度。必须介于 0 和 1 之间。图像 用作起点,强度 越高,添加的噪声越多。去噪步骤的数量取决于最初添加的噪声量。当 强度 为 1 时,添加的噪声最大,去噪过程将运行 num_inference_steps 中指定的完整迭代次数。值为 1 实际上会忽略 图像
  • 推理步骤数 (int, 可选, 默认值为 50) — 去噪步骤的数量。更多的去噪步骤通常会导致更高质量的图像,但会以推理速度变慢为代价。此参数由 强度 调制。
  • 时间步 (List[int], 可选) — 用于去噪过程的自定义时间步,用于支持其 set_timesteps 方法中 timesteps 参数的调度器。如果未定义,则使用传递 num_inference_steps 时的默认行为。必须按降序排列。
  • 西格玛 (List[float], 可选) — 用于去噪过程的自定义西格玛,用于支持其 set_timesteps 方法中 sigmas 参数的调度器。如果未定义,则使用传递 num_inference_steps 时的默认行为。
  • 引导比例 (float, 可选, 默认值为 7.5) — 较高的引导比例值鼓励模型生成与文本 提示 密切相关的图像,但会以降低图像质量为代价。当 引导比例 > 1 时,启用引导比例。
  • 负面提示 (strList[str], 可选) — 指导在图像生成中不包含什么的提示或提示。如果未定义,则需要传递 negative_prompt_embeds。在不使用引导(引导比例 < 1)时忽略。
  • 每个提示的图像数量 (int, 可选, 默认值为 1) — 每个提示要生成的图像数量。
  • 艾塔 (float, 可选, 默认值为 0.0) — 对应于 DDIM 论文中的参数艾塔 (η)。仅适用于 DDIMScheduler,在其他调度器中被忽略。
  • 生成器 (torch.GeneratorList[torch.Generator], 可选) — 一个 torch.Generator,用于使生成确定性。
  • 潜在变量 (torch.Tensor, 可选) — 从高斯分布采样的预生成噪声潜在变量,用作图像生成的输入。可用于使用不同的提示调整相同的生成。如果未提供,则通过使用提供的随机 生成器 采样来生成潜在变量张量。
  • 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 适配器数量相同的列表。 每个元素应该是一个形状为 (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 的 kwargs 字典,如 self.processor 中定义。
  • clip_skip (int, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。 值 1 意味着将使用倒数第二层的输出计算提示嵌入。
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, 可选) — 在推理过程中每个去噪步骤结束时调用的函数或 PipelineCallbackMultiPipelineCallbacks 的子类。 具有以下参数: 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, 可选) — callback_on_step_end 函数的张量输入列表。 列表中指定的张量将作为 callback_kwargs 参数传递。 您将只能包含在管道类 ._callback_tensor_inputs 属性中列出的变量。

返回值

StableDiffusionPipelineOutputtuple

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

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

示例

>>> import PIL
>>> import requests
>>> import torch
>>> from io import BytesIO

>>> from diffusers import StableDiffusionInpaintPipeline


>>> def download_image(url):
...     response = requests.get(url)
...     return PIL.Image.open(BytesIO(response.content)).convert("RGB")


>>> img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
>>> mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"

>>> init_image = download_image(img_url).resize((512, 512))
>>> mask_image = download_image(mask_url).resize((512, 512))

>>> pipe = StableDiffusionInpaintPipeline.from_pretrained(
...     "runwayml/stable-diffusion-inpainting", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")

>>> prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
>>> image = pipe(prompt=prompt, image=init_image, mask_image=mask_image).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_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 的内存高效注意力。

load_textual_inversion

< >

( pretrained_model_name_or_path: Union token: Union = None tokenizer: Optional = None text_encoder: Optional = None **kwargs )

参数

  • pretrained_model_name_or_path (stros.PathLikeList[str or os.PathLike]DictList[Dict]) — 可以是以下任一内容或它们的列表:

    • 一个字符串,预训练模型的模型 ID (例如 sd-concepts-library/low-poly-hd-logos-icons),托管在 Hub 上。
    • 包含文本反转权重的目录的路径 (例如 ./my_text_inversion_directory/)。
    • 包含文本反转权重文件的路径 (例如 ./my_text_inversions.pt)。
    • 一个 torch 状态字典.
  • token (strList[str], 可选) — 覆盖要用于文本反转权重的 token。如果 pretrained_model_name_or_path 是列表,则 token 也必须是长度相同的列表。
  • text_encoder (CLIPTextModel, 可选) — 冻结的文本编码器 (clip-vit-large-patch14)。如果未指定,则函数将使用 self.tokenizer。
  • tokenizer (CLIPTokenizer, 可选) — 用于对文本进行标记的 CLIPTokenizer。如果未指定,则函数将使用 self.tokenizer。
  • weight_name (str, 可选) — 自定义权重文件的名称。这应该在以下情况下使用:

    • 保存的文本反转文件是 🤗 Diffusers 格式,但已使用特定权重名称保存,例如 text_inv.bin
    • 保存的文本反转文件是 Automatic1111 格式。
  • cache_dir (Union[str, os.PathLike], 可选) — 如果未使用标准缓存,则保存下载的预训练模型配置的目录路径。
  • force_download (bool, 可选, 默认为 False) — 是否强制(重新)下载模型权重和配置文件,如果存在,则覆盖缓存版本。
  • proxies (Dict[str, str], 可选) — 按协议或端点使用的代理服务器字典,例如 {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}。代理在每个请求中使用。
  • local_files_only (bool, 可选, 默认为 False) — 是否只加载本地模型权重和配置文件。如果设置为 True,模型将不会从 Hub 下载。
  • token (strbool, 可选) — 要用作远程文件 HTTP 载体授权的 token。如果为 True,则使用从 diffusers-cli login 生成的 token(存储在 ~/.huggingface 中)。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。可以是分支名称、标签名称、提交 ID 或 Git 允许的任何标识符。
  • mirror (str, 可选) — 如果您在中国下载模型,请使用镜像源以解决可访问性问题。我们不保证源的及时性或安全性,您应参考镜像站点以获取更多信息。

将文本反转嵌入加载到 StableDiffusionPipeline 的文本编码器中(支持 🤗 Diffusers 和 Automatic1111 格式)。

示例

要加载 🤗 Diffusers 格式的文本反转嵌入向量

from diffusers import StableDiffusionPipeline
import torch

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

pipe.load_textual_inversion("sd-concepts-library/cat-toy")

prompt = "A <cat-toy> backpack"

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")

要加载 Automatic1111 格式的文本反转嵌入向量,请确保先下载向量(例如,从 civitAI)然后加载向量

本地

from diffusers import StableDiffusionPipeline
import torch

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

pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")

prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")

load_lora_weights

< >

( pretrained_model_name_or_path_or_dict: Union adapter_name = None **kwargs )

参数

  • pretrained_model_name_or_path_or_dict (stros.PathLikedict) — 请参见 lora_state_dict()
  • kwargs (dict, 可选) — 请参见 lora_state_dict()
  • adapter_name (str, 可选) — 用于引用加载的适配器模型的适配器名称。如果未指定,它将使用 default_{i},其中 i 是正在加载的适配器总数。

pretrained_model_name_or_path_or_dict 中指定的 LoRA 权重加载到 self.unetself.text_encoder 中。

所有 kwargs 都将转发到 self.lora_state_dict

有关如何加载状态字典的更多详细信息,请参见 lora_state_dict()

有关如何将状态字典加载到 self.unet 中的更多详细信息,请参见 load_lora_into_unet()

有关如何将状态字典加载到 self.text_encoder 中的更多详细信息,请参见 load_lora_into_text_encoder()

save_lora_weights

< >

( save_directory: Union unet_lora_layers: Dict = None text_encoder_lora_layers: Dict = None is_main_process: bool = True weight_name: str = None save_function: Callable = None safe_serialization: bool = True )

参数

  • save_directory (stros.PathLike) — 保存 LoRA 参数的目录。如果目录不存在,则会创建该目录。
  • unet_lora_layers (Dict[str, torch.nn.Module]Dict[str, torch.Tensor]) — 对应于 unet 的 LoRA 层的状态字典。
  • text_encoder_lora_layers (Dict[str, torch.nn.Module]Dict[str, torch.Tensor]) — 与 text_encoder 对应的 LoRA 层的状态字典。必须显式传递文本编码器 LoRA 状态字典,因为它来自 🤗 Transformers。
  • is_main_process (bool, 可选, 默认值为 True) — 调用此函数的进程是否是主进程。在分布式训练期间有用,您需要在所有进程上调用此函数。在这种情况下,仅在主进程上设置 is_main_process=True 以避免竞争条件。
  • save_function (Callable) — 用于保存状态字典的函数。在分布式训练期间有用,当您需要用其他方法替换 torch.save 时。可以使用环境变量 DIFFUSERS_SAVE_MODE 配置。
  • safe_serialization (bool, 可选, 默认值为 True) — 是否使用 safetensors 或传统的 PyTorch 方法(使用 pickle)来保存模型。

保存与 UNet 和文本编码器相对应的 LoRA 参数。

encode_prompt

< >

( 提示 设备 每个提示的图像数量 是否使用分类器免费引导 负向提示 = None 提示嵌入: Optional = None 负向提示嵌入: Optional = None LoRA 比例: Optional = None CLIP 跳过: Optional = None )

参数

  • 提示 (strList[str], 可选) — 要编码的提示 设备 — (torch.device): 火炬设备
  • 每个提示的图像数量 (int) — 每个提示应生成的图像数量
  • 是否使用分类器免费引导 (bool) — 是否使用分类器免费引导
  • 负向提示 (strList[str], 可选) — 不引导图像生成的提示或提示。如果未定义,则必须传递 negative_prompt_embeds。当不使用引导时被忽略(即,如果 guidance_scale 小于 1,则被忽略)。
  • 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

StableDiffusionPipelineOutput

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 管道的输出类。

FlaxStableDiffusionInpaintPipeline

class diffusers.FlaxStableDiffusionInpaintPipeline

< >

( vae: FlaxAutoencoderKL text_encoder: FlaxCLIPTextModel tokenizer: CLIPTokenizer unet: FlaxUNet2DConditionModel scheduler: Union safety_checker: FlaxStableDiffusionSafetyChecker feature_extractor: CLIPImageProcessor dtype: dtype = <class 'jax.numpy.float32'> )

参数

  • vae (FlaxAutoencoderKL) — 用于将图像编码和解码为潜在表示的变分自动编码器 (VAE) 模型。
  • text_encoder (FlaxCLIPTextModel) — 冻结的文本编码器 (clip-vit-large-patch14)。
  • tokenizer (CLIPTokenizer) — 用于对文本进行标记的 CLIPTokenizer
  • unet (FlaxUNet2DConditionModel) — 用于对编码的图像潜在表示进行去噪的 FlaxUNet2DConditionModel
  • scheduler (SchedulerMixin) — 用于与 unet 结合对编码的图像潜在表示进行去噪的调度器。可以是 FlaxDDIMSchedulerFlaxLMSDiscreteSchedulerFlaxPNDMSchedulerFlaxDPMSolverMultistepScheduler 之一。
  • feature_extractor (CLIPImageProcessor) — 用于从生成的图像中提取特征的 CLIPImageProcessor;用作 safety_checker 的输入。

基于 Flax 的管道,使用 Stable Diffusion 进行文本引导图像修复。

🧪 这是一个实验性功能!

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

__call__

< >

( prompt_ids: Array mask: Array masked_image: Array params: Union prng_seed: Array num_inference_steps: int = 50 height: Optional = None width: Optional = None guidance_scale: Union = 7.5 latents: Array = None neg_prompt_ids: Array = None return_dict: bool = True jit: bool = False ) FlaxStableDiffusionPipelineOutput or tuple

参数

  • prompt (strList[str]) — 指导图像生成的提示或提示。
  • 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) — 降噪步骤的数量。更多的降噪步骤通常会导致更高质量的图像,但推理速度会更慢。此参数受 strength 调节。
  • guidance_scale (float, 可选,默认为 7.5) — 更高的引导尺度值鼓励模型生成与文本 prompt 密切相关的图像,但图像质量会降低。当 guidance_scale > 1 时,启用引导尺度。
  • latents (jnp.ndarray, 可选) — 从高斯分布中采样的预先生成的噪声潜码,用作图像生成的输入。可用于使用不同的提示微调相同的生成。如果未提供,则会通过使用提供的随机 generator 采样来生成潜码数组。
  • jit (bool, 默认为 False) — 是否运行生成和安全评分函数的 pmap 版本。

    此参数存在是因为 __call__ 尚未实现端到端的 pmap。 它将在未来的版本中移除。

  • return_dict (bool, 可选, 默认为 True) — 是否返回一个 FlaxStableDiffusionPipelineOutput 而不是一个简单的元组。

返回值

FlaxStableDiffusionPipelineOutputtuple

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

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

示例

>>> import jax
>>> import numpy as np
>>> from flax.jax_utils import replicate
>>> from flax.training.common_utils import shard
>>> import PIL
>>> import requests
>>> from io import BytesIO
>>> from diffusers import FlaxStableDiffusionInpaintPipeline


>>> def download_image(url):
...     response = requests.get(url)
...     return PIL.Image.open(BytesIO(response.content)).convert("RGB")


>>> img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
>>> mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"

>>> init_image = download_image(img_url).resize((512, 512))
>>> mask_image = download_image(mask_url).resize((512, 512))

>>> pipeline, params = FlaxStableDiffusionInpaintPipeline.from_pretrained(
...     "xvjiarui/stable-diffusion-2-inpainting"
... )

>>> prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
>>> prng_seed = jax.random.PRNGKey(0)
>>> num_inference_steps = 50

>>> num_samples = jax.device_count()
>>> prompt = num_samples * [prompt]
>>> init_image = num_samples * [init_image]
>>> mask_image = num_samples * [mask_image]
>>> prompt_ids, processed_masked_images, processed_masks = pipeline.prepare_inputs(
...     prompt, init_image, mask_image
... )
# shard inputs and rng

>>> params = replicate(params)
>>> prng_seed = jax.random.split(prng_seed, jax.device_count())
>>> prompt_ids = shard(prompt_ids)
>>> processed_masked_images = shard(processed_masked_images)
>>> processed_masks = shard(processed_masks)

>>> images = pipeline(
...     prompt_ids, processed_masks, processed_masked_images, params, prng_seed, num_inference_steps, jit=True
... ).images
>>> images = pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:])))

FlaxStableDiffusionPipelineOutput

class diffusers.pipelines.stable_diffusion.FlaxStableDiffusionPipelineOutput

< >

( images: ndarray nsfw_content_detected: List )

参数

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

基于 Flax 的 Stable Diffusion 管道的输出类。

替换

< >

( **updates )

“返回一个新的对象,用新值替换指定的字段。

< > 在 GitHub 上更新