Scrivi un file YAML del dataset
Scrivi data.yaml per indicare a Ultralytics le cartelle e i nomi delle classi, fai in modo che i percorsi siano validi da qualsiasi posizione e verifica il tutto con yolo val.
Il file YAML del dataset è il contratto tra le tue cartelle e ogni comando Ultralytics. Se sbagli un percorso, non funziona nulla; se sbagli l'ordine delle classi, tutto funziona, ma ogni previsione avrà un nome errato senza alcun avviso.
In questa lezione scriverai data.yaml per il dataset di pillole, imparerai esattamente come Ultralytics risolve i percorsi affinché funzioni anche sul computer di un collega e lo verificherai con un comando di convalida su una riga, che fornirà anche il valore di riferimento da superare con l'addestramento.
Pratico
Scrivi il file#

I dataset su Ultralytics Platform hanno classi e suddivisioni proprie; per addestrare, si fa riferimento a essi con un URI come data=ul://username/datasets/name. Sul tuo computer, il file YAML svolge questo ruolo. Salvalo come my_dataset/data.yaml:
path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test # optional held-out split
names:
0: pill| Chiave | Obbligatorio | Significato |
|---|---|---|
path | No | Radice del dataset; train, val e test sono relativi a essa. Se omessa, si usa la cartella del file YAML |
train, val | Sì | Una cartella di immagini, un file .txt che elenca i percorsi delle immagini o un elenco di uno di questi elementi |
test | No | Immagini di test tenute da parte, valutate solo con split=test |
names | Sì | Indice della classe → nome; la lunghezza determina il numero di classi |
download | No | URL o script che scarica il dataset quando le immagini non sono presenti |
train e val indicano cartelle di immagini; le etichette si trovano sostituendo images con labels. Il file YAML coco8 è un esempio minimo funzionante, mentre il file YAML VOC ne mostra uno più ampio.
Esempio pratico: verifica il funzionamento#
La convalida con il modello preaddestrato è il modo più rapido per controllare il flusso completo. Legge tutte le immagini e le etichette, segnala i problemi e calcola le metriche:
yolo val model=yolo26n.pt data=my_dataset/data.yamlval: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
Class Images Instances Box(P R mAP50 mAP50-95)
all 23 399 0.0256 0.00251 0.001 0.0002Leggilo in ordine:
Scanning my_dataset/labels/val: la cartella effettivamente individuata da Ultralytics. Verifica che sia quella prevista.23 images, 0 backgrounds, 0 corrupt: ogni immagine di convalida ha un file di etichette valido. Gli sfondi non previsti o qualsiasi conteggio di elementi corrotti ti riportano alla lezione precedente.399istanze: i file di etichette contengono 399 pillole.- mAP50-95 pari a 0.0002: è corretto, non è un errore. COCO non include la classe delle pillole, quindi il modello preaddestrato non riesce a trovarle. Questo punteggio quasi nullo è il tuo valore di riferimento. Se le tue classi sono presenti in COCO, come persone o automobili, lo stesso comando fornisce invece un valore di riferimento significativo.
Fai in modo che i percorsi siano validi ovunque#
La maggior parte degli errori «immagini non trovate» dipende dai percorsi. Ultralytics risolve path in questo modo:
datasets_dir è un'impostazione di Ultralytics; yolo settings la stampa e la guida alle impostazioni spiega come modificarla. I dataset integrati si affidano a questa alternativa: coco8.yaml imposta path: coco8 e un URL download:, così data=coco8.yaml funziona da qualsiasi cartella.
Regole per decidere:
- Solo tu, e sempre dalla cartella del progetto? Un
pathrelativo va bene. - Compagni di team, server, CI o notebook in altre cartelle? Usa un
pathassoluto. - I dati si trovano altrove e devono essere scaricati automaticamente? Aggiungi
download:con un URL zip.
Mantieni gli indici delle classi come contratto#
L'intero all'inizio di ogni riga di etichetta è un indice in names. Ultralytics verifica l'intervallo — Label class 1 exceeds dataset class count 1 — ma non può verificarne il significato. Se il tuo strumento di etichettatura ha esportato 0: forklift, 1: person e il tuo YAML dichiara 0: person, 1: forklift, l'addestramento riesce, la mAP di validazione sembra corretta e ogni predizione riporta il nome sbagliato. Mantieni un'unica fonte di verità per l'elenco delle classi, condivisa dallo strumento di etichettatura, dallo script di conversione, dal YAML e dal codice di deployment.
Evita questi errori#
Sintomo: FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val', con una nota sulla directory di download del dataset. Causa: hai eseguito il comando da un'altra cartella, quindi path non esisteva e Ultralytics ha cercato invece in datasets_dir. Soluzione: esegui il comando dalla cartella del progetto oppure rendi assoluto path.
Scambiare o eliminare voci in names senza riassegnare le etichette cambia silenziosamente il significato di tutte le etichette. Il modello si addestra e fa previsioni sulle classi sbagliate, senza generare errori. Aggiungi le nuove classi alla fine, usando l'indice libero successivo, e non rinumerare mai quelle esistenti.
val: [images/val_day, images/val_night] unisce entrambe le cartelle in un unico set di validazione e restituisce un solo valore. Per esaminare separatamente giorno e notte — o un set di regressione selezionato insieme a un nuovo campione di produzione — mantieni un file YAML per ogni set e convalidali separatamente. Uno split test che valuti una sola volta, con split=test, è trattato in Suddividi correttamente il dataset.
Le impostazioni di addestramento, come l'aumento dei dati e la memorizzazione nella cache, sono argomenti di train, non chiavi YAML; sono tutte riportate nel riferimento della configurazione.
Mostra la soluzione
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val
names:
0: pillval: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
all 23 399 0.0256 0.00251 0.001 0.0002Da un'altra cartella, la versione relativa non ha funzionato con Dataset ... images not found perché my_dataset non esisteva lì e anche la posizione alternativa datasets_dir non conteneva una copia. Il path assoluto elimina questa ricerca. La mAP50-95 di riferimento è circa 0: il modello preaddestrato non ha una classe pillola.