Как ответить
Основные метрики качества для детекции объектов делятся на три группы: метрики локализации (насколько точно предсказана рамка), метрики классификации/детекции (найдены ли объекты и правильно ли распознаны), и агрегированные метрики, которые их комбинируют. Стандартом де-факто в задачах детекции является mAP (mean Average Precision).
1. IoU (Intersection over Union)
Показывает перекрытие между предсказанной рамкой и ground truth. Значение от 0 до 1. Обычно считают детекцию корректной, если IoU >= 0.5 (Pascal VOC) или используют диапазон 0.5–0.95 с шагом 0.05 (COCO). Это базовая метрика локализации, именно она определяет, считать ли предсказание истинно-положительным (TP).
2. Precision и Recall
Считаются для каждого класса при фиксированном пороге уверенности модели (confidence threshold). Precision = TP / (TP + FP), Recall = TP / (TP + FN). TP — число верно найденных объектов (IoU >= порога), FP — ложные срабатывания (дублирующиеся рамки или неверные классы), FN — пропущенные объекты. Обычно строят PR-кривую, варьируя порог уверенности, и берут площадь под ней как Average Precision (AP).
3. mAP — mean Average Precision
Сначала вычисляется AP для каждого класса: это средняя точность на 11 или 101 точках равномерно расположенных на recall (Pascal VOC) или интерполяция по всей кривой (COCO). Затем AP усредняется по всем классам. В COCO стандарт — mAP@[0.5:0.95] (среднее по 10 порогам IoU от 0.5 до 0.95). Это даёт более строгую оценку — модель должна не только найти объект, но и точно его локализовать.
4. Дополнительные метрики
— F1-score — гармоническое среднее precision и recall при конкретном пороге. Полезен, когда важен баланс.
— Log-Average Miss Rate (для детекции пешеходов) — взвешенная метрика, чувствительная к пропускам.
— mAP для разных размеров объектов (small/medium/large) — помогает выявить слабые места модели.
Пример расчёта mAP в коде (Python + pycocotools):
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
coco_gt = COCO(annotations_file)
coco_dt = coco_gt.loadRes(predictions)
coco_eval = COCOeval(coco_gt, coco_dt, 'bbox')
coco_eval.params.iouThrs = np.linspace(0.5, 0.95, 10)
coco_eval.evaluate()
coco_eval.accumulate()
coco_eval.summarize()
print('mAP @[0.5:0.95]:', coco_eval.stats[0])Для реального продакшна помимо mAP смотрят на FPS и задержку (latency), а также на размер модели (параметры, FLOPs), потому что топовая mAP не означает, что модель можно поставить на мобильное устройство или edge-плату.