Inpainting可以替换或编辑图像的特定区域。这使得它成为图像恢复的有用工具,比如去除缺陷和伪影,甚至用全新的东西替换图像区域。Inpainting依赖于掩模来确定要填充图像的哪些区域;要修复的区域由白色像素表示,而要保留的区域由黑色像素表示。白色像素由提示词生成内容填充。
# 以下代码为程序运行进行设置,并引入Inpainting自动管道
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
import torch
from diffusers import AutoPipelineForInpainting
from diffusers.utils import load_image, make_image_grid
# 以下代码加载模型
pipeline = AutoPipelineForInpainting.from_pretrained(
"kandinsky-community/kandinsky-2-2-decoder-inpaint", torch_dtype=torch.float16
)
# 这里使用了[~DiffusionPipeline.enable_model_cpu_offload]
# 和[~DiffersionPipelines.enable_xformers_memory_efficient_attention]
# 来节省内存并提高推理速度。
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
# 如果没有安装xFormers或使用的是PyTorch 2.0或更高版本,则无需使用代码
pipeline.enable_xformers_memory_efficient_attention()
# 以下代码加载原始图片
init_image = load_image(
"https://hf-mirror.com/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint.png")
# 以下代码加载蒙图
mask_image = load_image(
"https://hf-mirror.com/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint_mask.png")
# 以下代码提供了正面及负面提示词
prompt = "a black cat with glowing eyes, cute, adorable, disney, pixar, highly detailed, 8k"
negative_prompt = "bad anatomy, deformed, ugly, disfigured"
# 以下代码基于提示词,原始图片及蒙图生成Inpainting后的图片
image = pipeline(prompt=prompt, negative_prompt=negative_prompt, image=init_image, mask_image=mask_image).images[0]
# 使用make_image_grid方法将几张图片放在一期对比显示
make_image_grid([init_image, mask_image, image], rows=1, cols=3).show()