Mean Average Precision (mAP)
La precisione media media (mAP) valuta i rilevatori calcolando la media della precisione su richiamo, classi e soglie IoU. Scopri come si calcolano mAP50 e mAP50-95.
La precisione media media (mAP) è la metrica di valutazione standard per il rilevamento di oggetti; la stessa procedura valuta anche la segmentazione di istanze, la stima della posa e il rilevamento orientato. Premia un modello se individua tutti gli oggetti, evita i falsi rilevamenti e posiziona con precisione ciascun riquadro di delimitazione, condensando questi tre aspetti in un unico numero tra 0 e 1, spesso espresso in percentuale. La precisione media (AP) è l'area sotto la curva precisione-richiamo di una classe; la mAP è la media dell'AP tra le classi e la forma più comunemente riportata, mAP50-95, calcola anche la media su dieci soglie di intersezione sull'unione (IoU).
Gli elementi fondamentali#
- IoU: sovrapposizione tra un riquadro predetto e uno etichettato, compresa tra 0 e 1. Una predizione è un vero positivo solo se la sua IoU con un'etichetta della stessa classe non ancora abbinata raggiunge la soglia, ad esempio 0.5.
- Precisione: quota di predizioni corrette, TP / (TP + FP).
- Richiamo: quota di oggetti etichettati individuati dal modello, TP / (TP + FN).
- Confidenza: punteggio usato per ordinare i rilevamenti. Ogni soglia di confidenza determina una coppia precisione-richiamo e l'insieme di tutte le soglie traccia la curva precisione-richiamo.
Come si calcola la mAP#
La valutazione riunisce tutti i rilevamenti di una classe nell'intero dataset e li ordina per confidenza. Scorrendo l'elenco, ogni rilevamento abbina l'etichetta non abbinata della stessa classe con la maggiore sovrapposizione e diventa un vero positivo; in caso contrario, diventa un falso positivo. Ogni etichetta può essere abbinata una sola volta, quindi un secondo riquadro su un oggetto già individuato incide negativamente sulla precisione. Dopo ogni passaggio, precisione e richiamo vengono ricalcolati, tracciando così la curva precisione-richiamo dal rilevamento più sicuro a quello meno sicuro.
L'AP è l'area sotto quella curva. Prima dell'integrazione, la curva viene sostituita dal suo inviluppo, cioè la precisione massima rilevata per ciascun livello di richiamo o per quelli superiori, così che le piccole oscillazioni non modifichino il punteggio. La valutazione COCO campiona l'inviluppo in 101 punti di richiamo da 0 a 1; il benchmark PASCAL VOC originale ne usava 11. I livelli di richiamo mai raggiunti dal modello contribuiscono con precisione zero, quindi ogni oggetto mancato riduce 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}")Lo script stampa Max recall: 0.8, AP: 0.686. Uno dei cinque oggetti etichettati non viene mai rilevato, quindi l'ultimo quinto dell'asse del richiamo non aggiunge nulla all'area e l'AP rimane a 0.686, nonostante i due rilevamenti con la confidenza più alta siano entrambi corretti.
mAP e metriche correlate#
- Accuratezza divide le predizioni corrette per il totale delle predizioni, e richiede di conteggiare i veri negativi. Per un rilevatore, i veri negativi sarebbero tutte le porzioni di sfondo vuote, quindi l'accuratezza non ha un valore significativo nel rilevamento.
- Punteggio F1 combina precisione e richiamo a una singola soglia di confidenza e descrive un unico punto operativo, come la soglia usata da un modello distribuito.
- Matrice di confusione conta quali classi un rilevatore confonde a una singola soglia, mostrando dettagli che un unico valore mAP nasconde.
mAP50, mAP75 e mAP50-95#
Poiché mAP è una semplice media sulle classi, una classe rara conta quanto una comune. La soglia IoU determina quanto deve essere precisa una bounding box per essere considerata valida:
- mAP50: una rilevazione è corretta con IoU pari a 0.5, secondo il criterio PASCAL VOC.
- mAP75: la soglia sale a 0.75, un test rigoroso della localizzazione.
- mAP50-95: mAP calcolato come media su dieci soglie, da 0.50 a 0.95 con incrementi di 0.05. COCO chiama semplicemente questo valore "AP", non distingue tra AP e mAP e lo usa come metrica principale della competizione.
L'addestramento di Ultralytics YOLO26 conserva best.pt dell'epoca con il valore mAP50-95 di validazione più alto, e la validazione riporta tutte e tre le varianti a ogni esecuzione.
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}")Più la soglia IoU è permissiva, più rilevazioni vengono considerate corrette: perciò mAP50 risulta il valore più alto e mAP50-95 è inferiore. COCO suddivide anche AP in base alle dimensioni degli oggetti: gli oggetti piccoli coprono un'area inferiore a 32 × 32 pixel, quelli medi fino a 96 × 96 e quelli grandi più di così.










