张春 发表于 5 天前

【Diffusion实战】基于 Stable Diffusion 实现 Img2Img、Inpainting 和 Depth2Image(Pytorch代码详解

  来试试 Stable Diffusion 在图像编辑中的应用吧~
Diffusion实战篇:
  【Diffusion实战】训练一个diffusion模型生成S曲线(Pytorch代码详解)
  【Diffusion实战】训练一个diffusion模型生成蝴蝶图像(Pytorch代码详解)
  【Diffusion实战】引导一个diffusion模型根据文字生成图像(Pytorch代码详解)
  【Diffusion实战】训练一个类别引导diffusion模型(Pytorch代码详解)
  【Diffusion实战】基于Stable Diffusion实现文本到图像的生成(Pytorch代码详解)
Diffusion综述篇:
  【Diffusion综述】医学图像分析中的扩散模型(一)
  【Diffusion综述】医学图像分析中的扩散模型(二)
  【Diffusion综述】扩散模型在 MRI 影像中的应用
1、Img2Img

  Img2Img 可以使用文字提示实现图对图的转换;
  预训练pipeline下载:stabilityai/stable-diffusion-2-1-base
import torch
from PIL import Image
from matplotlib import pyplot as plt
from diffusers import StableDiffusionImg2ImgPipeline

init_image = Image.open('./dog.png').convert("RGB")
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model_id = "E:/Code/kuosan/stable-diffusion-2-1-base"
img2img_pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id).to(device)

result_image = img2img_pipe(
    prompt="An oil painting of a man on a bench", # 图像编辑文本提示
    image = init_image, # 输入待编辑的图片
    strength = 0.7, # 设为 0 时文本编辑不起作用,设为 1 时作用强度最大
).images

# View the result
fig, axs = plt.subplots(1, 2, figsize=(12, 5))
axs.imshow(init_image);axs.set_title('Input Image');axs.axis('off')
axs.imshow(result_image);axs.set_title('Result');axs.axis('off')
  输出图像为:
https://i-blog.csdnimg.cn/direct/fc60a9e54eb4436a823cb1e6d1e9ac61.png
  改变提示 prompt 和 strength 能获得各种各样的图像:
result_image = img2img_pipe(
    prompt="There was a withered tree on the moor", # 图像编辑文本提示
    image = init_image, # 输入待编辑的图片
    strength = 0.8, # 设为 0 时文本编辑不起作用,设为 1 时作用强度最大
).images
  输出图像为:
https://i-blog.csdnimg.cn/direct/aa0fe40d7b95447bb716da443846027a.png
  大家可以自己玩玩,虽然有时候生成的图像是有点子抽象…
2、Inpainting

  Inpainting 可以保留一张图像中一部分不变,在给定的其他部分生成新的内容;
  预训练 pipeline 下载:booksforcharlie/stable-diffusion-inpainting
import torch
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from diffusers import StableDiffusionInpaintPipeline

init_image = Image.open('./dog.png').convert("RGB")
mask_image = Image.open('./dog_mask.png').convert("L")

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_id = "E:/Code/kuosan/stable-diffusion-inpainting"
inpaint_pipe = StableDiffusionInpaintPipeline.from_pretrained(model_id).to(device)

prompt = "A small robot, high resolution, sitting on a park bench"

result_image = inpaint_pipe(prompt=prompt, image=init_image, mask_image=mask_image).images

fig, axs = plt.subplots(1, 3, figsize=(12, 5))
axs.imshow(init_image);axs.set_title('Input Image');axs.axis('off')
axs.imshow(mask_image);axs.set_title('Mask');axs.axis('off')
axs.imshow(result_image);axs.set_title('Result');axs.axis('off')
  输出图像为:
https://i-blog.csdnimg.cn/direct/9cddc31b5bc44cb189874e742a87d99d.png
  改变提示 prompt:
prompt = "A sunflower, high resolution, stands beside a park bench"
  输出图像为:
https://i-blog.csdnimg.cn/direct/c671d7094ef143e4accf3e0556c23d8a.png
  emmm…就是这向日葵上似乎带了点狗毛…
3、Depth2Image

  Depth2Image 可以或许使用差别的颜色或纹理生成新图片;
  预训练 pipeline 下载:stabilityai/stable-diffusion-2-depth
import torch
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from diffusers import StableDiffusionDepth2ImgPipeline

init_image = Image.open('./dog.png').convert("RGB")

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_id = "E:/Code/kuosan/stable-diffusion-2-depth"
Depth2Img_pipe = StableDiffusionDepth2ImgPipeline.from_pretrained(model_id).to(device)

prompt = "A man on a bench"

result_image = Depth2Img_pipe(prompt=prompt, image=init_image).images

fig, axs = plt.subplots(1, 2, figsize=(12, 5))
axs.imshow(init_image);axs.set_title('Input Image');axs.axis('off')
axs.imshow(result_image);axs.set_title('Result');axs.axis('off')
  输出图像为:
https://i-blog.csdnimg.cn/direct/463897f53bfa4bf89445e52b8e4a600e.png
  改变提示 prompt:
prompt = "Cartoon style, high resolution, featuring a little kitten happily playing"
  输出图像为:
https://i-blog.csdnimg.cn/direct/05e589e8f0fc49038b2fc049393910d5.png
  照旧比力忠于原图的,哈哈…
  pipeline 太强了,简直 0 帧起手~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Diffusion实战】基于 Stable Diffusion 实现 Img2Img、Inpainting 和 Depth2Image(Pytorch代码详解