Mean Average Precision (mAP)
Средняя точность (mAP) оценивает детекторы, усредняя точность по полноте, классам и порогам IoU. Разбираем, как рассчитываются mAP50 и mAP50-95.
Средняя точность (mAP) — стандартная метрика оценки для обнаружения объектов; по той же схеме оценивают сегментацию экземпляров, оценку позы и обнаружение объектов с ориентированными рамками. Она учитывает, нашла ли модель все объекты, избежала ли ложных обнаружений и насколько точно разместила каждый ограничивающий прямоугольник, объединяя все три аспекта в одно число от 0 до 1, которое часто записывают в процентах. Средняя точность (AP) — это площадь под кривой точности и полноты для одного класса; mAP — среднее значение AP по классам, а наиболее часто приводимая метрика mAP50-95 также усредняется по десяти порогам пересечения над объединением (IoU).
Основные составляющие#
- IoU: степень перекрытия предсказанной рамки и размеченной рамки в диапазоне от 0 до 1. Предсказание считается истинно положительным, только если его IoU с ещё не сопоставленной разметкой того же класса достигает порога, например 0.5.
- Точность: доля правильных предсказаний среди всех предсказаний, TP / (TP + FP).
- Полнота: доля размеченных объектов, найденных моделью, TP / (TP + FN).
- Уверенность: оценка, по которой ранжируются обнаружения. Каждому порогу уверенности соответствует одна пара «точность — полнота», а все пороги вместе задают кривую точности и полноты.
Как рассчитывается mAP#
При оценке собираются все обнаружения одного класса во всём наборе данных и сортируются по уверенности. При проходе по этому списку каждое обнаружение либо сопоставляется с ещё не найденной разметкой своего класса, с которой оно перекрывается сильнее всего, и становится истинно положительным, либо становится ложно положительным. Каждую разметку можно сопоставить только один раз, поэтому вторая рамка вокруг уже найденного объекта снижает точность. После каждого шага точность и полнота пересчитываются, формируя кривую от самого уверенного обнаружения до наименее уверенного.
AP — это площадь под кривой. Перед вычислением площади кривую заменяют её огибающей: для каждого уровня полноты берут наибольшую точность на этом уровне или выше, чтобы небольшие колебания не влияли на оценку. При оценке COCO огибающую вычисляют по 101 точке полноты от 0 до 1, тогда как в исходном бенчмарке PASCAL VOC использовали 11 точек. Уровни полноты, которых модель не достигает, дают нулевую точность, поэтому каждый пропущенный объект снижает AP.
import numpy as np
# One class: 8 detections sorted by confidence (1 = matched a label, 0 = false positive)
tp = np.array([1, 1, 0, 1, 0, 1, 0, 0])
num_labels = 5 # ground-truth objects of this class in the dataset
# Precision and recall after each detection in the ranked list
tp_cum = np.cumsum(tp)
precision = tp_cum / np.arange(1, len(tp) + 1)
recall = tp_cum / num_labels
# Precision envelope: best precision at this recall or any higher recall
envelope = np.maximum.accumulate(precision[::-1])[::-1]
# COCO-style AP: average the envelope at 101 recall points (0 beyond the highest recall reached)
points = np.linspace(0, 1, 101)
idx = np.searchsorted(recall, points, side="left")
ap = np.mean([envelope[i] if i < len(envelope) else 0.0 for i in idx])
print(f"Max recall: {recall[-1]:.1f}, AP: {ap:.3f}")Скрипт выводит Max recall: 0.8, AP: 0.686. Один из пяти размеченных объектов так и не обнаружен, поэтому последняя пятая оси полноты не добавляет площади, и AP остаётся равной 0.686, хотя два обнаружения с наибольшей уверенностью верны.
mAP и связанные метрики#
- Доля правильных ответов — это число верных предсказаний, делённое на число всех предсказаний; для её расчёта нужно учитывать истинно отрицательные случаи. Для детектора истинно отрицательными считались бы все пустые фрагменты фона, поэтому доля правильных ответов не имеет содержательного значения при обнаружении объектов.
- F1-мера объединяет точность и полноту при одном пороге уверенности и описывает одну рабочую точку, например порог, используемый развёрнутой моделью.
- Матрица ошибок показывает, какие классы детектор путает при одном пороге; эта подробность теряется при сведении оценки к одному числу mAP.
mAP50, mAP75 и mAP50-95#
Поскольку mAP — это обычное среднее по классам, редкий класс учитывается так же, как и распространённый. Порог IoU определяет, насколько точно должна совпадать рамка, чтобы обнаружение засчитали:
- mAP50: обнаружение считается правильным при IoU 0,5 — это правило PASCAL VOC.
- mAP75: порог повышается до 0,75 — это строгая проверка точности локализации.
- mAP50-95: mAP, усреднённая по десяти порогам от 0,50 до 0,95 с шагом 0,05. COCO называет это значение просто «AP», не различает AP и mAP и использует его в качестве основной метрики соревнования.
В обучении Ultralytics YOLO26 сохраняет best.pt с эпохи, на которой mAP50-95 на валидации максимальна, а валидация показывает все три варианта при каждом запуске.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validate on the small COCO8 dataset to compute mAP
metrics = model.val(data="coco8.yaml")
# The same detections scored at three IoU thresholds
print(f"mAP50: {metrics.box.map50:.3f}")
print(f"mAP75: {metrics.box.map75:.3f}")
print(f"mAP50-95: {metrics.box.map:.3f}")Чем ниже порог IoU, тем больше обнаружений засчитывается как правильные, поэтому mAP50 получается наибольшей, а mAP50-95 — ниже. COCO также разделяет AP по размеру объектов: маленькие объекты занимают менее 32 × 32 пикселей, средние — до 96 × 96 пикселей, а большие — больше.










