libreyolo doctor

Esegue un insieme di controlli di salute su un dataset di rilevamento e segnala ciò che danneggerebbe un addestramento: file mancanti, etichette rotte, immagini corrotte, fuga tra split e sbilanciamento delle classi.

Comando
libreyolo doctor
Obbligatorio
data
Output
Un report delle segnalazioni su stdout. Esce con 1 quando vengono trovati errori

Sinossi

bash
libreyolo doctor <data.yaml> [key=value ...]

Il dataset è posizionale, e data=<path> è accettato come alternativa. Passarli entrambi con valori diversi esce con config_conflict. Tutto il resto sono coppie key=value, e funziona anche la forma POSIX, quindi imgsz=1024 e --imgsz 1024 sono lo stesso argomento.

Argomenti

ArgomentoDefaultSignificato
dataPosizionale. YAML del dataset in formato di rilevamento YOLO, ad es. coco8.yaml. Obbligatorio
imgsz640Dimensione dell'immagine di addestramento usata nei controlli basati sui pixel, come quello degli oggetti minuscoli
fastfalseSalta la decodifica delle immagini, il che elimina i controlli su corruzione, duplicati e fuga
skipId di controllo o famiglie separati da virgole da saltare, ad es. images,labels.tiny_object
onlyId di controllo o famiglie separati da virgole da eseguire in esclusiva
strictfalseAnche gli avvisi fanno fallire il codice di uscita, per i gate di CI
downloadfalseConsente il download del dataset da URL se manca. Mai script
jsonfalseOutput JSON su stdout
quietfalseSilenzia stderr
help_jsonfalseStampa lo schema del comando come JSON ed esce

Famiglie di controlli

skip e only accettano sia un id di controllo completo sia un prefisso di famiglia, quindi images seleziona tutti i controlli images.*.

FamigliaCopre
configIl file YAML del dataset in sé: names mancante, nc rispetto a names, split mancanti, path non risolvibile, nomi di classe duplicati
filesL'abbinamento tra immagini ed etichette: etichette mancanti, immagini mancanti, etichette orfane, estensioni non supportate, collisioni tra maiuscole e minuscole
labelsIl contenuto delle etichette: sintassi, righe di poligono, id di classe fuori intervallo, coordinate fuori intervallo, bounding box degeneri, oggetti minuscoli, box enormi, rapporti d'aspetto estremi, bounding box duplicati, immagini affollate, file identici
imagesI dati dei pixel: file corrotti, orientamento EXIF, modalità di colore insolite, dimensioni minuscole o estreme, immagini uniformi, duplicati esatti e approssimati
splitsFuga tra split, esatta e approssimata
balanceLa distribuzione delle classi: classi con zero o poche istanze, sbilanciamento, copertura degli split, proporzione di sfondo, asimmetria tra split

Esempi

Base
# download=true permette al coco8.yaml incluso di scaricare le sue immagini se mancano.libreyolo doctor coco8.yaml download=true
Passata veloce, senza decodifica delle immagini
libreyolo doctor coco8.yaml download=true fast=true
Gate di CI su controlli selezionati
libreyolo doctor coco8.yaml download=true strict=true json=true \  only=labels,files,config

Note

Codici di uscita

0 quando non è stato trovato nessun errore, 1 quando una segnalazione è un errore. Con strict=true, anche gli avvisi alzano il codice di uscita a 1, che è l'impostazione che vuole un gate di CI.

I problemi d'uso hanno codici propri: 2 per un id di controllo o una famiglia sconosciuti in skip o only, 3 quando il dataset non viene trovato e 3 quando il dataset non ha la forma di un dataset di rilevamento.

La selezione si risolve prima della scansione

skip e only vengono risolti contro il registro dei controlli prima che venga letto qualsiasi cosa dal disco, quindi un errore di battitura fallisce subito invece che dopo una lunga passata sulle immagini. Un selettore che non corrisponde a nulla è un errore, e il messaggio elenca le famiglie note.

Se la combinazione di skip, only e fast non lascia nessun controllo da eseguire, anche questo è un errore invece di una passata silenziosa.

Download

Il dataset non viene scaricato a meno che download=true, e vengono eseguiti solo download da URL. Uno script di download Python incorporato nello YAML di un dataset non viene mai eseguito da questo comando, qualunque sia il valore del flag.

Ambito

I controlli sono scritti per i dataset di rilevamento. Un dataset le cui etichette hanno la forma di pose, di segmentazione o di box orientati viene riconosciuto e rifiutato con data_invalid invece di essere valutato con le regole sbagliate.

Output

Il report leggibile dalle persone va su stdout, e json=true lo sostituisce con un oggetto strutturato che contiene i conteggi del riepilogo, le statistiche del dataset, tutte le segnalazioni e l'elenco dei controlli che sono stati saltati.

Correlato: libreyolo train, il comando prima del quale questo è pensato per essere eseguito.

Verificato con LibreYOLO v1.5.0.