Wprowadzenie do segmentacji obrazów

Głębokie uczenie dla obrazów z PyTorch

Michal Oleszak

Machine Learning Engineer

Segmentacja obrazu

  • Segmentacja obrazu dzieli obraz na wiele segmentów na poziomie pikseli
  • Każdy piksel obrazu jest przypisany do określonego segmentu
  • Trzy rodzaje segmentacji:
    • Segmentacja semantyczna
    • Segmentacja instancji
    • Segmentacja panoramiczna
Głębokie uczenie dla obrazów z PyTorch

Segmentacja semantyczna

segmentacja semantyczna

  • Każdy piksel klasyfikowany do klasy
  • Wszystkie piksele tej samej klasy traktowane jednakowo
Głębokie uczenie dla obrazów z PyTorch

Segmentacja instancji

segmentacja instancji

  • Rozróżnia różne instancje tej samej klasy
  • Tło często nie jest segmentowane
Głębokie uczenie dla obrazów z PyTorch

Segmentacja panoramiczna

segmentacja panoramiczna

  • Łączy segmentację semantyczną i instancji
  • Przypisuje unikalną etykietę każdej instancji obiektu
  • Klasyfikuje tło na poziomie pikseli
Głębokie uczenie dla obrazów z PyTorch

Adnotacje danych

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

Zdjęcie kota rasy British Shorthair

Głębokie uczenie dla obrazów z PyTorch

Interpretacja maski

  • Dokumentacja zbioru danych:

    Adnotacje pikseli: 1: Pierwszy plan 2: Tło 3: Niesklasyfikowane

  • Unikalne wartości maski:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Wartości pikseli są podzielone przez 255:

    • 1 / 255 = 0.0039 - obiekt
    • 2 / 255 = 0.0.0078 - tło
    • 3 / 255 = 0.0118 - niesklasyfikowane
Głębokie uczenie dla obrazów z PyTorch

Tworzenie maski binarnej

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)

maska segmentacji

  • torch.where():
    • Warunek
    • Wartość, gdy warunek spełniony
    • Wartość w przeciwnym przypadku
  • Przekształcenie maski na obraz PIL
  • Wyświetlenie obrazu maski
Głębokie uczenie dla obrazów z PyTorch

Segmentacja obiektu

object_tensor = image_tensor * binary_mask


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

segmentowany obraz

  • Mnożenie obrazu przez maskę binarną
  • Przekształcenie obiektu na obraz PIL
  • Wyświetlenie obrazu obiektu
Głębokie uczenie dla obrazów z PyTorch

Czas na ćwiczenia!

Głębokie uczenie dla obrazów z PyTorch

Preparing Video For Download...