Úvod do segmentace obrazu

Deep Learning pro obrázky s PyTorchem

Michal Oleszak

Machine Learning Engineer

Segmentace obrazu

  • Segmentace obrazu rozděluje obraz do více segmentů na úrovni pixelů
  • Každý pixel je přiřazen do určitého segmentu
  • Tři typy segmentace:
    • Sémantická segmentace
    • Segmentace instancí
    • Panoptická segmentace
Deep Learning pro obrázky s PyTorchem

Sémantická segmentace

sémantická segmentace

  • Každý pixel je zařazen do třídy
  • Všechny pixely stejné třídy jsou zpracovány stejně
Deep Learning pro obrázky s PyTorchem

Segmentace instancí

segmentace instancí

  • Rozlišuje jednotlivé instance stejné třídy
  • Pozadí často není segmentováno
Deep Learning pro obrázky s PyTorchem

Panoptická segmentace

panoptická segmentace

  • Kombinuje sémantickou segmentaci a segmentaci instancí
  • Přiřazuje jedinečný štítek každé instanci objektu
  • Klasifikuje pozadí na úrovni pixelů
Deep Learning pro obrázky s PyTorchem

Datové anotace

image = Image.open("images/British_Shorthair_36.jpg")
mask = Image.open("annots/British_Shorthair_36.png")


transform = transforms.Compose([ transforms.ToTensor() ]) image_tensor = transform(image) mask_tensor = transform(mask)
print(f"""Image shape: {image_tensor.shape} Mask shape: {mask_tensor.shape}""")
    Image shape: torch.Size([3, 333, 500])
    Mask shape: torch.Size([1, 333, 500])

fotografie kočky britské krátkosrsté

Deep Learning pro obrázky s PyTorchem

Porozumění masce

  • Dokumentace datasetu:

    Anotace pixelů: 1: Popředí 2: Pozadí 3: Neklasifikováno

  • Unikátní hodnoty masky:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Hodnoty pixelů jsou vyděleny 255:

    • 1 / 255 = 0.0039 - objekt
    • 2 / 255 = 0.0.0078 - pozadí
    • 3 / 255 = 0.0118 - neklasifikováno
Deep Learning pro obrázky s PyTorchem

Vytvoření binární masky

binary_mask = torch.where(
    mask_tensor == 1/255, 
    torch.tensor(1.0),
    torch.tensor(0.0),
)


to_pil_image = transforms.ToPILImage() mask = to_pil_image(binary_mask)
plt.imshow(mask)

segmentační maska

  • torch.where():
    • Podmínka
    • Hodnota při splnění podmínky
    • Hodnota jinak
  • Převod masky na obrázek PIL
  • Zobrazení masky
Deep Learning pro obrázky s PyTorchem

Segmentace objektu

object_tensor = image_tensor * binary_mask


to_pil_image = transforms.ToPILImage() object_image = to_pil_image(object_tensor)
plt.imshow(object_image)

segmentovaný obrázek

  • Vynásobení obrázku binární maskou
  • Převod objektu na obrázek PIL
  • Zobrazení obrázku objektu
Deep Learning pro obrázky s PyTorchem

Pojďme si procvičit!

Deep Learning pro obrázky s PyTorchem

Preparing Video For Download...