Pendahuluan segmentasi citra

Deep Learning untuk Gambar dengan PyTorch

Michal Oleszak

Machine Learning Engineer

Segmentasi citra

  • Segmentasi citra membagi citra menjadi beberapa segmen pada level piksel
  • Setiap piksel diberi segmen tertentu
  • Tiga jenis segmentasi:
    • Segmentasi semantik
    • Segmentasi instance
    • Segmentasi panoptik
Deep Learning untuk Gambar dengan PyTorch

Segmentasi semantik

segmentasi semantik

  • Tiap piksel diklasifikasi ke suatu kelas
  • Semua piksel dalam kelas yang sama diperlakukan sama
Deep Learning untuk Gambar dengan PyTorch

Segmentasi instance

segmentasi instance

  • Membedakan instance berbeda dalam kelas yang sama
  • Latar belakang sering tidak disegmentasi
Deep Learning untuk Gambar dengan PyTorch

Segmentasi panoptik

segmentasi panoptik

  • Menggabungkan segmentasi semantik dan instance
  • Memberi label unik untuk tiap instance objek
  • Mengklasifikasi latar belakang pada level piksel
Deep Learning untuk Gambar dengan PyTorch

Anotasi data

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 kucing British shorthair

Deep Learning untuk Gambar dengan PyTorch

Memahami mask

  • Dokumentasi dataset:

    Anotasi piksel: 1: Foreground 2: Background 3: Tidak diklasifikasi

  • Nilai unik pada mask:

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Nilai piksel dibagi 255:

    • 1 / 255 = 0.0039 - objek
    • 2 / 255 = 0.0.0078 - latar belakang
    • 3 / 255 = 0.0118 - tidak diklasifikasi
Deep Learning untuk Gambar dengan PyTorch

Membuat mask biner

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)

mask segmentasi

  • torch.where():
    • Kondisi
    • Nilai jika terpenuhi
    • Nilai jika tidak
  • Ubah mask ke gambar PIL
  • Tampilkan gambar mask
Deep Learning untuk Gambar dengan PyTorch

Mensegmentasi objek

object_tensor = image_tensor * binary_mask


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

citra tersegmentasi

  • Kalikan citra dengan mask biner
  • Ubah objek ke gambar PIL
  • Tampilkan gambar objek
Deep Learning untuk Gambar dengan PyTorch

Ayo berlatih!

Deep Learning untuk Gambar dengan PyTorch

Preparing Video For Download...