Uji sejati sistem deteksi adalah gambar yang tidak pernah tersentuh pelatihan maupun pemilihan model. Bagian penutup ini menjalankan alur kerja inferensi end-to-end: src/deteksi.py memuat checkpoint dari /tmp/dl_deteksi_demo/model.pt, membangkitkan enam gambar baru dengan benih terpisah 77, lalu mencetak kelas, skor, kotak prediksi, dan IoU terhadap ground truth untuk setiap gambar. Pola “muat model sekali, sajikan prediksi berulang” inilah inti serving yang dibahas pada chapter Model Serving .

Muat Sekali, Prediksi Banyak #

Fungsi muat_model di src/latih.py menjadi pintu masuk inferensi:

python src/latih.py — muat_model
def muat_model(jalur=JALUR_CHECKPOINT):
    """Muat checkpoint; bila belum ada, latih dulu (benih sama)."""
    model = DetektorMini()
    if jalur.exists():
        model.load_state_dict(torch.load(jalur, weights_only=True))
    else:
        model = latih_model(verbose=False)
        simpan_checkpoint(model, jalur)
    model.eval()
    return model

Tiga perilaku fungsi ini layak dicermati. Argumen weights_only=True membatasi berkas checkpoint hanya memuat tensor — pengaman saat memuat artefak dari sumber lain. Bila checkpoint belum ada (misalnya Anda baru menyalin bundle ke komputer lain), fungsi melatih ulang dengan benih yang sama sehingga prediksi tetap identik. Terakhir, model.eval() dipanggil sebelum model dikembalikan agar mode inferensi aktif sejak awal.

Menjalankan Deteksi sebagai Satu Panggilan Batch #

Fungsi prediksi dari src/model.py memproses keenam gambar dalam satu panggilan — bukan per gambar — lewat model(X_uji_t): tensor berbentuk (6, 1, 32, 32) mengalir sekali melalui tubuh konvolusi, softmax dihitung sekali untuk seluruh batch, dan torch.no_grad() membungkus semuanya. Pola vektorisasi ini penting untuk inferensi produktif: memproses gambar satu per satu menukar waktu eksekusi dengan kesederhanaan kode, sedangkan batch memanfaatkan efisiensi yang dibahas pada chapter Batch Inference . Untuk layanan yang harus menjawab dalam batas waktu ketat, pola inilah yang menjadi dasar pembahasan chapter Real-Time Inference .

Enam Gambar Baru #

Skrip utama membangkitkan data uji lalu membaca hasilnya satu per satu:

bash
python3 src/deteksi.py

Output yang Dihasilkan:

text
== 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/6
catatan: prediksi (x, y, lebar, tinggi) boleh pecahan karena
keluaran sigmoid dikalikan 32; ground truth selalu bilangan bulat.

Pembacaan hasilnya menegaskan temuan Bagian 3 pada data yang benar-benar baru. Seluruh kelas dikenali benar (6/6) dengan skor 0.999-1.000, dan IoU rata-rata 0.789 — sedikit lebih baik daripada validasi (0.734) karena enam sampel ini kebetulan memuat tiga objek besar. Prediksi kotak tampil dengan koordinat pecahan seperti (22.6, 18.7, 3.7, 3.8): kepala regresi memang bekerja di ruang kontinu, sedangkan ground truth generator selalu bilangan bulat. Kotak prediksi yang sedikit lebih kecil dari aslinya (3.7 vs 4) menghasilkan IoU 0.574 — pengaruh proporsional kesalahan ukuran pada objek kecil, sama seperti temuan evaluasi.

Membaca Pola Secara Ringkas #

KelasJumlah gambarRentang IoUPengamatan
kecil20.574-0.768meleset 0.2-0.4 piksel pada posisi atau ukuran
sedang10.689geseran sub-piksel ke arah kiri atas
besar30.872-0.922hampir presisi penuh

Tabel ini adalah bentuk laporan yang baik untuk proyek deteksi: kelompokkan hasil per kelas, cantumkan rentang IoU, lalu tuliskan satu kalimat pengamatan konkret per baris. Kebiasaan ini melatih cara membaca kesalahan yang dibahas pada chapter Analisis Kesalahan .

Proyek deteksi tuntas: dari label bounding box hingga prediksi di gambar baru. Proyek terakhir section ini, Deployment Model Deep Learning , mengangkat model dari skrip pelatihan ke layanan nyata — REST API yang bisa dipanggil aplikasi lain, lengkap dengan uji klien dan optimasi ONNX.