Evaluation & Benchmarking
Mengukur akurasi dan performa runtime vision system secara konsisten
Evaluation & Benchmarking
Pipeline vision perlu dievaluasi dengan metrik yang jelas. Tanpa benchmark, perubahan parameter/model sulit dinilai apakah benar meningkatkan performa.
Detection Metrics
| Metric | Arti | Kapan Dipakai |
|---|---|---|
| Precision | Prediksi benar dari semua prediksi | Mengurangi false positive |
| Recall | Objek terdeteksi dari semua objek nyata | Mengurangi miss detection |
| F1-score | Harmonic mean precision-recall | Tradeoff seimbang |
| mAP | Rata-rata precision pada IoU tertentu | Perbandingan model deteksi |
Target baseline untuk deployment awal:
- Precision
>= 0.90 - Recall
>= 0.85 - F1
>= 0.87
Runtime Metrics
Selain akurasi, cek performa real-time:
| Metric | Target Awal | Notes |
|---|---|---|
| Latency p50 | <= 30 ms/frame | Median response |
| Latency p95 | <= 60 ms/frame | Tail latency penting saat pertandingan |
| Throughput | >= 25 FPS | Minimal nyaman untuk control loop |
| CPU usage | <= 80% | Sisakan headroom modul lain |
Model akurat tapi lambat bisa lebih berbahaya dari model sedikit kurang akurat tapi stabil real-time.
Offline Evaluation Loop (Pseudocode)
Purpose: Menghitung metrik deteksi secara offline untuk dataset tetap. Inputs: dataset berlabel dan model inference. Outputs: ringkasan precision, recall, f1, mAP. Steps:
- Loop semua sample dan jalankan inference.
- Update metrik dengan prediksi dan ground truth.
- Hitung summary di akhir. Pitfalls: label tidak konsisten membuat metrik bias. Validation: baseline metrik konsisten antar run yang sama.
metrics = init_metrics()
for sample in dataset:
image, gt_boxes = sample.image, sample.labels
pred_boxes = model.infer(image)
metrics.update_detection(pred_boxes, gt_boxes)
summary = metrics.compute()
print(summary) # precision, recall, f1, mapROS 2 Runtime Benchmark Pattern
Purpose: Mengecek performa runtime di ROS 2 tanpa tooling berat. Inputs: node vision aktif dan topic yang dipublish. Outputs: rate topic, timestamp check, dan indikasi latency. Steps:
- Cek
topic hzuntuk rate. topic echountuk validasi header.- Aktifkan log timing jika tersedia. Pitfalls: rate turun karena debug image terlalu berat. Validation: rate stabil sesuai target dan timestamp konsisten.
# Check effective publish rate
ros2 topic hz /vision/ball
# Spot-check timestamp and frame_id consistency
ros2 topic echo /vision/ball --once
# Profile latency indirectly via stamped debug logs
ros2 run soccer_vision vision_detector --ros-args -p enable_timing_logs:=trueLog fields yang perlu disimpan per frame:
frame_idstamp_inputstamp_outputlatency_msinference_mspostprocess_ms
Field Test Protocol
Protokol minimum:
- Static test: robot diam, bola bergerak.
- Walking test: robot jalan + head scan.
- Occlusion test: bola ditutup parsial.
- Lighting test: terang/redup/shadow.
Setiap skenario jalankan minimal 3 kali dan ambil rata-rata.
Regression Report Template
Gunakan tabel ini setiap perubahan model/parameter:
| Run ID | Model/Config | Precision | Recall | FPS | p95 Latency | Result |
|---|---|---|---|---|---|---|
| 2026-02-23-A | YOLOv8n + cfg_01 | 0.91 | 0.86 | 28 | 54 ms | PASS |
| 2026-02-23-B | YOLOv8n + cfg_02 | 0.93 | 0.84 | 25 | 62 ms | REVIEW |
Kriteria PASS default:
- Precision/Recall tidak turun >2% dari baseline.
- FPS tetap di atas target minimal.
- p95 latency tidak melewati batas.
Acceptance Checklist
- Ada baseline metrik tersimpan.
- Setiap eksperimen punya report tabel.
- Keputusan deploy berdasarkan data, bukan observasi visual saja.
Next Steps
- Perbaiki data jika metrik rendah: Dataset & Labeling.
- Jika runtime issue, ikuti Debugging Playbook.