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 检查点。
BlipDiffusionPipeline
和 BlipDiffusionControlNetPipeline
由 ayushtues
贡献。
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.Generator
或List[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 而不是普通元组。
返回
ImagePipelineOutput 或 tuple
调用管道进行生成时调用的函数。
示例
>>> 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
基于 Canny 边缘的受控主题驱动生成 Blip Diffusion 的管道。
此模型继承自 DiffusionPipeline。查看超类文档以了解库为所有管道实现的通用方法(例如下载或保存、在特定设备上运行等)。
调用管道进行生成时调用的函数。
示例
>>> 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")