Je suis assez confus quant à la façon de calculer les valeurs AP ou mAP car il semble y avoir plusieurs méthodes différentes. Je veux spécifiquement obtenir les valeurs AP / mAP pour la détection d'objets.
Tout ce que je sais, c'est:
Rappel = TP / (TP + FN), précision = TP / (TP + FP)
Par exemple, si je n'ai qu'une seule classe à évaluer et disons 500 images de test. Chaque image de test peut avoir un nombre différent de prédictions (propositions de boîte englobante) mais chaque image n'a qu'une seule boîte englobante de vérité au sol.
Image 1: [classe, probabilité, x1, y1, x2, y2], [classe, probabilité, x3, y3, x4, y4], [classe, probabilité, x5, y5, x6, y6], [classe, probabilité, x7, y7, x8, y8], ...
Image 2: [classe, probabilité, x1, y1, x2, y2], [classe, probabilité, x3, y3, x4, y4], ...
. . . (etc)
* juste un exemple, j'ai inventé ça
Je sais que pour obtenir TP, nous devons trouver les IOU de chaque prédiction et compter celles au-dessus d'un seuil sélectionné tel que 0,5 (si nous avons plusieurs prédictions avec des IOU au-dessus du seuil, ne comptons-nous qu'une seule fois et traitons les autres comme FP?).
C'est là que ça me laisse perplexe:
Le TP + FP = # de prédictions serait-il fait pour chaque image?
Étant donné que toutes les images de test n'ont pas de négatifs, TP + FN = 500?
Est-il calculé par image ou par classe?
Quelqu'un pourrait-il me faire savoir un guide étape par étape pour obtenir l'AP / mAP basé sur mon exemple? Je trouve que la partie la plus ambiguë est de savoir si nous le faisons par image ou par classe (c'est-à-dire 500 images à la fois).
La plupart des guides / articles que j'ai trouvés sont très ciblés sur la recherche d'informations. J'apprécierais un peu d'aide à ce sujet.
* Remarque: je le teste sur un ensemble de données personnalisé. Je sais que PASCAL VOC a du code pour le faire, mais je veux écrire le code moi-même, personnalisé selon mes propres données.
la source
Réponses:
Je pense que la réponse acceptée indique la mauvaise façon de calculer le mAP. Parce que même pour chaque classe, l'AP est le produit moyen. Dans ma réponse, j'inclurai toujours l'interprétation de IOU afin que les débutants n'aient aucune difficulté à la comprendre.
Pour une tâche donnée de détection d'objets, les participants soumettront une liste de boîtes englobantes avec confiance (la probabilité prédite) de chaque classe. Pour être considérée comme une détection valide, la proportion de la zone de chevauchementao entre la zone de délimitation prévue bp et terre véritable délimitation bt à la zone globale doivent dépasser 0,5. La formule correspondante sera:
Après avoir filtré une liste deM les boîtes englobantes prédites, nous évaluerons ensuite chaque classe comme un problème à deux classes indépendamment. Donc, pour un processus d'évaluation typique de classe «humaine». Nous pouvons d'abord énumérer cesM cadre de délimitation comme suit:
Index des objets, confiance, vérité terrain
Boîte englobante 1, 0,8, 1
Boîte englobante 1, 0,7, 1
Boîte englobante 2, 0,1, 0
Boîte englobante 3, 0,9, 1
Et puis, vous devez les classer par niveau de confiance de haut en bas. Ensuite, il vous suffit de calculer la courbe PR comme d'habitude et de calculer 11 résultats de précision interpolés à ces 11 points de rappel égaux à [0, 0,1, ..., 1] (les méthodes calculées détaillées sont ici ). pour les détections multiples d'une seule boîte englobante, par exemple la boîte englobante 1 dans mon exemple, nous la considérerons tout au plus comme correcte une fois et toutes les autres comme fausses. Ensuite, vous parcourez 20 classes et calculez la moyenne d'entre elles. Ensuite, vous obtenez votre mAP.
Et aussi, pour l'instant nous tordons un peu cette méthode pour trouver notre mAP. Au lieu d'utiliser 10 points de rappel, nous utiliserons le vrai nombre K de la classe spécifique et calculerons la précision interpolée. soit [0,1 / K, 2 / K ...]
la source
C'est ainsi que PASCOL-VOC 2012 et MS-COCO calculent mAP, pseudo-code comme suit:
Pour obtenir AP, commencez par lisser la courbe PR, puis calculez l'aire sous la courbe. Pour obtenir mAP, répétez les étapes ci-dessus pour toutes les classes et faites-en la moyenne.
Référence:
Version Python de la métrique d'évaluation PASCOL VOC 2012: https://github.com/Cartucho/mAP
Boîte à outils PASCOL VOC 2012 originale (dans MATLAB): https://github.com/Cartucho/mAP
MSCOCO d'origine: http://cocodataset.org/#detection-eval
la source
AP = TP/(TP+FP)
est incorrect. Au lieu de cela,Precision = TP/(TP+FP)
.La conférence "Evaluation 12: précision moyenne moyenne" de Victor Lavrenko contient une diapositive qui explique très clairement ce que sont la précision moyenne (AP) et la précision moyenne moyenne (mAP) pour le cas de récupération de documents:
Pour appliquer la diapositive à la détection d'objets: document pertinent = boîte englobante prédite dont l'IoU est égal ou supérieur à un certain seuil (généralement 0,5).
IoU = Intersection over Union, voir l'image ci-dessous pour une définition visuelle:
Exemple de calcul IoU sur une image réelle:
( source d'image )
FYI: Précision moyenne moyenne vs rang réciproque moyen
la source
Bien que @ User1915 ait trouvé la réponse par lui-même, je voudrais laisser quelque chose pour ceux qui sont intéressés.
Voici ma réponse aux questions ci-dessus:
Oui. ( Étant donné que le nombre de TP est limité, plus vous faites de prédictions, moins vous obtenez de précision. )
Oui. ( Puisqu'il n'y a qu'une seule boîte de vérité au sol par image )
Par classe.
Voir le post de @ User1915 ci-dessus.
la source