Home › Forums › Instance Segmentation and SAHI › Bagian 4: SAHI
- This topic is empty.
-
AuthorPosts
-
February 26, 2026 at 13:18 #12243
mulkan syarif
KeymasterSaya merujuk pengertian dari https://github.com/obss/sahi dan https://docs.ultralytics.com/guides/sahi-tiled-inference/
Kita bahas SAHI secara mudah
SAHI (Slicing Aided Hyper Inference)
Sliced Inference = inference dengan cara membagi gambar besar menjadi beberapa tile (crop), lalu hasilnya digabung kembali.
Setelah tiap tile diprediksi, hasilnya digabung.
Istilah yang dipakai:
-
Prediction Merging
-
Post-processing
-
NMS (Non-Maximum Suppression)
-
Weighted Box Fusion (WBF) (kalau pakai alternatif NMS)
Karena objek bisa muncul di 2 tile akibat overlap, merging ini krusial.
Ilustrasinya adalah ketika kita sudah melakukan training untuk object detection seperti YOLO, Fast RCNN, atau model object detection lainnya. Tentu dataset image nya biasanya akan seragam misalkan ukuran 600 x600.

nah ketika akan digunakan untuk inference menggunakan dimension yang sangat besar, misalkan ukuran lebar 1800 x 1200 seperti dibawah ini

maka ukuran diatas harus di resize dari ukuran semula 1.800 x 1.200 menjadi 600 x 600, akan kehilangan pixel!
Ada 3 solusi pendekatan
Pertama
Lakukan pelatihan kembali menggunakan dataset yang wide range
Kedua
Lakukan resize tapi akan menghilangkan detail objek sehingga hasilnya tidak akurat (objek kecil tidak akan ter capture)
Ketiga
Lakukan crop overlapping saja dengan ukuran window 600 x 600 sehingga tidak mengurangi ukuran objek kecil-kecil
cara kerja diatas digunakan untuk inference!
SAHI untuk tahap pelatihan
SAHI pada konsep diatas untuk tahap inference, bagaimana kalau diterapkan sejak awal! yaitu proses pelatihan. Misalkan kita terapkan gambar yang wide range atau gambar yang sangat besar tapi objek yang akan dikenali sangat kecil-kecil yaitu tidak sampai 1% dari ukuran canvas!
Bila diterapkan secara langsung tanpa ada croping, maka akan sangat sulit. Mari saya contohkan dengan real yang saya pernah alami. Gambar scan dibawah ini sangat besar yaitu 2.500 x 3.800

proporsi objek beras dibandingkan dengan ukuran gambar seluruhnya sangat kecil tidak lebih dari 1% sehingga detection menjadi sangat sulit. Untuk itu saya crop overlapping (200×200)

dengan cara tersebut akan menaikan proporsi objek menjadi diatas 10%.
Contoh lain gambar dibawah ini mempunyai ukuran
(3874, 2404, 3)
maka luasannya adalah 3.874 x 2.404 = 9.313.096 pixel
dengan bounding box

saya akan ambil satu bounding box, dengan informasi sebagai berikut
unicode U+306F x 1231 y 3465 w 133 h 53 image_id 100241706_00004_2 Name: 0, dtype: object
luas objek: W x H = 133 x 53 = 7.049 pixel
Bila kita bandingkan dengan ukuran gambar seluruhnya/canvas maka
\(\frac{7.049}{9.313.096} = 0,07568\%\)
tidak sampai 1%Itu artinya objek sangat sulit dideteksi karena terlalu kecil, jika kita ubah – ubah nilai parameter Conv2 maka terlalu beresiko pada model, maka solusinya yaitu bagaimana caranya agar objek menjadi relatif besar terhadap gambar seluruhnya tanpa me resize objek tersebut!
Solusinya yaitu di crop. Crop nya pun harus yang overlapping karena semua objek jangan sampai tidak tercover hanya gara-gara ter crop sebagian!
Misalkan saja ukuran crop –> disebut dengan window yaitu 200 x 200 = 40.000 pixel maka
$$ \frac{7.049}{40.000} = 17.6625 \% $$
Apa yang terjadi, akan ada kenaikan prosentase! menjadi 17 kali lipat! sehingga sangat proper untuk dijadikan object detection
Objek yang ter crop sebagian
Apa yang terjadi dengan objek yang ter crop sebagian???

Objek yang ter crop sebagian akan dibiarkan! tanpa bounding box sehingga dianggap bukan objek yang dideteksi!
Semua objek yang akan di deteksi akan dikasih kotak warna biru, ada sebagian karakter tidak di kotak warna biru karena dianggap bukan objek (ter crop sebagian) tapi tenang saja dibagian tile yang lain akan terlihat utuh!
kotak biru –> deteksi
kotak hitam –> tidak dianggap objek
kotak merah –> objek utuh perlu deteksi
maka itulah gunanya overlapping! SAHI itu mewajibkan Overlapping dengan pengaturan ratio overlapp!
Jawaban mengapa SAHI diperlukan ditahap awal
Mengapa SAHI digunakan sejak persiapan dataset / training? ya karena objek sangat kecil sekali bahkan nyaris tidak sampai 1% dari luas keseluruhan gambar! daripada melakukan otak-atik parameter
jika objek sangat kecil kurang dari 1% luas dimensi gambar, maka apa yang perlu diubah dari fasterrcnn_resnet50_fpn?
Kalau objek sangat kecil (< 1% luas gambar), maka pada model
Faster R-CNN dengan backbone ResNet-50 + Feature Pyramid Network
masalahnya hampir selalu ada di:🔴 Anchor scale & feature map resolution
🔴 RPN tidak menghasilkan proposal untuk objek kecil
🔴 Downsampling backbone terlalu agresif
🎯 Apa yang Perlu Diubah?
1️⃣ Ubah Anchor Size (INI PALING PENTING)
Default
fasterrcnn_resnet50_fpnbiasanya pakai anchor size relatif besar.Kalau objek <1% area, kemungkinan ukuran objek cuma 5–20 pixel.
🔥 Solusi:
Gunakan anchor lebih kecil:
from torchvision.models.detection.anchor_utils import AnchorGenerator anchor_generator = AnchorGenerator( sizes=((8,), (16,), (32,), (64,), (128,)), # tambahkan 8 & 16 aspect_ratios=((0.5, 1.0, 2.0),) * 5 )Default biasanya mulai dari 32.
Untuk small object → tambahkan 8 dan 16.
2️⃣ Tingkatkan Resolusi Input
Kalau input terlalu kecil, objek makin hilang.
Misalnya:
- Gambar 1024×1024
- Objek 10×10 pixel
Kalau kamu resize ke 640 → objek makin kecil.
🔥 Solusi:
- Jangan resize terlalu kecil
- Gunakan
min_size=1024saat training
model = fasterrcnn_resnet50_fpn(min_size=1024)
3️⃣ Gunakan FPN Level P2 Secara Optimal
FPN sudah membantu small object, tapi pastikan level P2 dipakai.
Kalau kamu custom backbone, jangan hilangkan layer awal.
4️⃣ Ubah RPN NMS Threshold
Kadang proposal kecil terbuang oleh NMS.
Coba longgarkan:
model.rpn.nms_thresh = 0.9
5️⃣ Perbanyak Proposal
model.rpn.pre_nms_top_n_train = 4000 model.rpn.post_nms_top_n_train = 2000Karena small object butuh banyak candidate.
6️⃣ Gunakan SAHI (Kalau Objek Sangat Kecil)
Karena kamu sebelumnya pakai slicing:
Kalau objek <1%, Sliced Inference jauh lebih efektif daripada hanya tuning anchor.
Dengan slicing:
- Objek jadi relatif lebih besar terhadap tile
- Recall naik drastis
📊 Ringkas Prioritas Perubahan
Urutan Perubahan Dampak 1 Anchor size kecil (8,16) 🔥🔥🔥🔥 2 Resolusi input besar 🔥🔥🔥 3 Tambah proposal RPN 🔥🔥 4 Ubah NMS threshold 🔥 5 Pakai slicing (SAHI) 🔥🔥🔥🔥🔥
⚠️ Catatan Penting
Kalau objek <1% dan jumlahnya banyak (seperti butir beras yang pernah kamu bahas sebelumnya), maka:
Faster R-CNN bukan pilihan paling optimal.
Biasanya lebih cocok:
- RetinaNet
- YOLO dengan small anchor
- atau DETR varian small object
Kalau kamu mau, kirim:
- Resolusi gambar
- Rata-rata ukuran bounding box (pixel)
- Berapa banyak objek per gambar
Aku bisa hitungkan anchor size yang optimal secara matematis, bukan trial-error.
terlalu ruwet dan belum terbukti berhasil karena harus uji coba berkali-kali , apalagi gambarnya sangat besar selain itu akan cocok untuk gambar yang kecil-kecil begitu ada objek yang ukuranya besar maka perlu diubah anchor nya
-
-
AuthorPosts
- You must be logged in to reply to this topic.