Lensa ML

Image Segmentation

Langkah 1 dari 6: Segmentation vs Deteksi

Dari label per gambar ke mask per pixel

Granularity0.00
"Luar Ruangan"klasifikasi
Tingkat
Klasifikasi
Granularity
0%
Output
1 label

Klasifikasi memberi satu label untuk seluruh gambar. Caranya cepat, tetapi tanpa informasi spasial: ia memberi tahu apa yang ada di gambar, bukan di mana.

Geser Granularity dari 0 ke 1 untuk berpindah dari satu label, ke kotak, lalu ke label untuk setiap sel pada gambar 10×10. Model segmentation menghasilkan tensor H × W × C, yaitu satu skor per kelas di setiap pixel, yang diubah menjadi probabilitas dengan softmax. Training biasanya memakai cross-entropy per pixel, sering digabung dengan Dice loss ketika suatu kelas hanya mencakup sedikit pixel. Kualitasnya diukur dengan IoU untuk tiap kelas, lalu dirata-ratakan menjadi mean IoU (mIoU). Labelnya mahal: setiap gambar Cityscapes yang dianotasi secara halus memakan waktu lebih dari 1,5 jam.

Langkah 2 dari 6: Semantic Segmentation

Setiap pixel mendapat label kelas: langit, jalan, mobil, orang

Jumlah kelas3
LangitTanahObjek
Kelas
3
Total pixel
100
Kelas terbesar
52 px

Dengan 3 kelas, model harus mempelajari batas yang jelas antarwilayah. Jumlah per kelas: Langit=42, Tanah=52, Objek=6.

Geser Jumlah kelas dari 2 ke 5. Dengan kelas yang lebih sedikit, lima label pada gambar (langit, pohon, jalan, mobil, orang) dilipat menjadi kelompok yang lebih kasar, misalnya mobil dan orang menjadi satu kelas objek, sehingga beberapa area memakai warna yang sama. Semantic segmentation memberi kelas pada setiap pixel, tetapi tidak memisahkan objek: dua mobil yang bersebelahan menjadi satu area berwarna mobil. Benchmark standar antara lain PASCAL VOC dengan 20 kelas objek plus latar, Cityscapes dengan 19 kelas pemandangan jalan, dan ADE20K dengan 150 kelas. Pencitraan medis dan pemetaan tutupan lahan dari satelit adalah penerapan yang umum.

Langkah 3 dari 6: Arsitektur Encoder-Decoder

Kompres lalu perluas: kerangka berbentuk U untuk segmentation

Kedalaman layer2
Encoder3ch64chDecoder64ch3chResolusi: 60px → bottleneck → 60px
Kedalaman
2
Bottleneck
64ch
Downsample
1×

Kedalaman 2: satu langkah downsampling membagi dua resolusi spasial dan menaikkan jumlah channel. Decoder melakukan upsampling kembali ke ukuran semula.

Geser Kedalaman layer dari 1 ke 4. Setiap tingkat encoder di sini membagi dua resolusi, sementara jumlah channel naik dari 3 ke 64, 128, dan 256. Downsampling memperlebar receptive field, sehingga tiap feature melihat lebih banyak konteks. Konteks ini yang dibutuhkan untuk membedakan jalan dari tembok abu-abu. Decoder lalu melakukan upsampling kembali ke ukuran input agar ada satu prediksi per pixel. Fully Convolutional Network (Long et al., 2015) pertama kali melakukannya dengan mengganti dense layer pada classifier dengan konvolusi. DeepLab menjaga resolusi tetap lebih tinggi dengan dilated (atrous) convolution.

Langkah 4 dari 6: Skip Connection

Gagasan utama U-Net: menyalurkan detail encoder ke decoder

Skip connections1
EncoderDecoderskip connectionsGround truthDengan skip (16×16)IoU 0.97 | boundary 95% | merah muda = pixel salah
Skip connections
Aktif
Skor IoU
0.97
Akurasi boundary
95%

Skip connection (gaya U-Net) menggabungkan feature encoder dengan feature decoder pada resolusi yang sama. Detail spasial halus tetap ada, jadi lengan tipis dan batas objek tetap tajam, dan IoU naik dari 0,49 ke 0,97.

Geser slider Skip connections antara 0 dan 1. Angka IoU dan boundary diukur pada mask contoh berukuran 32×32: decoding hanya dari bottleneck 4×4 menghilangkan lengan tipis dan menghasilkan IoU 0,49, sedangkan menambahkan skip map 16×16 menaikkannya ke 0,97. Di U-Net, setiap tingkat decoder menggabungkan feature map encoder yang seukuran, jadi decoder mendapat semantik kasar dari bawah dan tepi yang tajam dari skip. U-Net (Ronneberger et al., 2015) dibuat untuk gambar biomedis dan bisa dilatih dengan baik dari sangat sedikit contoh berlabel, dibantu augmentation berat berupa elastic deformation. Desain berbentuk U yang sama menjadi denoising network di dalam banyak diffusion model, termasuk Stable Diffusion.

Langkah 5 dari 6: Instance Segmentation

Kelas sama, objek berbeda: masing-masing punya mask sendiri

Jumlah instance2
Semantic: semua warna sama#1#2Instance: mask per objek
Instance
2
Total pixel
18
Kelas
Sama
Mask unik
2

2 objek dari kelas yang sama. Semantic segmentation memberi keduanya warna yang sama. Instance segmentation memberi masing-masing ID dan mask sendiri, yang dibutuhkan untuk menghitung dan melacak objek.

Geser Jumlah instance dari 1 ke 4. Semantic segmentation menjawab "kelas apa pixel ini?" dan instance segmentation juga menjawab "objek yang mana?" Panoptic segmentation menggabungkan keduanya: benda yang bisa dihitung (things) seperti mobil dan orang mendapat ID instance, sedangkan yang tidak bisa dihitung (stuff) seperti langit dan jalan hanya mendapat label kelas. Mask R-CNN (He et al., 2017) menambahkan cabang mask kecil pada Faster R-CNN, yang memprediksi mask 28×28 di dalam setiap kotak hasil deteksi. Segment Anything (2023) mengembalikan mask untuk objek apa pun dari prompt berupa klik atau kotak.

Langkah 6 dari 6: Metode Upsampling

Nearest, bilinear, atau dipelajari: cara membesarkan kembali feature map

Metode upsampling0
Input 3×30.20.80.30.90.40.70.10.60.5Output 6×60.200.200.800.800.300.300.200.200.800.800.300.300.900.900.400.400.700.700.900.900.400.400.700.700.100.100.600.600.500.500.100.100.600.600.500.50Nearest Neighbor
Metode
Nearest
Nilai unik
9
Kehalusan
Rendah

Nearest neighbor: setiap pixel output menyalin pixel input terdekat. Cepat dan tanpa parameter, tetapi hasilnya berkotak-kotak, dengan blok 2×2 bernilai sama yang terlihat jelas.

Geser Metode upsampling dari 0 ke 2 untuk berganti antara nearest neighbor, bilinear, dan transposed convolution saat kisi 3×3 membesar menjadi 6×6. Transposed convolution di sini memakai stride 2 dan contoh kernel 3×3, sehingga setiap nilai input mencetak salinan kernel yang sudah diskalakan ke output. Ukuran kernel tidak habis dibagi stride, jadi salinannya tumpang tindih secara tidak merata: pada input konstan, sel output akan mendapat total weight 0,9, 0,8, atau 0,6 dalam pola papan catur. Odena et al. (2016) menelusuri checkerboard artifact sampai ke sini dan menyarankan resize lebih dulu, baru menerapkan konvolusi biasa.

Apa itu image segmentation?

Image segmentation adalah tugas computer vision yang memberi label pada setiap pixel dalam gambar. Semantic segmentation memberi tiap pixel sebuah kelas, misalnya jalan atau langit. Instance segmentation juga memisahkan tiap objek dari kelas yang sama, jadi dua mobil mendapat dua mask berbeda.

Segmentation dipakai saat bentuk yang tepat itu penting: menandai tumor dan organ pada hasil pindaian medis, menemukan jalan yang bisa dilalui dan marka lajur untuk mobil otonom, memetakan tutupan lahan dari citra satelit, serta memotong gambar orang untuk portrait mode dan latar video. Sebagian besar model mengikuti desain encoder-decoder seperti U-Net, dan model berbasis prompt seperti Segment Anything kini bisa menghasilkan mask untuk objek yang tidak pernah dipakai saat training.

Ide utama

  • Segmentation memprediksi kelas untuk setiap pixel, jadi tinggi dan lebar output sama dengan gambar.
  • Semantic segmentation memberi label kelas, dan instance segmentation juga memisahkan tiap objek.
  • Encoder melakukan downsampling untuk mengumpulkan konteks, dan decoder melakukan upsampling kembali ke resolusi penuh.
  • Skip connection meneruskan detail spasial halus dari encoder langsung ke decoder.
  • Mean IoU antarkelas adalah metrik evaluasi standar.
  • Upsampling bisa bersifat tetap, seperti nearest atau bilinear, atau dipelajari, seperti transposed convolution.

Pertanyaan umum

Apa bedanya Dice dan IoU?

Keduanya mengukur tumpang tindih antara mask prediksi A dan mask sebenarnya B. IoU adalah |A ∩ B| / |A ∪ B|, dan Dice adalah 2|A ∩ B| / (|A| + |B|), sehingga Dice = 2·IoU / (1 + IoU) dan nilainya selalu minimal sebesar IoU. Dice loss, yaitu 1 − Dice, populer di pencitraan medis karena struktur kecil tetap dihitung penuh walaupun latar mendominasi gambar.

Berapa banyak data berlabel yang dibutuhkan model segmentation?

Label per pixel lama dibuat, jadi sebagian besar proyek mulai dari encoder yang pretrained pada ImageNet atau COCO, lalu melakukan fine-tuning pada beberapa ratus sampai beberapa ribu mask. Augmentation berat membuat dataset kecil lebih bermanfaat, seperti pada U-Net versi asli. Model berbasis prompt seperti Segment Anything juga mempercepat pelabelan dengan membuat draf mask untuk dikoreksi manusia.

Bisakah transformer melakukan image segmentation?

Bisa. SegFormer memasangkan encoder transformer hierarkis dengan decoder ringan untuk semantic segmentation. Mask2Former memperlakukan semantic, instance, dan panoptic segmentation sebagai prediksi sekumpulan mask dengan decoder transformer, dan satu arsitektur menangani ketiganya.

Apa bedanya segmentation dan image matting?

Segmentation memberi tiap pixel label tegas: sebuah pixel termasuk bagian orang atau bukan. Matting memperkirakan nilai opasitas halus antara 0 dan 1 untuk setiap pixel, yang bisa menangkap rambut, bulu, dan motion blur di bagian tepi. Alat portrait mode dan penghapus latar sering menjalankan segmentation lebih dulu, lalu memperhalus batasnya dengan matting.

Penjelasan terkait

Referensi

  1. Ronneberger, Fischer & Brox (2015), "U-Net: Convolutional Networks for Biomedical Image Segmentation"
  2. Long, Shelhamer & Darrell (2015), "Fully Convolutional Networks for Semantic Segmentation", CVPR
  3. He, Gkioxari, Dollár & Girshick (2017), "Mask R-CNN", ICCV
  4. Kirillov et al. (2023), "Segment Anything"
  5. Odena, Dumoulin & Olah (2016), "Deconvolution and Checkerboard Artifacts", Distill

Terakhir diperbarui