基于Stable Diffusion的哪些图像操作们:

  • Text-To-Image generation:StableDiffusionPipeline
  • Image-to-Image text guided generation:StableDiffusionImg2ImgPipeline
  • In-painting: StableDiffusionInpaintPipeline
  • text-guided image super-resolution: StableDiffusionUpscalePipeline
  • generate variations from an input image:StableDiffusionImageVariationPipeline
  • image editing by following text instructions:StableDiffusionInstructPix2PixPipeline
  • ......

辅助函数

  1. import requests
  2. from PIL import Image
  3. from io import BytesIO
  4. def show_images(imgs, rows=1, cols=3):
  5. assert len(imgs) == rows*cols
  6. w_ori, h_ori = imgs[0].size
  7. for img in imgs:
  8. w_new, h_new = img.size
  9. if w_new != w_ori or h_new != h_ori:
  10. w_ori = max(w_ori, w_new)
  11. h_ori = max(h_ori, h_new)
  12. grid = Image.new('RGB', size=(cols*w_ori, rows*h_ori))
  13. grid_w, grid_h = grid.size
  14. for i, img in enumerate(imgs):
  15. grid.paste(img, box=(i%cols*w_ori, i//cols*h_ori))
  16. return grid
  17. def download_image(url):
  18. response = requests.get(url)
  19. return Image.open(BytesIO(response.content)).convert("RGB")

Text-To-Image

根据文本生成图像,在diffusers使用StableDiffusionPipeline实现,必要输入为prompt,示例代码:

  1. from diffusers import StableDiffusionPipeline
  2. image_pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
  3. device = "cuda"
  4. image_pipe.to(device)
  5. prompt = ["a photograph of an astronaut riding a horse"] * 3
  6. out_images = image_pipe(prompt).images
  7. for i, out_image in enumerate(out_images):
  8. out_image.save("astronaut_rides_horse" + str(i) + ".png")

示例输出:

Image-To-Image

根据文本prompt和原始图像,生成新的图像。在diffusers中使用StableDiffusionImg2ImgPipeline类实现,可以看到,pipeline的必要输入有两个:promptinit_image。示例代码:

  1. import torch
  2. from diffusers import StableDiffusionImg2ImgPipeline
  3. device = "cuda"
  4. model_id_or_path = "runwayml/stable-diffusion-v1-5"
  5. pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
  6. pipe = pipe.to(device)
  7. url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
  8. init_image = download_image(url)
  9. init_image = init_image.resize((768, 512))
  10. prompt = "A fantasy landscape, trending on artstation"
  11. images = pipe(prompt=prompt, image=init_image, strength=0.75, guidance_scale=7.5).images
  12. grid_img = show_images([init_image, images[0]], 1, 2)
  13. grid_img.save("fantasy_landscape.png")

示例输出:

In-painting

给定一个mask图像和一句提示,可编辑给定图像的特定部分。使用StableDiffusionInpaintPipeline来实现,输入包含三部分:原始图像,mask图像和一个prompt,

示例代码:

  1. from diffusers import StableDiffusionInpaintPipeline
  2. img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
  3. mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
  4. init_image = download_image(img_url).resize((512, 512))
  5. mask_image = download_image(mask_url).resize((512, 512))
  6. pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting", torch_dtype=torch.float16)
  7. pipe = pipe.to("cuda")
  8. prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
  9. images = pipe(prompt=prompt, image=init_image, mask_image=mask_image).images
  10. grid_img = show_images([init_image, mask_image, images[0]], 1, 3)
  11. grid_img.save("overture-creations.png")

示例输出:

Upscale

对低分辨率图像进行超分辨率,使用StableDiffusionUpscalePipeline来实现,必要输入为prompt和低分辨率图像(low-resolution image),示例代码:

  1. from diffusers import StableDiffusionUpscalePipeline
  2. # load model and scheduler
  3. model_id = "stabilityai/stable-diffusion-x4-upscaler"
  4. pipeline = StableDiffusionUpscalePipeline.from_pretrained(model_id, torch_dtype=torch.float16, cache_dir="./models/")
  5. pipeline = pipeline.to("cuda")
  6. # let's download an image
  7. url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale/low_res_cat.png"
  8. low_res_img = download_image(url)
  9. low_res_img = low_res_img.resize((128, 128))
  10. prompt = "a white cat"
  11. upscaled_image = pipeline(prompt=prompt, image=low_res_img).images[0]
  12. grid_img = show_images([low_res_img, upscaled_image], 1, 2)
  13. grid_img.save("a_white_cat.png")
  14. print("low_res_img size: ", low_res_img.size)
  15. print("upscaled_image size: ", upscaled_image.size)

示例输出,默认将一个128 x 128的小猫图像超分为一个512 x 512的:

默认是将原始尺寸的长和宽均放大四倍,即:

  1. input: 128 x 128 ==> output: 512 x 512
  2. input: 64 x 256 ==> output: 256 x 1024
  3. ...

个人感觉,prompt没有起什么作用,随便写吧。

关于此模型的详情,参考

Instruct-Pix2Pix

重要参考

根据输入的指令prompt对图像进行编辑,使用StableDiffusionInstructPix2PixPipeline来实现,必要输入包括promptimage,示例代码如下:

  1. import torch
  2. from diffusers import StableDiffusionInstructPix2PixPipeline
  3. model_id = "timbrooks/instruct-pix2pix"
  4. pipe = StableDiffusionInstructPix2PixPipeline.from_pretrained(model_id, torch_dtype=torch.float16, cache_dir="./models/")
  5. pipe = pipe.to("cuda")
  6. url = "https://huggingface.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png"
  7. image = download_image(url)
  8. prompt = "make the mountains snowy"
  9. images = pipe(prompt, image=image, num_inference_steps=20, image_guidance_scale=1.5, guidance_scale=7).images
  10. grid_img = show_images([image, images[0]], 1, 2)
  11. grid_img.save("snowy_mountains.png")

示例输出:

Diffusers中基于Stable Diffusion的哪些图像操作的更多相关文章

  1. 基于Docker安装的Stable Diffusion使用CPU进行AI绘画

    基于Docker安装的Stable Diffusion使用CPU进行AI绘画 由于博主的电脑是为了敲代码考虑买的,所以专门买的高U低显,i9配核显,用Stable Diffusion进行AI绘画的话倒 ...

  2. AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...

  3. 使用 LoRA 进行 Stable Diffusion 的高效参数微调

    LoRA: Low-Rank Adaptation of Large Language Models 是微软研究员引入的一项新技术,主要用于处理大模型微调的问题.目前超过数十亿以上参数的具有强能力的大 ...

  4. C# 中使用Word文档对图像进行操作

    C# 中使用Word文档对图像进行操作 Download Files: ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操 ...

  5. 基于Xilinx FPGA的视频图像采集系统

    本篇要分享的是基于Xilinx FPGA的视频图像采集系统,使用摄像头采集图像数据,并没有用到SDRAM/DDR.这个工程使用的是OV7670 30w像素摄像头,用双口RAM做存储,显示窗口为320x ...

  6. OpenCV_基于局部自适应阈值的图像二值化

    在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...

  7. 基于Jittor框架实现LSGAN图像生成对抗网络

    基于Jittor框架实现LSGAN图像生成对抗网络 生成对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的 ...

  8. 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

    摘要:本篇文章结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现. 本文分享自华为云社区<[Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽 ...

  9. [OpenCV实战]20 使用OpenCV实现基于增强相关系数最大化的图像对齐

    目录 1 背景 1.1 彩色摄影的一个简短而不完整的历史 1.2 OpenCV中的运动模型 2 使用增强相关系数最大化(ECC)的图像对齐 2.1 findTransformECC在OpenCV中的示 ...

  10. 从 GPT2 到 Stable Diffusion:Elixir 社区迎来了 Hugging Face

    上周,Elixir 社区向大家宣布,Elixir 语言社区新增从 GPT2 到 Stable Diffusion 的一系列神经网络模型.这些模型得以实现归功于刚刚发布的 Bumblebee 库.Bum ...

随机推荐

  1. python-简单模块的使用

    提示:简单模块了解掌握 @ 目录 uuid模块 calendar日历模块 time模块 datetime模块 os模块 sys模块 random模块 json和pickle模块 json pickle ...

  2. 【SQL】SQL常见窗口函数整理汇总大全(用到over的场景)

    〇.概述 1.常用网站 SQL窗口函数:https://blog.csdn.net/liangmengbk/article/details/124253806 2.介绍 像聚合函数一样对一组数据进行分 ...

  3. 【Shell案例】【for循环、seq生成】3、输出7的倍数

    描述写一个 bash脚本以输出数字 0 到 500 中 7 的倍数(0 7 14 21...)的命令 方法1:in方式循环 [if的括号是中括号,中间的条件要有空格] [循环体用do和done配对] ...

  4. 【每日一题】【map存值】2022年2月25日-NC112 进制转换

    描述给定一个十进制数 M ,以及需要转换的进制数 N .将十进制数 M 转化为 N 进制数. 当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , ...

  5. Linux开发板连接WPA加密的AP路由器

    Linux目前有两种方法配置网络: wireless-tools wpa_supplicant iw支持的驱动较多,但只支持WEP加密:wpa_supplicant有部分驱动支持不完善,但支持WEP. ...

  6. python操作MySQL数据库连接(pymysql)

    目录 一:python操作MySQL 1.python如何操作MySQL? 2.什么是 PyMySQL? 二:PyMySQL 安装 1.方法一: 2.方法二: 三:pyMySQL模块基本使用 1.py ...

  7. 图书管理系统、聚合函数、分组查询、F与Q查询

    目录 图书管理系统 1.表设计 2.首页搭建.展示 书籍的添加 书籍编辑 书籍删除 聚合函数 Max Min Sum Count Avg 分组查询 按照表分组 按照字段分组 F与Q查询 F查询 Q查询 ...

  8. 零基础入门 Java 后端开发,有哪些值得看的视频?

    目前网络上充满了大量的 Java 视频教程,然而内容却鱼龙混杂,为了防止小伙伴们踩坑,一枫结合自己的学习经验,向大家推荐一些不错的学习资源. 作为一名非科班转码选手,可以说,我是在哔哩哔哩上的研究生! ...

  9. C#开发的资源文件程序(可国际化) - 开源研究系列文章

    上次将小软件的线程池描述了,也将插件程序描述了,这次就将里面的资源文件相关的内容进行下记录,这里能够让程序做成国际化的形式(即多语言程序),主要就是通过这个资源文件的方式进行的处理.下面将对这个资源文 ...

  10. 问一个 Windows 窗口的 Capture 问题

    好久没写了,上来先问一个问题...羞射... 有 A.B 两个窗口,A 是 B 的 Owner,B 不激活不抢焦点.在 B 的 WM_LBUTTONDOWN 的时候,设置 A 窗口为 Capture: ...