mAP@0.5 хороший, а рамки неточные: читаем mAP@0.5:0.95

Детектор уверенно находит коробки на полке, и mAP@0.5 высокий. Но для робота рамки слишком свободны: захват приходится на соседний товар. Команда спорит, почему «хорошая метрика» не совпала с рабочим качеством. Возможно, проверяли факт приблизительного обнаружения, тогда как задаче нужна точная локализация.

Порог IoU определяет, что считать совпадением

Intersection over Union делит площадь пересечения предсказанной и эталонной рамок на площадь их объединения. При пороге 0,5 рамка с IoU 0,64 считается подходящей; при 0,75 — уже нет. mAP50 строит average precision при IoU 0,5. mAP50-95 усредняет AP по порогам от 0,5 до 0,95 с шагом 0,05. Поэтому второй показатель сильнее реагирует на качество геометрии, хотя в нём также участвуют ранжирование по уверенности, пропуски, лишние рамки и классы.

Чтобы увидеть только роль порога, возьмём упрощённый случай: одно изображение, один объект, одно предсказание правильного класса. Тогда AP на каждом пороге равна единице при совпадении и нулю при промахе. В полном датасете AP считается по всей кривой precision–recall; пример не подменяет эту процедуру.

import numpy as np

ground_truth = (0, 0, 10, 10)
prediction = (0, 0, 8, 8)
intersection = 8 * 8
union = 10 * 10 + 8 * 8 - intersection
iou = intersection / union
thresholds = np.arange(0.50, 1.00, 0.05)
matches = (iou >= thresholds).astype(int)
print("IoU:", round(iou, 2))
print("AP одного объекта по порогам:", matches.tolist())
print("среднее по порогам:", round(float(matches.mean()), 2))
assert iou >= 0.5 and iou < 0.75

IoU равна 0,64. Рамка проходит пороги 0,50, 0,55 и 0,60, но не проходит остальные семь. Среднее по десяти порогам для этого единственного объекта — 0,3. При одном пороге 0,5 получилось бы 1. Разница объясняет, как детектор может находить объект и при этом плохо очерчивать его границу.

Свяжите порог с действием

Для счётчика объектов на кадре приблизительная рамка может быть достаточной. Для измерения размера дефекта, вырезания фрагмента документа или роботизированного захвата важнее точность границы. Покажите ошибки на нескольких размерах объектов и классах: средняя mAP может скрывать слабые маленькие объекты. Нарисуйте эталон и предсказание поверх одного изображения, особенно для случаев между 0,5 и 0,75.

Прежде чем менять архитектуру модели, проверьте координаты и разметку. Ошибка letterbox может сдвинуть все рамки одинаково; разбор обратного переноса координат помогает её найти. Если разметчики сами проводят границы по-разному, рост строгой mAP упрётся в качество эталона. Сравните несколько изображений с повторной разметкой, чтобы понять масштаб несогласованности.

При нескольких предсказаниях для одного объекта дело усложняется: даже если одна рамка точна, дубли с высоким score могут ухудшить precision. Проверьте число лишних рамок после NMS и порядок их score. Если рабочая система теряет соседние объекты из-за подавления, изменение NMS может повысить recall без переобучения детектора. Такой опыт проверяйте на тех же эталонах и отдельно от изменения порога IoU в самой метрике.

Курс «Computer Vision Engineer: от детекции и Doc-AI до продакшна» включает подготовку данных, обучение детекторов, mAP/IoU и анализ метрик вместе со скоростью и стоимостью сервиса. Такой контур позволяет выбрать показатель, который соответствует вашему действию с рамкой. Посмотрите программу курса.

Продолжить на практике

  • Computer Vision Engineer: от детекции и Doc-AI до продакшна ↗

    Практический курс по Computer Vision. Соберёте продакшн-сервис: датасет → обучение (YOLO/RT-DETR, SAM), трекинг, OCR/Doc-AI, веб-приложение (UI+API) и мониторинг. Экспорт в ONNX/TensorRT/OpenVINO, батчинг/квантование под CPU/GPU. Плюс профессиональные блоки: mAP/IoU/Dice и калибровка доверия, QA разметки и аугментации, p95/стоимость, дрейф данных и алерты, guardrails (NMS/правила), A/B-тесты, Triton/gRPC/FastAPI.