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