Belajar Segmentasi Citra dengan Deep Learning

Panduan belajar berdasarkan slide "Segmentasi Pendekatan Deep Learning" (Agus Harjoko). Setiap bagian berisi penjelasan sederhana, contoh hitungan, dan catatan kritis (hal yang perlu kamu waspadai, atau yang di slide dijelaskan terlalu singkat).

Legenda: kotak hijau = poin kunci; kotak kuning = catatan kritis.

1. Tiga jenis segmentasi

Segmentasi berarti memberi label pada setiap piksel. Bedanya ada pada dua pertanyaan: "apa kategorinya?" dan "individu yang mana?"

Dua istilah kunci: things = objek yang bisa dihitung dan punya bentuk jelas (orang, mobil, hewan); stuff = area luas tanpa bentuk tertentu yang tidak dihitung (langit, jalan, rumput, gedung).

FiturSemanticInstancePanoptic
Membedakan individu?TidakYaYa (untuk things)
Segmentasi latar (stuff)?YaTidakYa
Piksel tercakupSemuaHanya piksel thingsSemua
Contoh output"Piksel ini mobil""Piksel ini Mobil #2""Piksel ini Mobil #2 di atas Jalan"
Perbandingan tiga jenis segmentasi

Ilustrasi sintetis: 3 orang (merah) di atas trotoar (biru) dengan gedung (hijau). Semantic: 3 orang satu warna. Instance: 3 warna berbeda, latar hitam. Panoptic: semuanya terisi.

Ingat: Instance = deteksi objek + semantic. Panoptic = semantic + instance, tanpa piksel yang terlewat dan setiap piksel punya tepat satu label (tidak boleh tumpang tindih).
Kritis: (1) Pada panoptic, stuff tidak punya identitas individu; "dua area rumput" tetap satu segmen rumput. (2) Pembagian things/stuff tidak selalu tegas dan ditentukan oleh dataset: "kerumunan orang" bisa dianggap stuff. (3) Gambar CNN di slide 2 hanyalah ilustrasi klasifikasi angka (MNIST), bukan model segmentasi; jangan bingung dengannya.

2. Metrik evaluasi

Segmentasi dinilai dengan membandingkan prediksi dengan ground truth (label benar) per piksel:

IoU (Jaccard) dan mIoU

IoU = |A ∩ B| / |A ∪ B| = TP / (TP + FP + FN)

Nilai 0 (tidak beririsan) sampai 1 (sempurna). mIoU = rata-rata IoU semua kelas.

Dice (DSC)

Dice = 2TP / (2TP + FP + FN)  (= F1-score tingkat piksel)

Contoh hitungan

Ground truth = persegi 10×10 (100 piksel). Prediksi = persegi 10×10 yang bergeser 4 piksel. Irisan = 6×10 = 60.

Contoh IoU dan Dice

TP = 60, FN = 40, FP = 40

IoU = 60/(60+40+40) = 0,43. Dice = 120/(120+40+40) = 0,60. Hubungannya: Dice = 2·IoU/(1+IoU), sehingga Dice selalu ≥ IoU (sama hanya di 0 dan 1).

Pixel Accuracy (PA)

Persentase piksel yang benar dibanding total piksel. Contoh: objek hanya 5% gambar, model menebak semua latar. PA = 95% (tampak bagus), tetapi IoU objek = 0.

Kritis: PA menyesatkan saat latar mendominasi. Jangan pernah melaporkan PA saja. Slide menyebut Dice "sangat sensitif terhadap class imbalance"; maksudnya Dice peka pada objek kecil sehingga lebih jujur. Jangan salah baca sebagai kelemahan.

AP / mAP (instance)

Menilai deteksi dan mask tiap instance pada ambang IoU tertentu. mAP₅₀ memakai ambang IoU 0,5; mAP₅₀:₉₅ merata-rata ambang 0,50 sampai 0,95 (lebih ketat, menilai kerapian tepi mask).

Panoptic Quality (PQ)

PQ = [ Σ IoU(p,g) / |TP| ] × [ |TP| / (|TP| + ½|FP| + ½|FN|) ] = SQ × RQ
Kritis: PQ bisa dilaporkan terpisah untuk things (PQTh) dan stuff (PQSt) agar kelemahan model terlihat. Ambang 0,5 membuat segmen yang "lumayan meleset" tetap dihitung benar, dan segmen yang IoU-nya 0,49 dihitung salah total (FP + FN sekaligus).

3. Loss function

Loss mengukur selisih peta prediksi dengan mask ground truth. Masalah utamanya adalah class imbalance: objek kecil di latar luas.

A. Pixel-wise: BCE

L = −(1/N) Σ [ yᵢ log pᵢ + (1−yᵢ) log(1−pᵢ) ]

Menilai tiap piksel sendiri-sendiri. Stabil dan cepat pada data seimbang. Pada data timpang, model "curang": menebak semua latar saja sudah menghasilkan loss kecil, karena 95% piksel benar.

B. Focal Loss

L = −αₜ (1−pₜ)^γ log pₜ

Faktor (1−pₜ)^γ mengecilkan loss piksel yang sudah mudah (pₜ besar) sehingga model fokus pada piksel sulit (biasanya tepi objek).

Kurva focal loss

Semakin besar γ, semakin kecil kontribusi piksel mudah. γ = 0 sama dengan BCE.

Kritis: γ dan α adalah hyperparameter yang perlu dituning (umumnya γ = 2). Focal Loss menekan piksel mudah, tetapi juga bisa memperbesar pengaruh label yang salah/noisy karena label noisy tampak "sulit".

C. Overlap-based: Dice Loss dan IoU Loss

L_Dice = 1 − (2 Σ pᵢyᵢ + ε) / (Σ pᵢ + Σ yᵢ + ε)
L_IoU = 1 − (Σ pᵢyᵢ + ε) / (Σ pᵢ + Σ yᵢ − Σ pᵢyᵢ + ε)

Keduanya versi "lunak" (memakai probabilitas, bukan 0/1) dari metrik Dice dan IoU. ε mencegah pembagian nol. Latar yang luas tidak ikut menggelembungkan nilai, jadi lebih tahan imbalance.

Kritis: Slide menyebut Dice "kebal" imbalance; ini terlalu kuat. Dice tetap bermasalah bila mask kosong (tidak ada objek) dan gradiennya kasar pada objek sangat kecil, jadi pelatihan awal bisa tidak stabil.

D. Hybrid

SkenarioPilihan
SeimbangBCE / Cross-Entropy
Objek kecil / imbalanceFocal, Dice, atau Tversky
Medis (MRI, CT)BCE + Dice
MultikelasCategorical CE + Dice

Tversky Loss (disebut tanpa penjelasan di slide) adalah generalisasi Dice dengan bobot terpisah untuk FP dan FN: menaikkan bobot FN membuat model lebih "takut" melewatkan objek, penting pada deteksi lesi.

4. Arsitektur semantic segmentation

Belajar berurutan, karena tiap model memperbaiki kelemahan sebelumnya.

FCN (Fully Convolutional Network)

Ide: ganti fully connected layer pada model klasifikasi dengan layer konvolusi, lalu upsampling (deconvolution) agar output berukuran sama dengan citra asli. Karena tanpa FC layer, input boleh berukuran bebas.

Kritis: Pada FCN asli, hasil upsampling kasar (tepi kabur) karena detail hilang saat pooling. Masalah inilah yang dijawab U-Net.

U-Net

Cocok untuk citra medis dan satelit, juga dengan data terbatas (ditunjang augmentasi). Analogi: encoder adalah melihat peta dari jauh untuk paham wilayah; skip connection adalah membawa foto detail dari dekat.

SegNet

Mirip U-Net, tetapi decoder hanya memakai indeks max-pooling (posisi nilai maksimum) dari encoder, bukan menyalin seluruh fitur. Hasilnya lebih hemat memori. Dipakai untuk adegan jalan (mobil otonom) dan robot.

Kritis: Hemat memori biasanya dibayar dengan detail yang kurang kaya dibanding U-Net; di praktik modern U-Net dan DeepLab lebih sering dipakai.

DeepLab (v1, v2, v3, v3+)

5. Instance segmentation: Mask R-CNN

Pengembangan dari Faster R-CNN (deteksi objek). Alurnya: (1) backbone mengekstrak fitur; (2) RPN mengusulkan kotak kandidat; (3) RoIAlign memotong fitur tiap kotak; (4) cabang paralel memprediksi kelas, bounding box, dan binary mask per objek.

RoIAlign vs RoIPool: RoIPool membulatkan koordinat sehingga mask bergeser beberapa piksel; RoIAlign memakai interpolasi bilinear tanpa pembulatan, sehingga presisi piksel terjaga.

Kritis: Mask R-CNN dua tahap sehingga relatif lambat; mask dibatasi resolusi kecil (sekitar 28×28) lalu diperbesar, sehingga tepi objek bisa kurang tajam. Ia juga tidak menangani stuff.

6. Transformer dan model berbasis attention

Masalah konvolusi: kernel hanya melihat area lokal. Self-attention membuat setiap bagian citra bisa "melihat" semua bagian lain (global context).

Kritis: (1) Transformer murni butuh data besar; pada dataset kecil, U-Net sering lebih baik. (2) SAM menghasilkan mask, bukan nama kelas; ia bukan model semantic segmentation penuh. (3) Klaim "tanpa fine-tuning" pada slide 32 tidak berlaku merata: pada citra medis dan domain khusus, SAM zero-shot sering kurang akurat. (4) Slide menyebut input teks; pada SAM 1 prompt teks hanya eksperimental, jadi cek versi yang dipakai.

7. Panoptic segmentation

Model harus menangani stuff dan things sekaligus. Ada tiga pendekatan:

7.1 Top-down (Panoptic FPN)

Satu backbone (ResNet + FPN), dua cabang: instance (gaya Mask R-CNN) untuk things dan semantic (gaya FCN) untuk stuff. Lalu panoptic fusion menggabungkan; bila mask tumpang tindih, prediksi dengan skor kepercayaan tertinggi menang.

7.2 Bottom-up (Panoptic-DeepLab)

Tanpa kotak proposal. Cabang semantik (DeepLabv3+) memprediksi kelas piksel; cabang instance memprediksi pusat objek (heatmap) dan offset tiap piksel menuju pusatnya. Piksel dikelompokkan ke pusat terdekat. Cepat, cocok real-time.

7.3 Transformer end-to-end (Mask2Former, Panoptic SegFormer, MaX-DeepLab)

Pixel decoder membuat fitur beresolusi tinggi; transformer decoder memakai object queries yang masing-masing memprediksi satu binary mask dan satu kelas (instance mobil atau area rumput, diperlakukan sama). Tanpa fusion rumit.

ModelPendekatanKelebihanKelemahan
Panoptic FPNTop-downAkurat pada instance mask, arsitektur terujiLambat (fusion + proposal)
Panoptic-DeepLabBottom-upCepat, fleksibel real-timeKurang presisi pada objek kecil yang berhimpitan
Mask2FormerTransformerAkurasi state-of-the-art, satu arsitektur untuk semuaButuh komputasi/memori GPU besar
Kritis: Kata "state-of-the-art" selalu bergantung waktu dan dataset (mis. COCO, Cityscapes); cek leaderboard terbaru. Bottom-up kesulitan ketika dua objek sejenis berhimpitan karena pusatnya berdekatan. Slide 36 menulis "Panoptic Deeplite", kemungkinan salah ketik dari Panoptic-DeepLab. Slide 38 (SwinFPNMTL) menampilkan multi-task learning (segmentasi + depth) tanpa penjelasan; artinya satu backbone Swin + FPN dilatih untuk dua tugas sekaligus.

8. Ringkasan pemilihan dan kuis

KebutuhanPilihan awal
Citra medis/biomedis/geospasial, data sedikitU-Net + BCE/Dice
Pemandangan umum/perkotaan, objek beragam ukuranDeepLabv3+
Menghitung/melacak individuMask R-CNN
Segmentasi cepat tanpa melatih ulangSAM (cek akurasi di domainmu)
Panoptic, akurasi terbaik / real-timeMask2Former / Panoptic-DeepLab

Alur tes sederhana: perlu bedakan individu? Tidak → semantic (U-Net/DeepLab). Ya, hanya objek → instance (Mask R-CNN). Ya, dan seluruh scene → panoptic.

Kuis cepat (klik untuk jawaban)

1. Foto 3 mobil: semantic dan instance beda di mana?Semantic: 3 mobil satu label "mobil". Instance: mobil 1, 2, 3 punya label unik.
2. Mengapa PA 95% bisa tetap model yang buruk?Latar mendominasi; menebak semua latar sudah 95% benar sementara objek tidak terdeteksi (IoU objek 0).
3. Prediksi TP=30, FP=10, FN=20. Hitung IoU dan Dice.IoU = 30/60 = 0,5. Dice = 60/(60+10+20) = 0,67.
4. Apa gunanya skip connection pada U-Net?Membawa detail spasial/tepi dari encoder ke decoder yang hilang saat pooling.
5. Mengapa atrous convolution berguna?Memperluas field of view tanpa menambah parameter atau menurunkan resolusi.
6. Beda RoIAlign dan RoIPool?RoIAlign tidak membulatkan koordinat (interpolasi bilinear) sehingga mask lebih presisi.
7. Apa SQ dan RQ pada PQ?SQ: rata-rata IoU segmen cocok (kerapian bentuk). RQ: seperti F1 (ketepatan menemukan segmen). PQ = SQ × RQ.
8. Mengapa Swin memakai shifted window?Agar window yang terpisah saling bertukar informasi, dengan kompleksitas tetap linear.

Saran praktik

Latih U-Net kecil dengan BCE+Dice pada dataset Oxford-IIIT Pet, bandingkan dengan BCE saja (lihat mIoU dan Dice-nya), lalu coba Mask R-CNN dan SAM pre-trained (torchvision / segment-anything) pada fotomu sendiri.