Validazione dei modelli con Ultralytics YOLO#
Introduzione#
La validazione è un passaggio fondamentale nella pipeline di machine learning, che ti consente di valutare la qualità dei modelli addestrati. La modalità Val di Ultralytics YOLO26 offre una solida suite di strumenti e metriche per valutare le prestazioni dei tuoi modelli di rilevamento degli oggetti. Questa guida è una risorsa completa per capire come usare efficacemente la modalità Val e assicurarti che i tuoi modelli siano accurati e affidabili.
Consulta la anteprima di YOLO27 non rilasciata per i risultati preliminari di convalida.
Watch: Ultralytics Modes Tutorial: Validation
Perché usare Ultralytics YOLO per la validazione?#
Ecco perché usare la modalità Val di YOLO26 è vantaggioso:
- Precisione: ottieni metriche accurate come mAP50, mAP75 e mAP50-95 per valutare in modo completo il tuo modello.
- Praticità: utilizza le funzionalità integrate che ricordano le impostazioni di addestramento, semplificando il processo di validazione.
- Flessibilità: valida il tuo modello con gli stessi dataset o con dataset diversi e con dimensioni delle immagini differenti.
- Ottimizzazione degli iperparametri: usa le metriche di validazione per ottimizzare il tuo modello e migliorarne le prestazioni.
Funzionalità principali della modalità Val#
Queste sono le funzionalità principali offerte dalla modalità Val di YOLO26:
- Impostazioni automatizzate: i modelli ricordano le proprie configurazioni di addestramento, rendendo semplice la validazione.
- Supporto per più metriche: valuta il tuo modello sulla base di una serie di metriche di accuratezza.
- CLI e API Python: scegli tra l'interfaccia della riga di comando o l'API Python in base alle tue preferenze per la validazione.
- Compatibilità dei dati: funziona perfettamente sia con i dataset usati durante l'addestramento sia con dataset personalizzati.
- I modelli YOLO26 ricordano automaticamente le impostazioni di addestramento, quindi puoi validare facilmente un modello con la stessa dimensione delle immagini e sul dataset originale usando semplicemente
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 conserva i propri data e argomenti come attributi del modello. Consulta la sezione Argomenti qui sotto per l'elenco completo degli argomenti di validazione.
Su Windows, quando avvii la validazione come script, potresti ricevere un RuntimeError. Aggiungi un blocco if __name__ == "__main__": prima del codice di validazione per risolvere il problema.
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 dei modelli YOLO#
Durante la validazione dei modelli YOLO, puoi ottimizzare diversi argomenti per migliorare il processo di valutazione. Questi argomenti controllano aspetti come la dimensione delle immagini di input, l'elaborazione a batch e le soglie delle prestazioni. Di seguito trovi una descrizione dettagliata di ciascun argomento, per aiutarti a personalizzare efficacemente le impostazioni di validazione.
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
data | str | None | Specifica il percorso al file YAML del dataset (ad esempio, coco8.yaml), che deve includere il percorso ai dati di validazione. Per la classificazione è invece richiesta una directory del dataset o il nome di un dataset integrato (ad esempio, imagenet10). |
imgsz | int | 640 | Definisce la dimensione delle immagini di input. Tutte le immagini vengono ridimensionate a questa dimensione prima dell'elaborazione. Dimensioni maggiori possono migliorare l'accuratezza per gli oggetti piccoli, ma aumentano 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 questo valore 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. Sui dataset di rilevamento valuta anche le previsioni con faster-coco-eval e riporta l'mAP per oggetti piccoli, medi e grandi, registrata durante l'addestramento come metrics/mAP_small(B), metrics/mAP_medium(B) e metrics/mAP_large(B) in results.csv. |
conf | float | 0.001 | Imposta la soglia minima di confidenza per i rilevamenti. Valori inferiori aumentano il richiamo, ma possono introdurre più falsi positivi. Le curve precisione-richiamo usano per impostazione predefinita 0.001; le matrici di confusione dei rilevamenti usano un valore esplicito conf oppure 0.25 quando viene omesso. La precisione e il richiamo riepilogativi usano la confidenza del valore F1 massimo, quindi possono differire dai valori derivati da confusion_matrix.png. Il valore predefinito per la validazione OBB è 0.01 per ridurre l'utilizzo della memoria. |
iou | float | 0.7 | Imposta la soglia di Intersezione sull'unione per la Soppressione non massima. Controlla l'eliminazione dei rilevamenti duplicati. |
max_det | int | 300 | Limita il numero massimo di rilevamenti per immagine. Per detect, segment, pose e OBB, se lasciato a 300 viene aumentato al conteggio di oggetti etichettati più alto nello split convalidato quando un'immagine lo supera, con un avviso; qualsiasi altro valore viene mantenuto, con l'avviso che il richiamo potrebbe essere limitato quando un'immagine lo supera. |
quantize | int o str | None | Precisione di validazione: 16/"fp16" e 32/"fp32"/non impostato selezionano il calcolo FP16 o FP32 per i modelli PyTorch e TorchScript; gli altri formati calcolano alla precisione selezionata dal loro artefatto e runtime. A 16 OpenVINO esegue comunque l'arrotondamento a FP16 dell'input sul client e lo riporta a FP32, senza modificare la precisione in cui calcola il runtime. 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 è impostato su None, seleziona automaticamente il miglior dispositivo disponibile. Puoi specificare più dispositivi CUDA separandoli con virgole. |
dnn | bool | False | Se True, usa il modulo DNN di OpenCV per l'inferenza dei modelli ONNX, offrendo un'alternativa ai metodi di inferenza di PyTorch. |
plots | bool | True | Quando è impostato su True, genera e salva grafici delle predizioni rispetto ai valori reali, matrici di confusione e curve PR per la valutazione visiva delle prestazioni del modello. |
classes | list[int] | None | Specifica un elenco di ID delle classi da valutare. È utile per filtrare le classi e concentrarsi solo su determinate classi durante la valutazione. |
rect | bool | True | Se True, usa l'inferenza rettangolare per l'elaborazione a batch, riducendo il padding e aumentando potenzialmente velocità ed efficienza grazie all'elaborazione delle immagini nel loro rapporto d'aspetto originale. Viene ignorato per la validazione depth, che adatta ogni immagine a un quadrato fisso imgsz invece di applicare il padding. |
split | str | 'val' | Determina la suddivisione del dataset da usare per la validazione (val, test o train). Offre flessibilità nella scelta della porzione di dati da usare per la valutazione delle prestazioni. |
fraction | float, int o list | 1.0 | Sottoinsieme dello split convalidato. Con un elenco [train, val, test], si applica la voce corrispondente a split (1 = split completo, interi superiori a 1 = conteggio delle immagini; le voci omesse sono complete). Uno scalare si applica solo con split=train; val e test utilizzano quindi lo split completo. |
project | str | None | Nome della directory del progetto in cui vengono salvati gli output della validazione. Aiuta a organizzare i risultati di esperimenti o modelli diversi. |
name | str | None | Nome dell'esecuzione di validazione. Viene usato per creare una sottodirectory nella cartella del progetto, in cui vengono archiviati i log e gli output della 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 dei rilevamenti in file di testo, con un file per 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 output più dettagliati per l'analisi e il filtraggio. |
workers | int | 8 | Numero di thread worker per il caricamento dei dati. Valori più alti possono velocizzare la pre-elaborazione dei dati, ma possono aumentare l'utilizzo della CPU. Impostando 0 viene usato il thread principale, che può essere più stabile in alcuni ambienti. |
augment | bool | False | Abilita l'aumento dei dati al momento del test (TTA) durante la validazione, migliorando potenzialmente l'accuratezza dei rilevamenti a scapito della velocità di inferenza, eseguendo l'inferenza su versioni trasformate dell'input. Disponibile solo per i modelli Ultralytics PyTorch. |
agnostic_nms | bool | False | Abilita la soppressione non massimale agnostica rispetto alle classi, sopprimendo i box sovrapposti con punteggio inferiore indipendentemente dalla loro classe prevista. Utile per applicazioni incentrate sulle istanze. Con l'inferenza senza NMS (nms=False su YOLO26 o YOLOv10), questo impedisce solo che lo stesso rilevamento appaia 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 un'unica classe durante la validazione. È utile per valutare le prestazioni del modello in attività di rilevamento binario o quando le distinzioni tra classi non sono importanti. |
visualize | bool | False | Visualizza i valori reali, 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 della validazione quando visualize=True. Imposta False per una visualizzazione più pulita delle corrispondenze e degli errori. |
show_conf | bool | True | Mostra i punteggi di confidenza nelle visualizzazioni della validazione quando visualize=True. Imposta False per una visualizzazione più pulita delle corrispondenze e degli errori. |
compile | bool o str | False | Abilita la compilazione del grafo torch.compile di PyTorch 2.x con backend='inductor'. Accetta True → "default", False → disabilita, oppure una modalità stringa come "default", "reduce-overhead", "max-autotune-no-cudagraphs". Se non è supportata, torna alla modalità eager con un avviso. |
channels_last | bool | None | Usa il formato di memoria channels_last (NHWC) per la validazione PyTorch nativa. None lo abilita automaticamente su CPU x86 Linux e Windows con oneDNN abilitato e PyTorch 1.13 o versioni successive, False lo disabilita e True lo richiede sui dispositivi CPU x86 o CUDA supportati. ARM64, MPS, le versioni precedenti di PyTorch, le CPU senza oneDNN e i formati esportati rimangono invariati; la validazione durante l'addestramento mantiene il layout del modello di addestramento. |
nms | bool, facoltativo | None | Esegue l'inferenza uno-a-molti con NMS per impostazione predefinita (None o True). Imposta False per utilizzare la testa uno-a-uno senza NMS quando disponibile. Consulta la guida al rilevamento end-to-end per i dettagli. |
Ognuna di queste impostazioni svolge un ruolo fondamentale nel processo di validazione, consentendo una valutazione personalizzabile ed efficiente dei modelli YOLO. Regolare questi parametri in base alle tue esigenze e alle risorse disponibili può aiutarti a ottenere 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 dei modelli 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 matrice di confusione in diversi formati usando 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, F1, TP, FP e FN per immagine (alla soglia IoU 0.5) per tutte le attività
tranne la classificazione. Puoi accedervi 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 per l'immagine (tp / (tp + fn)). |
f1 | Media armonica di precisione e richiamo. |
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, posa e OBB.
L'oggetto delle metriche restituito espone anche funzioni di supporto per l'esportazione destinate ad analisi successive:
| Metodo | Tipo restituito | Descrizione |
|---|---|---|
summary() | List[Dict[str, Any]] | Converte i risultati della validazione in un dizionario riepilogativo. |
to_df() | DataFrame | Restituisce i risultati della validazione come DataFrame Polars 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.
E adesso?#
Soddisfatto delle metriche? Esporta il modello in un formato per la distribuzione. Se l'accuratezza non è soddisfacente, torna indietro e riaddestra il modello con iperparametri diversi o con più dati di addestramento.
FAQ#
Per validare il tuo modello YOLO26, puoi usare la modalità Val fornita da Ultralytics. Ad esempio, usando 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 usare l'interfaccia della riga di comando (CLI):
yolo val model=yolo26n.ptPer una personalizzazione ulteriore, puoi modificare vari argomenti come
imgsz,batcheconfsia in modalità Python sia CLI. Consulta la sezione Argomenti per la validazione dei modelli YOLO per l'elenco completo dei parametri.La validazione del modello YOLO26 fornisce diverse metriche chiave per valutare le prestazioni del modello. Tra queste:
- mAP50 (precisione media alla soglia IoU 0.5)
- mAP75 (precisione media alla soglia IoU 0.75)
- mAP50-95 (precisione media su più soglie IoU da 0.5 a 0.95)
Usando 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, consulta le Funzionalità principali della modalità Val.
Usare Ultralytics YOLO per la validazione offre diversi vantaggi:
- Precisione: YOLO26 offre metriche accurate delle prestazioni, tra cui mAP50, mAP75 e mAP50-95.
- Praticità: i modelli ricordano le impostazioni di addestramento, rendendo la convalida semplice.
- Flessibilità: puoi eseguire la convalida sugli stessi dataset o su dataset diversi e con dimensioni delle immagini diverse.
- Ottimizzazione degli iperparametri: le metriche di convalida aiutano a perfezionare i modelli per ottenere prestazioni migliori.
Questi vantaggi garantiscono che i tuoi modelli vengano valutati approfonditamente e possano essere ottimizzati per ottenere risultati superiori. Scopri di più su questi vantaggi nella sezione Perché eseguire la convalida con Ultralytics YOLO.
Sì, puoi convalidare il tuo modello YOLO26 utilizzando un dataset personalizzato. Specifica l'argomento
datacon il percorso del file YAML del tuo dataset, che deve includere il percorso ai dati di convalida. Per la classificazione, invece, devi specificare una directory del dataset o il nome di un dataset integrato (ad esempio,imagenet10).NotaLa convalida viene eseguita utilizzando i nomi delle classi propri del modello, che puoi visualizzare utilizzando
model.namese che possono 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 la CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlPer ulteriori opzioni personalizzabili durante la convalida, consulta la sezione Esempio di convalida con argomenti.
Per salvare i risultati della convalida in un file JSON, puoi impostare l'argomento
save_jsonsuTruedurante l'esecuzione della convalida. Puoi farlo sia tramite l'API Python sia tramite la 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 la CLI:
yolo val model=yolo26n.pt save_json=TrueSui dataset di rilevamento,
save_json=Trueriporta anche l'mAP per oggetti piccoli, medi e grandi tramitefaster-coco-eval. Consulta gli Arguments for YOLO Model Validation per maggiori dettagli.