Materi
Kotak pembatas (bounding box) adalah persegi panjang terkecil yang memuat sebuah objek. Handbook Pillow menulis persegi panjang sebagai 4-tupel (x1, y1, x2, y2) dengan sudut kiri atas lebih dulu, dalam koordinat sudut piksel sehingga x2 dan y2 tidak ikut. scikit-image menulis bbox sebagai (min_row, min_col, max_row, max_col) dengan interval setengah terbuka yang sama. Isinya sama, urutannya berbeda, jadi setiap kali kotak berpindah pustaka urutannya harus diperiksa. Luas kotak (x1, y1, x2, y2) = (x2 − x1) × (y2 − y1).
Deteksi objek menilai kotak tebakan dengan membandingkannya ke kotak benar. Ukurannya Intersection over Union (IoU): luas irisan dibagi luas gabungan. Ini sama dengan indeks Jaccard yang didefinisikan dokumentasi scikit-learn sebagai ukuran irisan dibagi ukuran gabungan dua himpunan — di sini himpunannya piksel di dalam kotak. Irisan dua kotak adalah kotak dari max(x1), max(y1) sampai min(x2), min(y2); lebar dan tingginya dipotong di 0 bila kotak tidak bersentuhan. Gabungan = luas A + luas B − irisan, karena irisan terhitung dua kali. IoU bernilai 0 untuk kotak yang tidak bersentuhan dan 1 untuk kotak yang sama persis.
a = (10, 10, 30, 30) # luas 400
b = (20, 10, 40, 30) # luas 400, bergeser 10 ke kanan
irisan = max(0, min(a[2], b[2]) - max(a[0], b[0])) * max(0, min(a[3], b[3]) - max(a[1], b[1]))
print(irisan, irisan / (400 + 400 - irisan)) # 200 0.333...