Вступ до сегментації зображень

Глибоке навчання для зображень із PyTorch

Michal Oleszak

Machine Learning Engineer

Сегментація зображень

  • Сегментація зображень ділить зображення на сегменти на рівні пікселів
  • Кожен піксель належить до певного сегмента
  • Три типи сегментації:
    • Семантична сегментація
    • Сегментація об'єктів (інстансів)
    • Паноптична сегментація
Глибоке навчання для зображень із PyTorch

Семантична сегментація

семантична сегментація

  • Кожен піксель віднесено до певного класу
  • Усі пікселі одного класу обробляються однаково
Глибоке навчання для зображень із PyTorch

Сегментація об'єктів

сегментація об'єктів

  • Розрізняє окремі екземпляри одного класу
  • Тло часто не сегментується
Глибоке навчання для зображень із PyTorch

Паноптична сегментація

паноптична сегментація

  • Поєднує семантичну та сегментацію об'єктів
  • Призначає унікальну мітку кожному екземпляру об'єкта
  • Класифікує тло на рівні пікселів
Глибоке навчання для зображень із PyTorch

Анотації даних

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

фотографія британського короткошерстого кота

Глибоке навчання для зображень із PyTorch

Як розуміти маску

  • Документація набору даних:

    Анотації пікселів: 1: передній план 2: тло 3: не класифіковано

  • Унікальні значення маски:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Значення пікселів поділено на 255:

    • 1 / 255 = 0.0039 — об'єкт
    • 2 / 255 = 0.0078 — тло
    • 3 / 255 = 0.0118 — не класифіковано
Глибоке навчання для зображень із PyTorch

Створення бінарної маски

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)

маска сегментації

  • torch.where():
    • Умова
    • Значення, якщо умову виконано
    • Значення, якщо ні
  • Перетворіть маску на зображення PIL
  • Відобразіть маску
Глибоке навчання для зображень із PyTorch

Сегментація об'єкта

object_tensor = image_tensor * binary_mask


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

сегментоване зображення

  • Помножте зображення на бінарну маску
  • Перетворіть об'єкт на зображення PIL
  • Відобразіть об'єкт
Глибоке навчання для зображень із PyTorch

Давайте потренуємось!

Глибоке навчання для зображень із PyTorch

Preparing Video For Download...