Kandinsky 模型是一系列多语言文本到图像生成模型。Kandinsky 2.0 模型采用两个多语言文本编码器,并将这些结果拼接后输入 UNet。
Kandinsky 2.2 在先前模型的基础上进行了改进,将图像先验模型的图像编码器替换为更大的 CLIP-ViT-G 模型,以提升质量。图像先验模型还在不同分辨率和宽高比的图像上进行了重新训练,能够生成更高分辨率和不同尺寸的图像。
要使用 Kandinsky 模型执行任何任务,始终需要先设置先验流水线(prior pipeline)来对提示词进行编码并生成图像嵌入。先验流水线还会生成与负面提示词 "" 对应的 negative_image_embeds。为获得更好的结果,可以向先验流水线传递实际的 negative_prompt,但这会使先验流水线的有效批处理大小增加两倍。
Kandinsky 2.1 和 2.2 的使用方法非常相似!唯一的区别是 Kandinsky 2.2 在解码潜在变量时不接受 prompt 作为输入。相反,Kandinsky 2.2 在解码过程中仅接受 image_embeds。
在 mindone.diffusers 中使用 Kandinsky 2.2 进行图像修复,您需要原始图像、用于替换原始图像特定区域的掩码,以及描述修复内容的文本提示词。加载先验流水线,
from mindone.diffusers import KandinskyV22InpaintPipeline, KandinskyV22PriorPipeline
from mindone.diffusers.utils import load_image, make_image_grid
import mindspore as ms
import numpy as np
from PIL import Image
prior_pipeline = KandinskyV22PriorPipeline.from_pretrained("kandinsky-community/kandinsky-2-2-prior", mindspore_dtype=ms.float16, use_safetensors=True)
pipeline = KandinskyV22InpaintPipeline.from_pretrained("kandinsky-community/kandinsky-2-2-decoder-inpaint", mindspore_dtype=ms.float16, use_safetensors=True)加载初始图像并创建蒙版,
init_image = load_image("https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png")
mask = np.zeros((768, 768), dtype=np.float32)
# mask area above cat's head
mask[:250, 250:-250] = 1使用 prior 流水线生成嵌入:
prompt = "a hat"
image_emb, zero_image_emb = prior_pipeline(prompt)现在将初始图像、蒙版、提示词和嵌入向量传递给流水线以生成图像,
output_image = pipeline(
image=init_image,
mask_image=mask,
image_embeds=image_emb,
negative_image_embeds=zero_image_emb,
height=768,
width=768,
num_inference_steps=150
)[0][0]
mask = Image.fromarray((mask*255).astype('uint8'), 'L')
make_image_grid([init_image, mask, output_image], rows=1, cols=3)