Ultralytics YOLO27: Iscriviti alla lista d'attesa.
Get Started
Fondamenti della visione artificiale·Leggi le metriche·Lezione 9/10
Lezioneprincipiante

Interpretare correttamente le metriche di rilevamento

Esegui la validazione, leggi insieme precisione, recall, mAP50-95, AP per classe e matrice di confusione, quindi scegli una soglia di deployment a partire da un obiettivo.

Un singolo numero è rassicurante: mAP 0.83, fatto. Ma lo stesso mAP può nascondere una classe che fallisce metà delle volte, riquadri sistematicamente imprecisi o una soglia che invia un avviso ogni minuto. Eseguirai una validazione reale e la leggerai riga per riga, finché non ti dirà cosa correggere e dove impostare la soglia.

Esito

Esegui la validazione, individua la classe critica dall'AP per classe, scegli una soglia di confidenza a partire da un obiettivo di precisione o recall e decidi se distribuire, iterare o ripensare l'approccio.

Percorso rapido
Se sai già come muoverti, ecco la versione breve.
  1. Precisione: quota dei riquadri tracciati che sono corretti. Recall: quota degli oggetti reali individuati.

  2. Riporta mAP50-95; mAP50 è più permissivo con i riquadri imprecisi.

  3. Esamina l'AP per classe: la media nasconde la classe più debole.

  4. Le colonne P e R corrispondono a un singolo punto operativo, non alla tua soglia di deployment.

  5. Scegli la soglia in base a un obiettivo: precisione ≥ X o recall ≥ Y.

Pratico

Come viene valutata ogni previsione#

Durante la validazione, ogni riquadro previsto viene confrontato con la ground truth. Una previsione è un vero positivo (TP) quando ha la classe corretta e la sua IoU con un riquadro della ground truth non ancora abbinato supera una soglia; altrimenti è un falso positivo (FP). Ogni oggetto della ground truth che rimane senza abbinamento è un falso negativo (FN).

MetricaFormulaDomanda a cui risponde
PrecisioneTP / (TP + FP)Quando il modello disegna un riquadro, con quale frequenza è corretto?
RecallTP / (TP + FN)Quanti degli oggetti reali ha trovato?
F12 × P × R / (P + R)Un numero che bilancia entrambi

Abbassando la soglia di confidenza si aggiungono riquadri: il recall aumenta e la precisione diminuisce. La curva precisione-recall traccia questo compromesso per tutte le soglie, e l'area sottostante è la average precision (AP) per una classe. mAP50 calcola la media dell'AP tra le classi con IoU pari a 0.5, dove viene conteggiato anche un riquadro notevolmente impreciso. mAP50-95 calcola la media su dieci soglie IoU, da 0.5 a 0.95, premiando così i riquadri precisi; è il numero principale nelle tabelle dei modelli Ultralytics.

Esegui una validazione#

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.yaml")

print(f"precision={metrics.box.mp:.3f} recall={metrics.box.mr:.3f}")
print(f"mAP50={metrics.box.map50:.3f} mAP50-95={metrics.box.map:.3f}")
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all          4         17      0.551      0.962      0.943      0.669
                person          3         10      0.551        0.8      0.848      0.387
                   dog          1          1       0.36          1      0.995      0.597
                 horse          1          2       0.36          1      0.995      0.696
              elephant          1          2      0.656      0.969      0.828      0.545
              umbrella          1          1      0.543          1      0.995      0.895
          potted plant          1          1      0.833          1      0.995      0.895

Leggila dall'inizio alla fine:

  • Instances 17, Images 4. COCO8 è un test rapido. Quattro immagini non bastano per decidere se distribuire il modello: considera ogni numero puramente illustrativo.
  • mAP50 0.943 contro mAP50-95 0.669. Viene individuata la maggior parte degli oggetti, ma molti riquadri sono imprecisi. Una differenza ampia indica che il punto debole è la localizzazione, non il rilevamento.
  • person AP50-95 0.387. La classe più frequente è la più debole. È il tuo collo di bottiglia.
  • P 0.551, R 0.962. Queste colonne sono calcolate alla singola soglia di confidenza che massimizza F1 tra le classi — qui una soglia bassa — non alla soglia 0.25 con cui fai le previsioni. Non citarle come «la precisione del modello».

AP per classe e soglia di deployment#

La stessa esecuzione contiene l'AP per classe e precisione e recall a ogni soglia di confidenza, quindi puoi scegliere una soglia in base a un obiettivo, anziché tirare a indovinare:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.yaml", plots=False, verbose=False)
box = metrics.box

# Per-class AP from the same run: the average hides the weakest class
for i, c in enumerate(box.ap_class_index):
    print(f"{model.names[int(c)]:13} AP50={box.ap50[i]:.3f}  AP50-95={box.ap[i]:.3f}")

# Precision and recall at every confidence threshold for one class
row = list(box.ap_class_index).index(0)  # class 0 = person
for conf in (0.1, 0.25, 0.5, 0.75):
    j = int(conf * (len(box.px) - 1))
    print(f"person @ conf {conf:.2f}: precision {box.p_curve[row, j]:.2f}, recall {box.r_curve[row, j]:.2f}")
                   all          4         17      0.551      0.962      0.943      0.669
person        AP50=0.848  AP50-95=0.387
dog           AP50=0.995  AP50-95=0.597
horse         AP50=0.995  AP50-95=0.696
elephant      AP50=0.828  AP50-95=0.545
umbrella      AP50=0.995  AP50-95=0.895
potted plant  AP50=0.995  AP50-95=0.895
person @ conf 0.10: precision 0.63, recall 0.80
person @ conf 0.25: precision 1.00, recall 0.54
person @ conf 0.50: precision 1.00, recall 0.40
person @ conf 0.75: precision 1.00, recall 0.14

Ora la soglia è una regola decisionale, non una sensazione:

Obiettivo in base alla tua decisioneScegliIn questa esecuzione
Al massimo il 5% degli avvisi può essere falso (precisione ≥ 0.95)La soglia più bassa che soddisfa il requisito, per mantenere il recall più alto possibile0.25: precisione 1.00, recall 0.54
Non perdere più di 1 persona su 5 (recall ≥ 0.80)La soglia più alta che soddisfa il requisito, per mantenere la precisione più alta possibile0.10: precisione 0.63, recall 0.80

Qui nessuna delle due è abbastanza buona: un'elevata precisione fa perdere metà delle persone, mentre un recall elevato comporta un terzo degli avvisi falsi. È un motivo per «iterare», non un problema di soglia. La validazione salva anche BoxPR_curve.png, BoxP_curve.png, BoxR_curve.png, BoxF1_curve.png e confusion_matrix.png nella cartella dell'esecuzione, così puoi osservare lo stesso compromesso nei grafici; la guida alle metriche di prestazione li illustra uno per uno.

Cosa correggere dopo#

La matrice di confusione ti dice con cosa viene confusa una classe debole. Se l'AP di forklift è basso e i carrelli elevatori vengono classificati come pallet_jack, si tratta di confusione tra classi, non di localizzazione: aggiungi esempi che mostrino la differenza visiva oppure unisci le classi se nessun codice a valle deve distinguerle. La guida agli approfondimenti sulla valutazione dei modelli illustra il flusso di lavoro.

Tre modi per migliorare mAP: qualità dei dati, ottimizzazione del modello e processo di annotazione

La maggior parte delle correzioni riguarda il primo e il terzo riquadro: dati e annotazioni migliori per la classe critica. Modifica il modello o le impostazioni di training solo dopo aver superato i controlli sui dati delle tre lezioni precedenti.

Evidenze su un set di test congelatoDecisione
Ogni classe critica per l'attività soddisfa i propri obiettivi di precisione e recallDistribuisci e monitora
Una classe o condizione non raggiunge il proprio obiettivoItera: raccogli dati e annotazioni mirati per colmare il divario
Tutte le classi sono molto lontane dall'obiettivo oppure si sovrappongono visivamenteRipensa le specifiche dell'attività, le classi o la configurazione delle telecamere

Insidie#

L'AP per classe è più utile della media

Un mAP di 0,83 può nascondere una classe a 0,40. Se quella classe è quella che genera valore per l'azienda, non hai un modello da 0,83: hai un modello che non funziona, mascherato da una media lusinghiera.

Citare solo mAP50

Sintomo: un modello che "ottiene 0,94" produce riquadri troppo imprecisi per misurazioni o ritagli. Soluzione: riporta mAP50-95 e interpreta la differenza rispetto a mAP50 come indicatore della precisione di localizzazione.

Affidarsi a un set di validazione troppo piccolo o contaminato

Sintomo: numeri apparentemente perfetti ottenuti su poche decine di immagini o su quasi duplicati del set di addestramento. Soluzione: porta la validazione ad alcune centinaia di istanze per ogni classe importante ed esegui il controllo dei quasi duplicati della lezione precedente prima di esaminare qualsiasi metrica.

Provalo

Esegui entrambi gli script qui sopra. Scrivi un breve resoconto per una persona contata con questo modello: la classe critica e il suo AP50-95, cosa indica la differenza tra mAP50 e mAP50-95, la soglia di deployment che sceglieresti per una precisione ≥ 0.95 e il recall a cui rinunci, e se distribuire, iterare o ripensare l'approccio.

Criteri di completamento
La lezione è completata quando tutte le seguenti condizioni sono soddisfatte.
  • Il tuo resoconto indica la classe critica e il relativo AP50-95.

  • Il tuo resoconto indica una soglia di rilascio, il target che l'ha prodotta e il richiamo o la precisione a cui devi rinunciare.

  • Il tuo resoconto si conclude con una decisione — rilasciare, iterare o ripensare l'approccio — supportata dai numeri.

Mostra la soluzione

Resoconto: contatore di persone su yolo26n.pt, validazione COCO8

Il collo di bottiglia è person, con AP50-95 pari a 0.387 rispetto al valore complessivo di 0.669. È anche la classe con più istanze (10 su 17), quindi è sia la più debole sia quella più importante per un contatore di persone. Il suo AP50 è 0.848: il modello rileva la maggior parte delle persone, ma disegna box approssimative — un problema meno rilevante per il conteggio che per qualsiasi attività che misuri posizione o dimensioni.

Per una precisione ≥ 0.95, la soglia più bassa che soddisfa il requisito è conf 0.25: la precisione è 1.00, ma il richiamo è solo 0.54, quindi il contatore non rileverebbe quasi la metà delle persone. Per un richiamo ≥ 0.80 servirebbe conf 0.10, con cui un terzo dei conteggi sarebbe costituito da falsi positivi.

Decisione: iterare. Raccogli e annota immagini di persone riprese dalla telecamera di produzione, soprattutto persone piccole, occluse e ai bordi dell'inquadratura; poi ripeti la validazione su un set di test congelato con qualche centinaio di persone. Quattro immagini di validazione non bastano per decidere se rilasciare il modello.

Prossimi passi

Ultima lezione: esegui YOLO26 sulle tue immagini e confronta il risultato con le specifiche del tuo task.

Accedi per salvare i progressi