Inleiding tot beeldsegmentatie

Deep Learning voor afbeeldingen met PyTorch

Michal Oleszak

Machine Learning Engineer

Beeldsegmentatie

  • Beeldsegmentatie verdeelt een afbeelding op pixelniveau in meerdere segmenten
  • Elke pixel krijgt een segment toegewezen
  • Drie typen segmentatie:
    • Semantische segmentatie
    • Instance-segmentatie
    • Panoptische segmentatie
Deep Learning voor afbeeldingen met PyTorch

Semantische segmentatie

semantische segmentatie

  • Elke pixel geclassificeerd in een klasse
  • Alle pixels van dezelfde klasse worden gelijk behandeld
Deep Learning voor afbeeldingen met PyTorch

Instance-segmentatie

instance-segmentatie

  • Onderscheidt verschillende instanties van dezelfde klasse
  • Achtergrond vaak niet gesegmenteerd
Deep Learning voor afbeeldingen met PyTorch

Panoptische segmentatie

panoptische segmentatie

  • Combineert semantische en instance-segmentatie
  • Geeft elke objectinstantie een uniek label
  • Classificeert achtergrond op pixelniveau
Deep Learning voor afbeeldingen met PyTorch

Data-annotaties

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])

Foto van Britse korthaar kat

Deep Learning voor afbeeldingen met PyTorch

Het masker begrijpen

  • Datasetdocumentatie:

    Pixelannotaties: 1: Voorgrond 2: Achtergrond 3: Niet geclassificeerd

  • Unieke maskwaarden:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Pixelwaarden zijn gedeeld door 255:

    • 1 / 255 = 0.0039 - object
    • 2 / 255 = 0.0.0078 - achtergrond
    • 3 / 255 = 0.0118 - niet geclassificeerd
Deep Learning voor afbeeldingen met PyTorch

Een binair masker maken

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)

segmentatiemasker

  • torch.where():
    • Voorwaarde
    • Waarde als waar
    • Waarde anders
  • Zet masker om naar PIL-afbeelding
  • Toon maskerafbeelding
Deep Learning voor afbeeldingen met PyTorch

Het object segmenteren

object_tensor = image_tensor * binary_mask


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

gesegmenteerde afbeelding

  • Vermenigvuldig afbeelding met het binaire masker
  • Zet object om naar PIL-afbeelding
  • Toon objectafbeelding
Deep Learning voor afbeeldingen met PyTorch

Laten we oefenen!

Deep Learning voor afbeeldingen met PyTorch

Preparing Video For Download...