当前位置:   article > 正文

Diffusers代码学习-链式Inpainting

Diffusers代码学习-链式Inpainting

链式Inpainting可以与其他Diffusers管道链接以编辑其输出。这通常有助于提高其他扩散管道的输出质量,如果您使用多个管道,将它们链接在一起以将输出保持在潜在空间中,并可以重复使用相同的管道组件,以便更加节省内存。

1. 文本到图像Inpainting

将文生图管道和Inpainting管道可以修复生成的图像,并且不必首先提供基本图像。这使您可以方便地将喜爱的文本直接形成图像输出,而无需生成全新的图像。

# 以下代码为程序运行进行设置,并引入文生图和Inpainting自动管道
import os

os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

import torch
from diffusers import AutoPipelineForText2Image, AutoPipelineForInpainting
from diffusers.utils import load_image, make_image_grid

# 以下代码加载文生图模型
pipeline = AutoPipelineForText2Image.from_pretrained(
    "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
)

# 这里使用了[~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()

# 以下代码通过提示词生成图片
text2image = pipeline("concept art digital painting of an elven castle, inspired by lord of the rings, highly detailed, 8k").images[0]

# 以下代码加载蒙图
mask_image = load_image("https://hf-mirror.com/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint_text-chain-mask.png")

# 以下代码加载Inpaiting模型
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()

# 以下代码基于提示词,及蒙图生成Inpainting后的图片。这里是想增加一个瀑布
prompt = "digital painting of a fantasy waterfall, cloudy"
image = pipeline(prompt=prompt, image=text2image, mask_image=mask_image).images[0]

# 使用make_image_grid方法将几张图片放在一期对比显示
make_image_grid([text2image, mask_image, image], rows=1, cols=3).show()

上面的代码都是基于原有的代码进行拼接形成的新代码,因此无需过多额外解释。输出结果如下(可以看出根据蒙图的形状直接生成了瀑布区域):

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/675549
推荐阅读
相关标签
  

闽ICP备14008679号