Как рассчитать IOU для средней точности
Я делаю fast rcnn и оцениваю модель fast_Rcnn. Мне нужны mAP, A,P, но я был озадачен, как рассчитать IOU для одного изображения, которое имеет несколько pred bbox, несколько блоков goundtruth и несколько меток?
например
у нас есть только 3 этикетки, 0: фон, 1: автомобиль, 2: самолет
goundtruth bbox 1: автомобиль,
goundtruth bbox 2: самолет,
goundtruth bbox 3: автомобиль,
Пред. окно 1- Основное поле 1: Iou 75
Пред. окно 1 - Основание-истина. Окно 2: 30
Пред. окно 1 - Правдивое поле 3: 0
Пред. коробка 2 - Основа правды: 1: 50
Пред. коробка 2 - Основа правды: 2: 50
Пред. коробка 2 - правда, коробка 3: 0
pred box 3 - Groundtruth Box 1: я 0
pred box 3 - Groundtruth Box 2: я 0
Пред. коробка 3 - правда, коробка 3: 100
pred box 4 - Groundtruth Box 1: iou 0
pred box 4 - Groundtruth Box 2: я 0
pred box 4 - Groundtruth Box 3: 0
В этом примере, как рассчитать точность отзыва и среднюю точность?
def get_iou(self, pred_bbox , gt_bboxes):
ious=[]
for gt_bbox in gt_bboxes:
p_x1, p_y1, p_x2, p_y2 = pred_bbox
g_x1, g_y1, g_x2, g_y2 = gt_bbox
xx1 = np.maximum(p_x1, g_x1)
yy1 = np.maximum(p_y1, g_y1)
xx2 = np.minimum(p_x2, g_x2)
yy2 = np.minimum(p_y2, g_y2)
w = np.maximum(0, xx2 - xx1 + 1)
h = np.maximum(0, yy2 - yy1 + 1)
overlap_area = w*h
pred_area=(p_x2-p_x1+1)*(p_y2-p_y1+1)
gt_area=(g_x2-g_x1+1)*(g_y2-g_y1+1)
iou=overlap_area/float(pred_area + gt_area - overlap_area)
ious.append(iou)
return np.max(ious)