Précision moyenne dans la détection d'objets


8

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:

  1. Le TP + FP = # de prédictions serait-il fait pour chaque image?

  2. Étant donné que toutes les images de test n'ont pas de négatifs, TP + FN = 500?

  3. Est-il calculé par image ou par classe?

  4. 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.


Mon référentiel github a une explication de IOU, Precision, Recall, Average Precision et mAP. Il a également un code qui évalue tous les détecteurs d'objets.
Rafael Padilla

Réponses:


7

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:

ao=Area(bpbt)Area(bpbt)

Après avoir filtré une liste de Mles 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 ...]


quelle grande explication simple
Amitai

7

C'est ainsi que PASCOL-VOC 2012 et MS-COCO calculent mAP, pseudo-code comme suit:

For each single class of object,

iterate through entire list of predictions for all images

TP = [0] * number of predictions
NP = [0] * number of predictions

for i, prediction in enumerate(predictions): # sorted by prediction confidence, descended

    try to find the ground truth with same class and largest IoU:

        if IoU > threshold(0.5 in PASCOL VOC 2012)

            if ground truth has not been assigned yet:

                assign this ground truth to the prediction
                TP[i] = 1      

        else: # corresponding ground truth has been assigned or IoU < threshold
            FP[i] = 1

    not find:
        FP[i] = 1

then calculate FN = number of unassigned ground truth

Precision = TP/(TP+FP)
Recall = TP/(TP+FN)

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


que se passe-t-il si la boîte prédite chevauche deux objets de vérité terrain, pour quel objet testez-vous le chevauchement?
Curieux

1
AP = TP/(TP+FP)est incorrect. Au lieu de cela, Precision = TP/(TP+FP).
Franck Dernoncourt

C'est complètement faux. La précision moyenne est calculée de cette façon à la place: medium.com/@jonathan_hui/…
Curieux

3

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:

entrez la description de l'image ici

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:

entrez la description de l'image ici

Exemple de calcul IoU sur une image réelle:

entrez la description de l'image ici

( source d'image )

FYI: Précision moyenne moyenne vs rang réciproque moyen


0

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:

Q1: Est-ce que TP + FP = # de prédictions faites pour chaque image?

Oui. ( Étant donné que le nombre de TP est limité, plus vous faites de prédictions, moins vous obtenez de précision. )

Q2: Étant donné que toutes les images de test n'ont pas de négatifs, TP + FN = 500?

Oui. ( Puisqu'il n'y a qu'une seule boîte de vérité au sol par image )

Q3: Est-il calculé par image ou par classe?

Par classe.

Q4: 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).

Voir le post de @ User1915 ci-dessus.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.