Diffusers 文档

BLIP-扩散

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

BLIP-Diffusion

BLIP-Diffusion 在 BLIP-Diffusion: Pre-trained Subject Representation for Controllable Text-to-Image Generation and Editing 中被提出。它支持零样本主体驱动生成和控制引导的零样本生成。

论文摘要如下:

基于主体的文本到图像生成模型根据文本提示创建输入主体的全新版本。现有模型存在微调时间长且难以保持主体保真度的缺点。为了克服这些限制,我们引入了 BLIP-Diffusion,这是一种新的基于主体的图像生成模型,支持多模态控制,可以接收主体图像和文本提示作为输入。与其他基于主体的生成模型不同,BLIP-Diffusion 引入了一种新的多模态编码器,该编码器经过预训练以提供主体表示。我们首先遵循 BLIP-2 预训练多模态编码器,以生成与文本对齐的视觉表示。然后,我们设计了一个主体表示学习任务,使扩散模型能够利用这种视觉表示并生成新的主体版本。与 DreamBooth 等先前方法相比,我们的模型支持零样本主体驱动生成,并且可以高效地对自定义主体进行微调,速度提高了 20 倍。我们还证明了 BLIP-Diffusion 可以灵活地与 ControlNet 和提示到提示等现有技术相结合,以实现新颖的主体驱动生成和编辑应用。项目页面位于 此处

原始代码库可在 salesforce/LAVIS 中找到。您可以在 hf.co/SalesForce 组织下找到官方的 BLIP-Diffusion 检查点。

BlipDiffusionPipelineBlipDiffusionControlNetPipelineayushtues 贡献。

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

BlipDiffusionPipeline

class diffusers.BlipDiffusionPipeline

< >

( tokenizer: CLIPTokenizer text_encoder: ContextCLIPTextModel vae: AutoencoderKL unet: UNet2DConditionModel scheduler: PNDMScheduler qformer: Blip2QFormerModel image_processor: BlipImageProcessor ctx_begin_pos: int = 2 mean: List = None std: List = None )

参数

  • tokenizer (CLIPTokenizer) — 文本编码器的分词器
  • text_encoder (ContextCLIPTextModel) — 用于编码文本提示的文本编码器
  • vae (AutoencoderKL) — 用于将潜在变量映射到图像的 VAE 模型
  • unet (UNet2DConditionModel) — 用于对图像嵌入进行去噪的条件 U-Net 架构。
  • scheduler (PNDMScheduler) — 用于结合 unet 生成图像潜在变量的调度器。
  • qformer (Blip2QFormerModel) — 用于从文本和图像获取多模态嵌入的 QFormer 模型。
  • image_processor (BlipImageProcessor) — 用于预处理和后处理图像的图像处理器。
  • ctx_begin_pos (int, 可选,默认为 2) — 文本编码器中上下文标记的位置。

使用 Blip Diffusion 进行零样本主题驱动生成的管道。

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

__call__

< >

( prompt: 列表 reference_image: 图像 source_subject_category: 列表 target_subject_category: 列表 latents: 可选 = None guidance_scale: 浮点数 = 7.5 height: 整数 = 512 width: 整数 = 512 num_inference_steps: 整数 = 50 generator: 联合 = None neg_prompt: 可选 = '' prompt_strength: 浮点数 = 1.0 prompt_reps: 整数 = 20 output_type: 可选 = 'pil' return_dict: 布尔值 = True ) ImagePipelineOutput元组

参数

  • prompt (字符串列表) — 指导图像生成的提示或提示。
  • reference_image (PIL.Image.Image) — 用于生成条件的参考图像。
  • source_subject_category (字符串列表) — 源主题类别。
  • target_subject_category (字符串列表) — 目标主题类别。
  • latents (torch.Tensor, 可选) — 预生成的噪声潜在变量,从高斯分布中采样,用作图像生成的输入。可用于使用不同的提示调整相同的生成。如果未提供,则将通过随机采样生成潜在变量张量。
  • guidance_scale (浮点数, 可选,默认为 7.5) — 如 分类器自由扩散引导 中所定义的引导尺度。guidance_scale 定义为 Imagen 论文 公式 2 中的 w。通过将 guidance_scale > 1 来启用引导尺度。较高的引导尺度鼓励生成与文本 prompt 密切相关的图像,通常以降低图像质量为代价。
  • height (int可选,默认为 512) — 生成的图像的高度。
  • width (int可选,默认为 512) — 生成的图像的宽度。
  • num_inference_steps (int可选,默认为 50) — 降噪步骤的数量。更多的降噪步骤通常会导致更高的图像质量,但会以更慢的推理为代价。
  • generator (torch.GeneratorList[torch.Generator]可选) — 一个或多个 torch 生成器,用于使生成确定性。
  • neg_prompt (str可选,默认为 "") — 不引导图像生成的提示或提示。在不使用引导时被忽略(即,如果 guidance_scale 小于 1,则被忽略)。
  • prompt_strength (float可选,默认为 1.0) — 提示的强度。指定提示重复的次数,以及与 prompt_reps 结合以放大提示。
  • prompt_reps (int可选,默认为 20) — 提示重复的次数,以及与 prompt_strength 结合以放大提示。
  • output_type (str可选,默认为 "pil") — 生成图像的输出格式。在以下选项中选择:"pil" (PIL.Image.Image)、"np" (np.array) 或 "pt" (torch.Tensor)。
  • return_dict (bool可选,默认为 True) — 是否返回 ImagePipelineOutput 而不是普通元组。

返回

ImagePipelineOutputtuple

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

示例

>>> from diffusers.pipelines import BlipDiffusionPipeline
>>> from diffusers.utils import load_image
>>> import torch

>>> blip_diffusion_pipe = BlipDiffusionPipeline.from_pretrained(
...     "Salesforce/blipdiffusion", torch_dtype=torch.float16
... ).to("cuda")


>>> cond_subject = "dog"
>>> tgt_subject = "dog"
>>> text_prompt_input = "swimming underwater"

>>> cond_image = load_image(
...     "https://huggingface.co/datasets/ayushtues/blipdiffusion_images/resolve/main/dog.jpg"
... )
>>> guidance_scale = 7.5
>>> num_inference_steps = 25
>>> negative_prompt = "over-exposure, under-exposure, saturated, duplicate, out of frame, lowres, cropped, worst quality, low quality, jpeg artifacts, morbid, mutilated, out of frame, ugly, bad anatomy, bad proportions, deformed, blurry, duplicate"


>>> output = blip_diffusion_pipe(
...     text_prompt_input,
...     cond_image,
...     cond_subject,
...     tgt_subject,
...     guidance_scale=guidance_scale,
...     num_inference_steps=num_inference_steps,
...     neg_prompt=negative_prompt,
...     height=512,
...     width=512,
... ).images
>>> output[0].save("image.png")

BlipDiffusionControlNetPipeline

diffusers.BlipDiffusionControlNetPipeline

  • tokenizer (CLIPTokenizer) — 文本编码器的分词器
  • text_encoder (ContextCLIPTextModel) — 用于编码文本提示的文本编码器
  • vae (AutoencoderKL) — 将潜在变量映射到图像的 VAE 模型
  • unet (UNet2DConditionModel) — 用于对图像嵌入进行去噪的条件 U-Net 架构。
  • scheduler (PNDMScheduler) — 用于结合 unet 生成图像潜在变量的调度器。
  • qformer (Blip2QFormerModel) — 用于从文本和图像获取多模态嵌入的 QFormer 模型。
  • controlnet (ControlNetModel) — 用于获取条件图像嵌入的 ControlNet 模型。
  • image_processor (BlipImageProcessor) — 用于预处理和后处理图像的图像处理器。
  • ctx_begin_pos (int, 可选, 默认为 2) — 文本编码器中上下文标记的位置。

基于 Canny 边缘的受控主题驱动生成 Blip Diffusion 的管道。

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

__call__

ImagePipelineOutput元组

参数

  • prompt (List[str]) — 用于引导图像生成的提示或提示列表。
  • reference_image (PIL.Image.Image) — 用于调节生成的参考图像。
  • condtioning_image (PIL.Image.Image) — 用于调节生成的Canny边缘图像。
  • source_subject_category (List[str]) — 源主题类别。
  • target_subject_category (List[str]) — 目标主题类别。
  • latents (torch.Tensor, 可选) — 预先生成的噪声潜变量,从高斯分布中采样,用作图像生成的输入。 可用于使用不同的提示调整相同的生成。 如果未提供,则潜变量张量将通过随机采样生成。
  • guidance_scale (float, 可选,默认为 7.5) — 如 Classifier-Free Diffusion Guidance 中所定义的引导尺度。 guidance_scale 定义为 Imagen 论文 公式 2 中的 w。 通过设置 guidance_scale > 1 来启用引导尺度。 更高的引导尺度鼓励生成与文本 prompt 密切相关的图像,通常以降低图像质量为代价。
  • height (int, 可选,默认为 512) — 生成的图像的高度。
  • width (int, 可选,默认为 512) — 生成的图像的宽度。
  • seed (int可选,默认为 42) — 用于随机生成的种子。
  • num_inference_steps (int可选,默认为 50) — 降噪步骤的数量。更多的降噪步骤通常会导致更高的图像质量,但推理速度会变慢。
  • generator (torch.GeneratorList[torch.Generator]可选) — 一个或多个 torch 生成器,用于使生成确定性。
  • neg_prompt (str可选,默认为 "") — 不引导图像生成的提示或提示。在不使用引导时会被忽略(即,如果 guidance_scale 小于 1,则会被忽略)。
  • prompt_strength (float可选,默认为 1.0) — 提示的强度。指定提示重复的次数,以及与 prompt_reps 结合以放大提示。
  • prompt_reps (int可选,默认为 20) — 提示重复的次数,以及与 prompt_strength 结合以放大提示。

返回

ImagePipelineOutputtuple

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

示例

>>> from diffusers.pipelines import BlipDiffusionControlNetPipeline
>>> from diffusers.utils import load_image
>>> from controlnet_aux import CannyDetector
>>> import torch

>>> blip_diffusion_pipe = BlipDiffusionControlNetPipeline.from_pretrained(
...     "Salesforce/blipdiffusion-controlnet", torch_dtype=torch.float16
... ).to("cuda")

>>> style_subject = "flower"
>>> tgt_subject = "teapot"
>>> text_prompt = "on a marble table"

>>> cldm_cond_image = load_image(
...     "https://huggingface.co/datasets/ayushtues/blipdiffusion_images/resolve/main/kettle.jpg"
... ).resize((512, 512))
>>> canny = CannyDetector()
>>> cldm_cond_image = canny(cldm_cond_image, 30, 70, output_type="pil")
>>> style_image = load_image(
...     "https://huggingface.co/datasets/ayushtues/blipdiffusion_images/resolve/main/flower.jpg"
... )
>>> guidance_scale = 7.5
>>> num_inference_steps = 50
>>> negative_prompt = "over-exposure, under-exposure, saturated, duplicate, out of frame, lowres, cropped, worst quality, low quality, jpeg artifacts, morbid, mutilated, out of frame, ugly, bad anatomy, bad proportions, deformed, blurry, duplicate"


>>> output = blip_diffusion_pipe(
...     text_prompt,
...     style_image,
...     cldm_cond_image,
...     style_subject,
...     tgt_subject,
...     guidance_scale=guidance_scale,
...     num_inference_steps=num_inference_steps,
...     neg_prompt=negative_prompt,
...     height=512,
...     width=512,
... ).images
>>> output[0].save("image.png")
< > 在 GitHub 上更新