Validazione del modello con Ultralytics YOLO#
Introduzione#
La validazione è un passaggio fondamentale nella pipeline di apprendimento automatico, che ti consente di valutare la qualità dei tuoi modelli addestrati. La modalità Val in Ultralytics YOLO26 offre una robusta suite di strumenti e metriche per valutare le prestazioni dei tuoi modelli di rilevamento oggetti. Questa guida rappresenta una risorsa completa per comprendere come utilizzare efficacemente la modalità Val per garantire che i tuoi modelli siano sia accurati che affidabili.
Watch: Ultralytics Modes Tutorial: Validation
Perché effettuare la validazione con Ultralytics YOLO?#
Ecco perché utilizzare la modalità Val di YOLO26 è vantaggioso:
- Precisione: Ottieni metriche accurate come mAP50, mAP75 e mAP50-95 per valutare in modo completo il tuo modello.
- Convenienza: Utilizza funzionalità integrate che ricordano le impostazioni di addestramento, semplificando il processo di validazione.
- Flessibilità: Valida il tuo modello con gli stessi dataset e dimensioni dell'immagine o con altri differenti.
- Ottimizzazione degli iperparametri: Utilizza le metriche di validazione per perfezionare il tuo modello per ottenere prestazioni migliori.
Caratteristiche principali della modalità Val#
Queste sono le funzionalità degne di nota offerte dalla modalità Val di YOLO26:
- Impostazioni automatizzate: I modelli ricordano le loro configurazioni di addestramento per una validazione semplice.
- Supporto per metriche multiple: Valuta il tuo modello basandoti su una serie di metriche di accuratezza.
- CLI e Python API: Scegli tra l'interfaccia a riga di comando o l'API Python in base alla tua preferenza per la validazione.
- Compatibilità dei dati: Funziona perfettamente con i dataset utilizzati durante la fase di addestramento e anche con dataset personalizzati.
- I modelli YOLO26 ricordano automaticamente le loro impostazioni di addestramento, così puoi validare facilmente un modello alla stessa dimensione di immagine e sul dataset originale con solo
yolo val model=yolo26n.ptoYOLO("yolo26n.pt").val()
Esempi di Utilizzo#
Valida l'accuratezza di un modello YOLO26n addestrato sul dataset COCO8. Non sono necessari argomenti poiché model mantiene i suoi data di addestramento e gli argomenti come attributi del modello. Consulta la sezione Argomenti sottostante per un elenco completo degli argomenti di validazione.
Su Windows, potresti ricevere un RuntimeError quando avvii la validazione come script. Aggiungi un blocco if __name__ == "__main__": prima del tuo codice di validazione per risolverlo.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val() # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # a list containing mAP50-95 for each category
metrics.box.image_metrics # per-image metrics dictionary with precision, recall, F1, TP, FP, and FNArgomenti per la validazione del modello YOLO#
Quando si validano i modelli YOLO, è possibile perfezionare diversi argomenti per ottimizzare il processo di valutazione. Questi argomenti controllano aspetti come la dimensione dell'immagine di input, l'elaborazione a lotti e le soglie di prestazione. Di seguito è riportata un'analisi dettagliata di ciascun argomento per aiutarti a personalizzare le tue impostazioni di validazione in modo efficace.
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
data | str | None | Specifica il percorso del file YAML del dataset (es., coco8.yaml), che dovrebbe includere il percorso dei dati di convalida. La classificazione richiede invece una directory del dataset o il nome di un dataset integrato (es., imagenet10). |
imgsz | int | 640 | Definisce la dimensione delle immagini in input. Tutte le immagini vengono ridimensionate a questa dimensione prima dell'elaborazione. Dimensioni maggiori possono migliorare l'accuratezza per oggetti piccoli ma aumentare il tempo di calcolo. |
batch | int | 16 | Imposta il numero di immagini per batch. Valori più alti utilizzano la memoria GPU in modo più efficiente ma richiedono più VRAM. Regola in base alle risorse hardware disponibili. |
save_json | bool | False | Se True, salva i risultati in un file JSON per ulteriori analisi, integrazione con altri strumenti o invio a server di valutazione come COCO. |
conf | float | 0.001 | Imposta la soglia di confidenza minima per i rilevamenti. Valori più bassi aumentano il richiamo ma possono introdurre più falsi positivi. Le curve di precisione-richiamo utilizzano per impostazione predefinita 0.001; le matrici di confusione del rilevamento utilizzano un valore esplicito conf, oppure 0.25 quando questo viene omesso. La precisione e il richiamo di riepilogo utilizzano la confidenza max-F1, quindi potrebbero differire dai valori derivati da confusion_matrix.png. Il valore predefinito è 0.01 per la validazione OBB per ridurre l'utilizzo della memoria. |
iou | float | 0.7 | Imposta la soglia di Intersection Over Union per il Non-Maximum Suppression. Controlla l'eliminazione dei rilevamenti duplicati. |
max_det | int | 300 | Limita il numero massimo di rilevazioni per immagine. Utile in scene dense per evitare rilevazioni eccessive e gestire le risorse computazionali. |
quantize | int o str | None | Precisione di validazione: 16/"fp16" abilita la validazione FP16 sulle GPU supportate; 32/"fp32"/non impostato è FP32. La quantizzazione INT8/PTQ viene configurata durante l'export, quindi utilizzata validando il modello esportato. Sostituisce il flag deprecato half. |
device | str | None | Specifica il dispositivo per la validazione (cpu, cuda:0, npu, npu:0, ecc.). Quando è None, seleziona automaticamente il miglior dispositivo disponibile. È possibile specificare più dispositivi CUDA separati da virgole. |
dnn | bool | False | Se True, utilizza il modulo DNN di OpenCV per l'inferenza del modello ONNX, offrendo un'alternativa ai metodi di inferenza di PyTorch. |
plots | bool | True | Se impostato su True, genera e salva i grafici delle predizioni rispetto alla ground truth, matrici di confusione e curve PR per la valutazione visiva delle prestazioni del modello. |
classes | list[int] | None | Specifica un elenco di ID di classe da valutare. Utile per filtrare e concentrarsi solo su determinate classi durante la valutazione. |
rect | bool | True | Se True, utilizza l'inferenza rettangolare per i batch, riducendo il padding e potenzialmente aumentando velocità ed efficienza elaborando le immagini nel loro rapporto d'aspetto originale. Ignorato per la validazione di depth, che allunga ogni immagine a un quadrato fisso imgsz anziché applicare il padding. |
split | str | 'val' | Determina lo split del dataset da utilizzare per la validazione (val, test o train). Consente flessibilità nella scelta del segmento di dati per la valutazione delle prestazioni. |
project | str | None | Nome della directory di progetto in cui vengono salvati gli output di validazione. Aiuta a organizzare i risultati di diversi esperimenti o modelli. |
name | str | None | Nome del run di validazione. Utilizzato per creare una sottodirectory all'interno della cartella di progetto, dove vengono memorizzati i log e gli output di validazione. |
verbose | bool | True | Se True, mostra informazioni dettagliate durante il processo di validazione, incluse le metriche per classe, l'avanzamento dei batch e ulteriori informazioni di debug. |
save_txt | bool | False | Se True, salva i risultati del rilevamento in file di testo, con un file per ciascuna immagine, utile per ulteriori analisi, post-elaborazione personalizzata o integrazione con altri sistemi. |
save_conf | bool | False | Se True, include i valori di confidenza nei file di testo salvati quando save_txt è abilitato, fornendo un output più dettagliato per l'analisi e il filtraggio. |
workers | int | 8 | Numero di thread worker per il caricamento dei dati. Valori più alti possono accelerare la pre-elaborazione dei dati ma possono aumentare l'utilizzo della CPU. L'impostazione a 0 utilizza il thread principale, che può essere più stabile in alcuni ambienti. |
augment | bool | False | Abilita l'aumento in fase di test (TTA) durante la validazione, migliorando potenzialmente la precisione del rilevamento a spese della velocità di inferenza eseguendo l'inferenza su versioni trasformate dell'input. Disponibile solo per i modelli PyTorch di Ultralytics. |
agnostic_nms | bool | False | Abilita la soppressione dei massimi non agnostica rispetto alla classe, sopprimendo i box sovrapposti con punteggio inferiore indipendentemente dalla loro classe prevista. Utile per applicazioni incentrate sulle istanze. Per i modelli end-to-end (YOLO26, YOLOv10), questo impedisce solo che lo stesso rilevamento compaia con più etichette di classe (duplicati con IoU=1.0) e non esegue la soppressione basata sulla soglia IoU tra box distinti. |
single_cls | bool | False | Tratta tutte le classi come una singola classe durante la validazione. Utile per valutare le prestazioni del modello su compiti di rilevamento binario o quando le distinzioni di classe non sono importanti. |
visualize | bool | False | Visualizza le ground truth, i veri positivi, i falsi positivi e i falsi negativi per ogni immagine. Utile per il debug e l'interpretazione del modello. |
show_labels | bool | True | Mostra le etichette delle classi nelle visualizzazioni di validazione quando è visualize=True. Imposta su False per una visualizzazione più pulita di corrispondenze ed errori. |
show_conf | bool | True | Mostra i punteggi di confidenza nelle visualizzazioni di validazione quando è visualize=True. Imposta su False per una visualizzazione più pulita di corrispondenze ed errori. |
compile | bool o str | False | Abilita la compilazione del grafo PyTorch 2.x torch.compile con backend='inductor'. Accetta True → "default", False → disabilita, oppure una modalità in formato stringa come "default", "reduce-overhead", "max-autotune-no-cudagraphs". Torna alla modalità eager con un avviso se non supportato. |
channels_last | bool | False | Usa il formato di memoria channels_last (NHWC) per le convoluzioni durante la convalida, velocizzando le GPU CUDA Tensor Core senza variazioni nei risultati. Si applica solo ai modelli PyTorch nativi; viene ignorato per CPU, MPS e formati esportati come TensorRT e ONNX. |
end2end | bool | None | Sovrascrive la modalità end-to-end nei modelli YOLO che supportano l'inferenza senza NMS (YOLO26, YOLOv10). Impostarla su False consente di eseguire la validazione utilizzando la tradizionale pipeline NMS, permettendo inoltre di utilizzare l'argomento iou. |
Ognuna di queste impostazioni gioca un ruolo vitale nel processo di validazione, consentendo una valutazione personalizzabile ed efficiente dei modelli YOLO. Regolare questi parametri in base alle tue specifiche esigenze e risorse può aiutare a raggiungere il miglior equilibrio tra accuratezza e prestazioni.
Esempio di validazione con argomenti#
Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More
Gli esempi seguenti mostrano la validazione del modello YOLO con argomenti personalizzati in Python e CLI.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")Puoi anche salvare i risultati della ConfusionMatrix in diversi formati utilizzando il codice fornito.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())La validazione memorizza le metriche di precisione, richiamo (recall), F1, TP, FP e FN per immagine (alla soglia IoU 0.5) per tutte le attività
tranne la classificazione. Accedi ad esse tramite results.box.image_metrics per il rilevamento e OBB, results.seg.image_metrics
per la segmentazione e results.pose.image_metrics per la posa dopo il completamento della validazione.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Validate and access per-image metrics
results = model.val(data="coco8.yaml")
# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}
# Access metrics for a specific image
results.box.image_metrics["image1.jpg"] # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}Ogni voce in image_metrics contiene le seguenti chiavi:
| Chiave | Descrizione |
|---|---|
precision | Punteggio di precisione per l'immagine (tp / (tp + fp)). |
recall | Punteggio di richiamo (recall) per l'immagine (tp / (tp + fn)). |
f1 | Media armonica di precision e recall. |
tp | Numero di veri positivi per l'immagine. |
fp | Numero di falsi positivi per l'immagine. |
fn | Numero di falsi negativi per l'immagine. |
Questa funzionalità è disponibile per le attività di rilevamento, segmentazione, pose e OBB.
| Metodo | Tipo di ritorno | Descrizione |
|---|---|---|
summary() | List[Dict[str, Any]] | Converte i risultati della validazione in un dizionario riassuntivo. |
to_df() | DataFrame | Restituisce i risultati della validazione come un Polars DataFrame strutturato. |
to_csv() | str | Esporta i risultati della validazione in formato CSV e restituisce la stringa CSV. |
to_json() | str | Esporta i risultati della validazione in formato JSON e restituisce la stringa JSON. |
Per maggiori dettagli consulta la documentazione della classe DataExportMixin.
Cosa succede dopo#
Soddisfatto delle metriche? Esporta il modello in un formato di distribuzione. Se l'accuratezza non è ottimale, torna indietro e riaddestra con diversi iperparametri o più dati di addestramento.
FAQ#
Per validare il tuo modello YOLO26, puoi utilizzare la modalità Val fornita da Ultralytics. Ad esempio, utilizzando l'API Python, puoi caricare un modello ed eseguire la validazione con:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # Validate the model metrics = model.val() print(metrics.box.map) # map50-95In alternativa, puoi utilizzare l'interfaccia a riga di comando (CLI):
yolo val model=yolo26n.ptPer un'ulteriore personalizzazione, puoi regolare vari argomenti come
imgsz,batcheconfsia in modalità Python che CLI. Controlla la sezione Argomenti per la validazione del modello YOLO per l'elenco completo dei parametri.La validazione del modello YOLO26 fornisce diverse metriche chiave per valutare le prestazioni del modello. Queste includono:
- mAP50 (mean Average Precision alla soglia IoU 0.5)
- mAP75 (mean Average Precision alla soglia IoU 0.75)
- mAP50-95 (mean Average Precision su molteplici soglie IoU da 0.5 a 0.95)
Utilizzando l'API Python, puoi accedere a queste metriche come segue:
metrics = model.val() # assumes `model` has been loaded print(metrics.box.map) # mAP50-95 print(metrics.box.map50) # mAP50 print(metrics.box.map75) # mAP75 print(metrics.box.maps) # list of mAP50-95 for each category print(metrics.box.image_metrics) # per-image metrics dictionary with precision, recall, F1, TP, FP, and FNPer una valutazione completa delle prestazioni, è fondamentale esaminare tutte queste metriche. Per maggiori dettagli, fai riferimento alla sezione Caratteristiche principali della modalità Val.
Utilizzare Ultralytics YOLO per la validazione offre diversi vantaggi:
- Precisione: YOLO26 offre metriche di prestazioni accurate tra cui mAP50, mAP75 e mAP50-95.
- Convenienza: I modelli ricordano le loro impostazioni di addestramento, rendendo la validazione semplice.
- Flessibilità: Puoi validare rispetto agli stessi dataset e dimensioni dell'immagine o altri differenti.
- Ottimizzazione degli iperparametri: Le metriche di validazione aiutano a perfezionare i modelli per prestazioni migliori.
Questi vantaggi assicurano che i tuoi modelli siano valutati a fondo e possano essere ottimizzati per risultati superiori. Scopri di più su questi vantaggi nella sezione Perché validare con Ultralytics YOLO.
Sì, puoi validare il tuo modello YOLO26 utilizzando un custom dataset. Specifica l'argomento
datacon il percorso al tuo file YAML del dataset, che dovrebbe includere il percorso ai validation data. La classificazione richiede invece una directory del dataset o il nome di un dataset integrato (ad es.imagenet10).NotaLa validazione viene eseguita utilizzando i nomi delle classi del modello stesso, che puoi visualizzare usando
model.namese che potrebbero essere diversi da quelli definiti dal dataset stesso.Esempio in Python:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # Validate with a custom dataset metrics = model.val(data="path/to/your/custom_dataset.yaml") print(metrics.box.map) # map50-95Esempio utilizzando CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlPer opzioni più personalizzabili durante la validazione, consulta la sezione Esempio di validazione con argomenti.
Per salvare i risultati della validazione in un file JSON, puoi impostare l'argomento
save_jsonsuTruedurante l'esecuzione della validazione. Questo può essere fatto sia nell'API Python che nella CLI.Esempio in Python:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # Save validation results to JSON metrics = model.val(save_json=True)Esempio utilizzando CLI:
yolo val model=yolo26n.pt save_json=TrueQuesta funzionalità è particolarmente utile per ulteriori analisi o integrazione con altri strumenti. Controlla la sezione Argomenti per la validazione del modello YOLO per maggiori dettagli.