Convalida dei modelli con Ultralytics YOLO#
Introduzione#
La convalida è una fase fondamentale della pipeline di machine learning, che ti consente di valutare la qualità dei modelli addestrati. La modalità Val di Ultralytics YOLO26 offre una serie completa di strumenti e metriche per valutare le prestazioni dei modelli di rilevamento di oggetti. Questa guida è una risorsa completa per capire come usare efficacemente la modalità Val e assicurarti che i tuoi modelli siano precisi e affidabili.
Consulta l'anteprima non ancora rilasciata di YOLO27 per i risultati preliminari della convalida.
Guarda: Tutorial sulle modalità Ultralytics: validazione
Perché convalidare con Ultralytics YOLO?#
Ecco perché usare la modalità Val di YOLO26 è vantaggioso:
- Precisione: ottieni metriche accurate come mAP50, mAP75 e mAP50-95 per valutare il tuo modello in modo completo.
- Praticità: sfrutta le funzionalità integrate che memorizzano le impostazioni di addestramento e semplificano il processo di convalida.
- Flessibilità: convalida il tuo modello con gli stessi dataset o con dataset diversi e a dimensioni delle immagini differenti.
- Ottimizzazione degli iperparametri: usa le metriche di convalida per perfezionare il tuo modello e migliorarne le prestazioni.
Funzionalità principali della modalità Val#
Ecco le funzionalità più importanti offerte dalla modalità Val di YOLO26:
- Impostazioni automatizzate: i modelli memorizzano le configurazioni di addestramento per semplificare la convalida.
- Supporto di più metriche: valuta il tuo modello in base a una serie di metriche di accuratezza.
- CLI e API Python: scegli se convalidare tramite interfaccia della riga di comando o API Python, in base alle tue preferenze.
- Compatibilità dei dati: funziona senza problemi sia con i dataset usati durante l'addestramento sia con dataset personalizzati.
- I modelli YOLO26 memorizzano automaticamente le impostazioni di addestramento, quindi
yolo val model=path/to/best.ptoYOLO("path/to/best.pt").val()convalida alla dimensione delle immagini di addestramento sul dataset originale. I pesi ufficiali usano il dataset predefinito per l'attività se necessario; passadataper sostituirlo.
Esempi d'uso#
Convalida l'accuratezza di un modello YOLO26n addestrato. Non servono argomenti, perché model conserva data e gli argomenti di addestramento come attributi del modello: path/to/best.pt esegue la convalida sul dataset usato per l'addestramento. I pesi ufficiali registrano il percorso di un dataset di addestramento che non esiste sul tuo computer, quindi, se necessario, usano il valore predefinito coco8.yaml per l'attività e mostrano un avviso. Passa data per convalidare su un altro dataset. Consulta la sezione Argomenti qui sotto per l'elenco completo degli argomenti di convalida.
In Windows, quando avvii la convalida come script potresti ricevere un RuntimeError. Per risolvere il problema, aggiungi un blocco if __name__ == "__main__": prima del codice di convalida.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n.pt") # carica un modello ufficiale
model = YOLO("path/to/best.pt") # carica un modello personalizzato
# Convalida il modello
metrics = model.val() # non servono argomenti, il dataset e le impostazioni vengono ricordati
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # un elenco contenente mAP50-95 per ogni categoria
metrics.box.image_metrics # dizionario con le metriche per immagine: precisione, richiamo, F1, TP, FP e FNArgomenti per la convalida dei modelli YOLO#
Quando convalidi i modelli YOLO, puoi perfezionare diversi argomenti per ottimizzare il processo di valutazione. Questi argomenti controllano aspetti quali la dimensione delle immagini in ingresso, l'elaborazione dei batch e le soglie di prestazione. Di seguito trovi una descrizione dettagliata di ogni argomento, per aiutarti a personalizzare efficacemente le impostazioni di convalida.
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
data | str | None | Specifica il percorso del file YAML del dataset (ad es. coco8.yaml), che deve includere il percorso ai dati di validazione. Per la classificazione, invece, accetta una directory del dataset o il nome di un dataset integrato (ad es. imagenet10). |
imgsz | int | 640 | Definisce le dimensioni delle immagini di input. Tutte le immagini vengono ridimensionate a queste dimensioni prima dell'elaborazione. Dimensioni maggiori possono migliorare l'accuratezza sugli oggetti piccoli, ma aumentano il tempo di calcolo. |
batch | int | 16 | Imposta il numero di immagini per batch. Valori maggiori sfruttano in modo più efficiente la memoria GPU, ma richiedono più VRAM. Regola il valore in base alle risorse hardware disponibili. |
save_json | bool | False | Se True, salva i risultati in un file JSON per ulteriori analisi, l'integrazione con altri strumenti o l'invio a server di valutazione come COCO. Nei dataset di rilevamento valuta anche le predizioni con faster-coco-eval e riporta la 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, la mAP e le matrici di confusione del rilevamento usano questo valore; un valore conf più alto, come 0.25, produce una matrice più simile all'output delle predizioni, ma può ridurre la mAP. La precisione e il richiamo riepilogativi usano la confidenza con F1 massimo, quindi potrebbero differire dai valori ricavati da confusion_matrix.png. Per la validazione OBB, il valore predefinito è 0.01 per ridurre l'uso di memoria. |
iou | float | 0.7 | Imposta la soglia di Intersection over Union 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 il valore è 300 viene aumentato fino al numero più alto di oggetti etichettati nello split convalidato quando un'immagine lo supera, con un avviso; qualsiasi altro valore viene mantenuto, con un 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 usano la precisione selezionata dal relativo artefatto e runtime. Con 16, OpenVINO continua ad arrotondare l'input a FP16 sul client e a riconvertirlo in FP32, senza modificare la precisione usata dal runtime. La quantizzazione INT8/PTQ si configura durante l'esportazione, quindi si usa 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.). Se None, seleziona automaticamente il miglior dispositivo disponibile. È possibile 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 PyTorch. |
plots | bool | True | Quando è impostato su True, genera e salva grafici che confrontano le predizioni con le annotazioni reali, 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 le classi e concentrarsi solo su alcune durante la valutazione. |
rect | bool | True | Se True, usa l'inferenza rettangolare per l'elaborazione in batch, riducendo il padding e aumentando potenzialmente velocità ed efficienza elaborando le immagini con le proporzioni originali. Ignorato per la validazione depth, che adatta ogni immagine a un quadrato fisso di imgsz invece di applicare il padding. |
split | str | 'val' | Determina lo split del dataset da usare per la validazione (val, test o train). Offre flessibilità nella scelta della porzione di dati 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, numeri interi superiori a 1 = numero di immagini; le voci omesse indicano lo split completo). Un valore scalare si applica solo con split=train; val e test usano quindi lo split completo. |
project | str | None | Nome della directory del progetto in cui vengono salvati i risultati della validazione. Aiuta a organizzare i risultati di esperimenti o modelli diversi. |
name | str | None | Nome dell'esecuzione di validazione. Usato per creare una sottodirectory nella cartella del progetto, in cui vengono archiviati i log e i risultati della validazione. |
verbose | bool | True | Se True, mostra informazioni dettagliate durante la 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, uno per immagine; utile per ulteriori analisi, post-elaborazioni personalizzate o integrazioni con altri sistemi. |
save_conf | bool | False | Se True, include i valori di confidenza nei file di testo salvati quando è abilitato save_txt, fornendo risultati più dettagliati per l'analisi e il filtraggio. |
workers | int | 8 | Numero di thread worker per il caricamento dei dati. Valori maggiori possono velocizzare la pre-elaborazione dei dati, ma aumentare l'uso della CPU. Impostando il valore su 0 si usa il thread principale, una scelta che può risultare più stabile in alcuni ambienti. |
augment | bool | False | Abilita l'aumento dei dati al test (TTA) durante la validazione, migliorando potenzialmente l'accuratezza del rilevamento 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 massima indipendente dalla classe, sopprimendo i riquadri sovrapposti con punteggi inferiori indipendentemente dalla classe predetta. Utile per le applicazioni incentrate sulle istanze. Con l'inferenza senza NMS (nms=False su YOLO26 o YOLOv10), questa opzione impedisce solo che lo stesso rilevamento compaia con più etichette di classe (duplicati con IoU=1.0) e non applica la soppressione basata sulla soglia IoU tra riquadri distinti. |
single_cls | bool | False | Considera 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 le annotazioni 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 di validazione quando visualize=True. Imposta False per una visualizzazione più chiara delle corrispondenze e degli errori. |
show_conf | bool | True | Mostra i punteggi di confidenza nelle visualizzazioni di validazione quando visualize=True. Imposta False per una visualizzazione più chiara 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 → disattivazione oppure una modalità stringa come "default", "reduce-overhead", "max-autotune-no-cudagraphs". Se non è supportata, ripiega sulla 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 e PyTorch 1.13 o versioni successive; False lo disabilita e True ne richiede l'uso sui dispositivi CPU x86 o CUDA supportati. ARM64, MPS, le versioni precedenti di PyTorch, le CPU senza oneDNN e i formati esportati restano invariati; durante l'addestramento, la validazione mantiene il layout del modello di training. |
nms | bool, facoltativo | None | Esegue per impostazione predefinita un'inferenza one-to-many con NMS (None o True). Imposta False per usare la testa one-to-one senza NMS, se disponibile. Per i dettagli, consulta la guida al rilevamento end-to-end. |
Ognuna di queste impostazioni svolge un ruolo fondamentale nel processo di convalida e permette di valutare i modelli YOLO in modo personalizzabile ed efficiente. Modificare questi parametri in base alle tue esigenze e alle risorse disponibili può aiutarti a raggiungere il miglior equilibrio tra accuratezza e prestazioni.
Esempio di convalida con argomenti#
Guarda: Come esportare i risultati della validazione del modello in CSV, JSON, SQL, DataFrame Polars e altro
Gli esempi seguenti mostrano come convalidare un modello YOLO con argomenti personalizzati in Python e tramite CLI.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n.pt")
# Personalizza le impostazioni di convalida
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")Puoi anche salvare i risultati di ConfusionMatrix 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 convalida memorizza le metriche per immagine di precisione, richiamo, F1, TP, FP e FN (con soglia IoU pari a 0.5) per tutte le attività, tranne la classificazione. Al termine della convalida, 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.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n.pt")
# Convalida e accedi alle metriche per immagine
results = model.val(data="coco8.yaml")
# image_metrics è un dizionario con i nomi dei file immagine come chiavi
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}
# Accedi alle metriche di un'immagine specifica
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 dell'immagine (tp / (tp + fp)). |
recall | Punteggio di richiamo dell'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 fornisce anche metodi di esportazione per le analisi successive:
| Metodo | Tipo restituito | Descrizione |
|---|---|---|
summary() | List[Dict[str, Any]] | Converte i risultati della convalida in un dizionario riepilogativo. |
to_df() | DataFrame | Restituisce i risultati della convalida come DataFrame strutturato di Polars. |
to_csv() | str | Esporta i risultati della convalida in formato CSV e restituisce la stringa CSV. |
to_json() | str | Esporta i risultati della convalida 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 ripeti l'addestramento con iperparametri diversi o con più dati di addestramento.
Domande frequenti#
Per convalidare il tuo modello YOLO26, puoi usare la modalità Val fornita da Ultralytics. Ad esempio, con l'API Python puoi caricare un modello ed eseguire la convalida così:
from ultralytics import YOLO # Carica un modello model = YOLO("yolo26n.pt") # Convalida il modello metrics = model.val() print(metrics.box.map) # map50-95In alternativa, puoi usare l'interfaccia della riga di comando (CLI):
yolo detect val model=yolo26n.pt data=coco8.yamlPer personalizzare ulteriormente la convalida, puoi modificare diversi argomenti, come
imgsz,batcheconf, sia in modalità Python sia tramite CLI. Consulta la sezione Argomenti per la convalida dei modelli YOLO per l'elenco completo dei parametri.La convalida dei modelli YOLO26 fornisce diverse metriche chiave per valutare le prestazioni del modello, tra cui:
- mAP50 (precisione media a una soglia IoU di 0.5)
- mAP75 (precisione media a una soglia IoU di 0.75)
- mAP50-95 (precisione media su più soglie IoU, da 0.5 a 0.95)
Con l'API Python puoi accedere a queste metriche nel modo seguente:
metrics = model.val() # presuppone che `model` sia stato caricato print(metrics.box.map) # mAP50-95 print(metrics.box.map50) # mAP50 print(metrics.box.map75) # mAP75 print(metrics.box.maps) # elenco di mAP50-95 per ogni categoria print(metrics.box.image_metrics) # dizionario con le metriche per immagine: precisione, richiamo, F1, TP, FP e FNPer una valutazione completa delle prestazioni, è fondamentale esaminare tutte queste metriche. Per maggiori dettagli, consulta la sezione Funzionalità principali della modalità Val.
Usare Ultralytics YOLO per la convalida offre diversi vantaggi:
- Precisione: YOLO26 fornisce metriche accurate delle prestazioni, tra cui mAP50, mAP75 e mAP50-95.
- Praticità: i modelli ricordano le impostazioni di addestramento, rendendo semplice la convalida.
- Flessibilità: puoi eseguire la convalida sugli stessi dataset o su dataset diversi e con dimensioni delle immagini differenti.
- Ottimizzazione degli iperparametri: le metriche di convalida aiutano a perfezionare i modelli per migliorarne le prestazioni.
Questi vantaggi garantiscono una valutazione approfondita dei tuoi modelli e consentono di ottimizzarli per ottenere risultati migliori. Scopri di più su questi vantaggi nella sezione Perché convalidare con Ultralytics YOLO.
Sì, puoi convalidare il tuo modello YOLO26 usando un dataset personalizzato. Specifica l'argomento
datacon il percorso al file YAML del dataset, che deve includere il percorso ai dati di convalida. Per la classificazione, invece, occorre specificare una directory del dataset o il nome di un dataset integrato (ad es.imagenet10).NotaLa convalida viene eseguita usando i nomi delle classi del modello, che puoi visualizzare con
model.namese che potrebbero essere diversi da quelli definiti nel dataset.Esempio in Python:
from ultralytics import YOLO # Carica un modello model = YOLO("yolo26n.pt") # Convalida con un dataset personalizzato metrics = model.val(data="path/to/your/custom_dataset.yaml") print(metrics.box.map) # map50-95Esempio tramite CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlPer altre opzioni di personalizzazione durante la convalida, consulta la sezione Esempio di convalida con argomenti.
Per salvare i risultati della convalida in un file JSON, imposta l'argomento
save_jsonsuTruequando esegui la convalida. Puoi farlo sia con l'API Python sia tramite CLI.Esempio in Python:
from ultralytics import YOLO # Carica un modello model = YOLO("yolo26n.pt") # Salva i risultati della convalida in JSON metrics = model.val(save_json=True)Esempio tramite CLI:
yolo val model=yolo26n.pt save_json=TrueNei dataset di rilevamento,
save_json=Trueriporta anche la mAP per oggetti piccoli, medi e grandi tramitefaster-coco-eval. Consulta Argomenti per la convalida dei modelli YOLO per maggiori dettagli.