Klasifikasi menjawab “apa yang ada di gambar”; deteksi objek menjawab satu pertanyaan lebih tajam: “di mana objek itu berada”. Proyek ini membangun sistem deteksi utuh — dataset berlabel bounding box, model CNN dua kepala yang memprediksi kelas sekaligus kotak, pelatihan dengan loss gabungan, evaluasi IoU dan Average Precision, sampai deteksi pada gambar yang belum pernah dilihat. Angka akhirnya konkret: akurasi kelas 1.000 dan IoU rata-rata 0.789 pada enam gambar uji baru.
Seluruh kode berjalan di CPU tanpa unduhan dataset: gambar 32x32 dibangkitkan sintetis dari benih tetap, sehingga 480 gambar latih, 120 gambar validasi, dan 60 gambar uji selalu identik antar eksekusi. Pelatihan 60 epoch selesai dalam hitungan detik.
Prasyarat #
Sebelum masuk ke pengerjaan, pastikan materi berikut sudah dikuasai:
- Object Detection — kerangka kerja deteksi satu tahap vs dua tahap.
- Bounding Box — format anotasi (x, y, lebar, tinggi) yang kita pakai.
- Metrik Object Detection — IoU, ambang TP, dan Average Precision.
- Arsitektur CNN — tubuh konvolusi yang mengekstrak fitur spasial.
- Training Loop — cetakan pelatihan mini-batch yang dipakai ulang di sini.
Perilaku Akhir yang Dituju #
Program terdiri atas lima skrip di src/: data_deteksi.py membangkitkan gambar dan label sekaligus utilitas IoU, model.py mendefinisikan DetektorMini, latih.py melatih lalu menyimpan checkpoint ke /tmp/dl_deteksi_demo/model.pt, sedangkan evaluasi.py dan deteksi.py memuat checkpoint untuk menghitung metrik dan mendeteksi gambar baru. Setelah pelatihan selesai, sesi deteksi berjalan sebagai berikut:
python3 src/latih.py
python3 src/deteksi.pyOutput yang Dihasilkan (keluaran deteksi.py; keluaran lengkap latih.py dibahas pada Bagian 3):
== deteksi pada 6 gambar baru (benih 77) ==
no kelas asli prediksi skor kotak prediksi kotak asli iou
0 kecil kecil 1.000 ( 22.6, 18.7, 3.7, 3.8) (23,18, 4, 4) 0.574
1 sedang sedang 0.999 ( 10.2, 23.6, 6.0, 6.1) (11,24, 6, 6) 0.689
2 kecil kecil 1.000 ( 17.4, 7.9, 4.2, 4.2) (17, 8, 4, 4) 0.768
3 besar besar 1.000 ( 20.7, 10.1, 8.3, 8.2) (21,10, 8, 8) 0.911
4 besar besar 1.000 ( 9.3, 11.1, 8.2, 8.1) ( 9,11, 8, 8) 0.872
5 besar besar 1.000 ( 5.1, 2.8, 8.2, 8.2) ( 5, 3, 8, 8) 0.922
iou rata-rata : 0.789
kelas benar : 6/6Model mengenali seluruh kelas dengan benar dan menempatkan kotak dengan IoU 0.574 sampai 0.922. Perhatikan pola pada kolom IoU: objek besar (8x8 piksel) mencapai 0.87-0.92, sedangkan objek kecil (4x4) berhenti di 0.574-0.768 — kesenjangan ini kita bedah penyebabnya pada Bagian 3 dan 4.
Struktur Berkas #
deteksi-objek-pada-gambar/
├── _index.md
├── bagian/ # empat tahap pengerjaan
│ ├── menyiapkan-dataset-dan-label/
│ ├── memilih-model-deteksi/
│ ├── melatih-dan-mengevaluasi/
│ └── menjalankan-deteksi/
├── data/
│ └── generate_data.py # bangkit ulang dataset dari benih
├── src/
│ ├── data_deteksi.py # pembangkit gambar + utilitas IoU
│ ├── model.py # class DetektorMini + loss gabungan
│ ├── latih.py # pelatihan + checkpoint
│ ├── evaluasi.py # IoU per kelas dan [email protected]
│ └── deteksi.py # deteksi 6 gambar baru
└── tests/
├── test_data.py # uji pembangkit dan label
└── test_iou.py # uji geometri IoUSeluruh berkas pada src/, tests/, dan data/ dapat diunduh dari bagian Berkas Sumber di bawah halaman ini dan setiap bagian pengerjaan.
Tahapan Pengerjaan #
Proyek dikerjakan dalam empat bagian berurutan, dan setiap bagian menghasilkan kode yang benar-benar dapat dijalankan:
- Bagian 1 — Menyiapkan Dataset dan Label: membangkitkan gambar sintetis berlabel kelas dan bounding box.
- Bagian 2 — Memilih Model Deteksi: merancang CNN dua kepala dengan loss gabungan.
- Bagian 3 — Melatih dan Mengevaluasi: menjalankan pelatihan lalu membaca IoU dan Average Precision.
- Bagian 4 — Menjalankan Deteksi: memuat checkpoint dan mendeteksi gambar baru.
Mulailah dari Bagian 1 karena format label yang ditetapkan di sana menjadi kontrak yang dipegang model, loss, dan evaluasi hingga akhir proyek.
Bangkitkan gambar sintetis 32x32 berlabel kelas dan bounding box, lalu pahami format anotasi serta geometri IoU.
Buka → # Bagian 2: Memilih Model DeteksiRancang CNN dua kepala yang memprediksi kelas objek dan bounding box sekaligus dengan loss gabungan CE plus MSE.
Buka → # Bagian 3: Melatih dan MengevaluasiJalankan pelatihan 60 epoch dengan loss gabungan lalu baca hasilnya lewat IoU validasi dan Average Precision per kelas.
Buka → # Bagian 4: Menjalankan DeteksiMuat checkpoint hasil pelatihan lalu deteksi enam gambar baru dan baca IoU tiap prediksinya.
Buka →