Вычисление mAP и Precision/Recall по результатам обнаружения с метками
При работе с детекторами объектов, где нет меток объектов, вычисление #TruePositive, #FalsePositive и #FalseNegative является простым:
- Вы вычисляете IoU каждого блока из результатов с каждым блоком из GT
- Вы сортируете пары в порядке убывания в соответствии с их IoU
- Вы перебираете пары. Каждая пара с IoU >
some_predefined_threshold
добавляет1
to #TruePositive и его члены пары помечены как "совпавшие", если хотя бы один из членов пары не был сопоставлен - #FalsePositive будет количеством непревзойденных блоков из результатов
- #FalseNegative будет числом непревзойденных коробок от GT
Когда поля также включают метки (например, типы объектов, такие как dog
, person
, car
и т. д.), проблема становится более неоднозначной.
Что я сейчас делаю в этом случае, так это то, что я просто усиливаю условие соответствия, чтобы IoU > thresh
а также pred_label == gt_label
,
Это напрямую означает, что каждый блок из результатов имеет возможность увеличивать #TruePositive, если он имеет достаточно высокую IoU с блоком GT и независимо от других блоков результатов, которые могли иметь более высокие IoU, но неправильные метки. (Для сравнения, более строгий подход может соответствовать только в соответствии с самыми высокими IoU, как если бы не было меток, и в конечном итоге удалить совпадения, которые не совпадают по меткам).
Это правильный подход для вычисления точности и повторного вызова на задачах обнаружения и распознавания, в качестве предыдущего шага для mAP?