iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
AI & Data

Diffusion 模型、物件偵測Yolo v7& Yolo v4 系列 第 19

DAY 19 ControlNet Segmentation 影像分割

  • 分享至 

  • xImage
  •  
tags: 第 16 屆 iThome 鐵人賽 (2023)

{%hackmd BJrTq20hE %}

Segmentation

Controlnet的Segmentation 色塊分割模型,建議使用具有穩定擴散 v1-5 的檢查點(checkpoint),因為檢查點已對其進行了訓練。 檢查點可以與其他擴散模型一起使用,例如 Dreamboothed 穩定擴散。

定義了調色板後,我們現在可以運行整個分段+控制網生成程式碼:

from transformers import AutoImageProcessor, UperNetForSemanticSegmentation
from PIL import Image
import numpy as np
import torch
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
from diffusers.utils import load_image

image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-small")
image_segmentor = UperNetForSemanticSegmentation.from_pretrained("openmmlab/upernet-convnext-small")

image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-seg/resolve/main/images/house.png").convert('RGB')

pixel_values = image_processor(image, return_tensors="pt").pixel_values

with torch.no_grad():
  outputs = image_segmentor(pixel_values)

seg = image_processor.post_process_semantic_segmentation(outputs, target_sizes=[image.size[::-1]])[0]

color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8) # height, width, 3

for label, color in enumerate(palette):
    color_seg[seg == label, :] = color

color_seg = color_seg.astype(np.uint8)

image = Image.fromarray(color_seg)

controlnet = ControlNetModel.from_pretrained(
    "lllyasviel/sd-controlnet-seg", torch_dtype=torch.float16
)

pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5", controlnet=controlnet, safety_checker=None, torch_dtype=torch.float16
)

pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)

# Remove if you do not have xformers installed
# see https://huggingface.co/docs/diffusers/v0.13.0/en/optimization/xformers#installing-xformers
# for installation instructions
pipe.enable_xformers_memory_efficient_attention()

pipe.enable_model_cpu_offload()

image = pipe("house", image, num_inference_steps=20).images[0]

image.save('./images/house_seg_out.png')

使用效果

參考文章

https://huggingface.co/lllyasviel/sd-controlnet-seg


上一篇
DAY 18 MLSD 模型
下一篇
DAY 20 YOLOv4 物件偵測
系列文
Diffusion 模型、物件偵測Yolo v7& Yolo v4 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言