Mean Average Precision (mAP)
La précision moyenne (mAP) évalue les détecteurs en calculant la moyenne de la précision sur le rappel, les classes et les seuils d’IoU. Découvre le calcul de mAP50 et mAP50-95.
La précision moyenne (mAP) est la métrique d’évaluation standard pour la détection d’objets, et la même méthode évalue la segmentation d’instances, l’estimation de pose et la détection orientée. Elle récompense un modèle qui trouve tous les objets, évite les fausses détections et ajuste précisément chaque boîte englobante ; elle résume ces trois aspects en un nombre compris entre 0 et 1, souvent exprimé en pourcentage. La précision moyenne (AP) correspond à l’aire sous la courbe précision-rappel d’une classe, la mAP est la moyenne des AP de toutes les classes, et la forme la plus couramment rapportée, mAP50-95, fait également la moyenne sur dix seuils d’intersection sur union (IoU).
Les éléments constitutifs#
- IoU : le chevauchement entre une boîte prédite et une boîte étiquetée, de 0 à 1. Une prédiction est un vrai positif uniquement lorsque son IoU avec une étiquette non encore associée de la même classe atteint le seuil, par exemple 0.5.
- Précision : la proportion de prédictions correctes, TP / (TP + FP).
- Rappel : la proportion d’objets étiquetés trouvés par le modèle, TP / (TP + FN).
- Confiance : le score qui classe les détections. Chaque seuil de confiance donne une paire précision-rappel, et l’ensemble des seuils forme la courbe précision-rappel.
Calcul de la mAP#
L’évaluation regroupe toutes les détections d’une classe sur l’ensemble du jeu de données et les trie par confiance. En parcourant cette liste, chaque détection est soit associée à l’étiquette non associée de sa classe qui présente le meilleur chevauchement et devient un vrai positif, soit considérée comme un faux positif. Une étiquette ne peut être associée qu’une fois ; une deuxième boîte sur un objet déjà trouvé nuit donc à la précision. Après chaque étape, la précision et le rappel sont recalculés, ce qui trace la courbe précision-rappel, de la détection la plus sûre à la moins sûre.
L’AP correspond à l’aire sous cette courbe. Avant le calcul de l’aire, la courbe est remplacée par son enveloppe, c’est-à-dire la précision maximale observée à chaque niveau de rappel ou au-delà, afin que les petits zigzags ne modifient pas le score. L’évaluation COCO échantillonne l’enveloppe à 101 niveaux de rappel, de 0 à 1, tandis que l’ancien jeu de référence PASCAL VOC en utilisait 11. Les niveaux de rappel que le modèle n’atteint jamais contribuent une précision nulle ; chaque objet manqué réduit donc l’AP.
import numpy as np
# One class: 8 detections sorted by confidence (1 = matched a label, 0 = false positive)
tp = np.array([1, 1, 0, 1, 0, 1, 0, 0])
num_labels = 5 # ground-truth objects of this class in the dataset
# Precision and recall after each detection in the ranked list
tp_cum = np.cumsum(tp)
precision = tp_cum / np.arange(1, len(tp) + 1)
recall = tp_cum / num_labels
# Precision envelope: best precision at this recall or any higher recall
envelope = np.maximum.accumulate(precision[::-1])[::-1]
# COCO-style AP: average the envelope at 101 recall points (0 beyond the highest recall reached)
points = np.linspace(0, 1, 101)
idx = np.searchsorted(recall, points, side="left")
ap = np.mean([envelope[i] if i < len(envelope) else 0.0 for i in idx])
print(f"Max recall: {recall[-1]:.1f}, AP: {ap:.3f}")Le script affiche Max recall: 0.8, AP: 0.686. L’un des cinq objets étiquetés n’est jamais détecté ; le dernier cinquième de l’axe du rappel n’ajoute donc rien à l’aire, et l’AP reste à 0.686 même si les deux détections les plus sûres sont correctes.
La mAP et les métriques associées#
- Exactitude : divise les prédictions correctes par le nombre total de prédictions, ce qui nécessite de compter les vrais négatifs. Pour un détecteur, les vrais négatifs correspondraient à chaque zone d’arrière-plan vide ; l’exactitude n’a donc pas de valeur pertinente en détection.
- Score F1 : combine la précision et le rappel pour un seul seuil de confiance et décrit un point de fonctionnement unique, comme le seuil utilisé par un modèle déployé.
- Matrice de confusion : indique quelles classes un détecteur confond pour un seuil donné, détail que masque une valeur unique de mAP.
mAP50, mAP75 et mAP50-95#
Comme le mAP est une moyenne arithmétique simple sur les classes, une classe rare compte autant qu’une classe courante. Le seuil d’IoU détermine la précision requise pour qu’une boîte soit considérée comme correcte :
- mAP50 : une détection est correcte à un IoU de 0.5, selon la règle PASCAL VOC.
- mAP75 : le seuil passe à 0.75, ce qui constitue un test strict de la précision de localisation.
- mAP50-95 : mAP moyenné sur dix seuils, de 0.50 à 0.95 par pas de 0.05. COCO appelle simplement ce nombre « AP », ne fait pas de distinction entre AP et mAP et l’utilise comme métrique principale de son défi.
L’entraînement Ultralytics YOLO26 conserve best.pt de l’epoch ayant obtenu le mAP50-95 de validation le plus élevé, et la validation rapporte les trois variantes à chaque exécution.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validate on the small COCO8 dataset to compute mAP
metrics = model.val(data="coco8.yaml")
# The same detections scored at three IoU thresholds
print(f"mAP50: {metrics.box.map50:.3f}")
print(f"mAP75: {metrics.box.map75:.3f}")
print(f"mAP50-95: {metrics.box.map:.3f}")Plus le seuil d’IoU est faible, plus le nombre de détections considérées comme correctes est élevé : le mAP50 est donc le plus élevé, et le mAP50-95 est inférieur. COCO répartit aussi l’AP selon la taille des objets : les petits objets occupent moins de 32 × 32 pixels, les objets moyens jusqu’à 96 × 96 pixels et les grands objets davantage.










