Comment calculer la mAP (moyenne moyenne de précision) pour la tâche de détection pour les classements Pascal VOC? http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?challengeid=11&compid=4
Il a dit - à la page 11 : http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf
Précision moyenne (AP). Pour le défi VOC2007, la précision moyenne interpolée (Salton et Mcgill 1986) a été utilisée pour évaluer à la fois la classification et la détection. Pour une tâche et une classe données, la courbe de précision / rappel est calculée à partir de la sortie classée d'une méthode. Le rappel est défini comme la proportion de tous les exemples positifs classés au-dessus d'un rang donné. La précision est la proportion de tous les exemples au-dessus de ce rang qui appartiennent à la classe positive. L'AP résume la forme de la courbe de précision / rappel, et est définie comme la précision moyenne à un ensemble de onze niveaux de rappel également espacés [0,0.1, ..., 1]:
AP = 1/11 ∑ r∈{0,0.1,...,1} pinterp(r)
La précision à chaque niveau de rappel r est interpolée en prenant la précision maximale mesurée pour une méthode pour laquelle le rappel correspondant dépasse r
pinterp(r) = max p(r˜)
:, où p (r˜) est la précision mesurée au rappel ˜r
À propos de mAP: http://0agr.ru/wiki/index.php/Precision_and_Recall#Average_Precision
Cela signifie-t-il que:
Nous calculons la précision et le rappel :
- A) Pour de nombreux différents,
IoU
> {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
nous calculons les valeurs Vrai / Faux Positif / Négatif
Où
True positive = Number_of_detection with IoU > {0, 0.1,..., 1}
, comme indiqué ici: /datascience//a/16813/37736 puis nous calculons:Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
- A) Pour de nombreux différents,
B) Ou pour de nombreux seuils différents d'algorithmes de détection, nous calculons:
Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
Où
True positive = Number_of_detection with IoU > 0.5
comme dit ici: /programming//a/43168882/1558037
C) Ou pour de nombreux seuils différents d'algorithmes de détection, nous calculons:
Precision = Intersect / Detected_box
Recall = Intersect / Object
Comme montré ici? https://en.wikipedia.org/wiki/Precision_and_recall
- Ensuite, nous calculons AP (précision moyenne) comme moyenne de 11 valeurs de
Precision
aux points oùRecall = {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
, c.-à-d.AP = 1/11 ∑ recall∈{0,0.1,...,1} Precision(Recall)
(En général, pour chaque point, par exemple 0,3, nous obtenons un MAX de précision pour le rappel <= 0,3, au lieu de la valeur de la précision à ce stade du rappel = 0,3)
- Et lorsque nous calculons AP uniquement pour 1 classe d'objet quelque chose sur toutes les images - nous obtenons AP (précision moyenne) pour cette classe, par exemple, uniquement pour
air
.
Donc AP est une intégrale (aire sous la courbe): /stats//a/157019/111998
Mais lorsque nous calculons AP pour toutes les classes d'objets sur toutes les images - nous obtenons alors mAP (précision moyenne moyenne) pour tous les 88.6
jeux de données d'images, par exemple, pour R4D_faster_rcnn: http://host.robots.ox.ac.uk:8080/leaderboard /displaylb.php?challengeid=11&compid=4
Des questions:
- Est-ce vrai, et si ce n'est pas le cas, alors comment calculer le mAP pour Pascal VOC Challenge?
- Et laquelle des 3 formules (A, B ou C) est correcte pour calculer la précision et le rappel, au paragraphe 1?
Réponse courte:
- mAP = AVG (AP pour chaque classe d'objets)
- AP = AVG (précision pour chacun des 11 rappels {précision = 0, 0,1, ..., 1})
- Courbe PR = Précision et Rappel (pour chaque seuil qui se trouve dans les boîtes liées aux prédictions)
- Précision = TP / (TP + FP)
- Rappel = TP / (TP + FN)
- TP = nombre de détections avec IoU> 0,5
- FP = nombre de détections avec IoU <= 0,5 ou détectées plus d'une fois
- FN = nombre d'objets non détectés ou détectés avec IoU <= 0,5