Panoramica dei Dataset di Object Detection
L'addestramento di un modello di object detection robusto e accurato richiede un dataset completo. Questa guida introduce vari formati di dataset compatibili con il modello Ultralytics YOLO e fornisce approfondimenti sulla loro struttura, utilizzo e su come convertire tra diversi formati.
Formati di dataset supportati
Formato Ultralytics YOLO
Il formato Ultralytics YOLO è un formato di configurazione del dataset che consente di definire la directory root del dataset, i percorsi relativi alle directory delle immagini di addestramento/convalida/test o *.txt
file contenenti i percorsi delle immagini e un dizionario dei nomi delle classi. Ecco un esempio:
ultralytics/cfg/datasets/coco8.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8 dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco8/
# Example usage: yolo train data=coco8.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8 ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8.zip
Le etichette per questo formato devono essere esportate in formato YOLO con un *.txt
file per immagine. Se non ci sono oggetti in un'immagine, nessun *.txt
Il file è obbligatorio. Il *.txt
Il file deve essere formattato con una riga per oggetto in class x_center y_center width height
formato. Le coordinate della casella devono essere in xywh normalizzato formato (da 0 a 1). Se le tue caselle sono in pixel, dovresti dividere x_center
e width
per la larghezza dell'immagine e y_center
e height
per altezza dell'immagine. I numeri di classe devono essere indicizzati a zero (iniziare con 0).
Il file di etichetta corrispondente all'immagine sopra contiene 2 persone (classe 0
) e una cravatta (classe 27
):
Quando si utilizza il formato Ultralytics YOLO, organizza le immagini e le etichette di addestramento e convalida come mostrato nell'esempio del dataset COCO8 qui sotto.
Esempio di utilizzo
Ecco come puoi utilizzare i dataset in formato YOLO per addestrare il tuo modello:
Esempio
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640
Formato NDJSON Ultralytics
Il formato NDJSON (Newline Delimited JSON) fornisce un modo alternativo per definire i dataset per i modelli Ultralytics YOLO11. Questo formato memorizza i metadati e le annotazioni del dataset in un singolo file in cui ogni riga contiene un oggetto JSON separato.
Un file di dataset NDJSON contiene:
- Record del dataset (prima riga): Contiene i metadati del dataset, inclusi il tipo di task, i nomi delle classi e le informazioni generali
- Record delle immagini (righe successive): Contiene i dati delle singole immagini, incluse le dimensioni, le annotazioni e i percorsi dei file
Esempio di NDJSON
{
"type": "dataset",
"task": "detect",
"name": "Example",
"description": "COCO NDJSON example dataset",
"url": "https://app.ultralytics.com/user/datasets/example",
"class_names": { "0": "person", "1": "bicycle", "2": "car" },
"bytes": 426342,
"version": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2025-01-01T00:00:00Z"
}
{
"type": "image",
"file": "image1.jpg",
"url": "https://www.url.com/path/to/image1.jpg",
"width": 640,
"height": 480,
"split": "train",
"annotations": {
"boxes": [
[0, 0.52481, 0.37629, 0.28394, 0.41832],
[1, 0.73526, 0.29847, 0.19275, 0.33691]
]
}
}
Formati di annotazione per task:
- Rilevamento:
"annotations": {"boxes": [[class_id, x_center, y_center, width, height], ...]}
- Segmentazione:
"annotations": {"segments": [[class_id, x1, y1, x2, y2, ...], ...]}
- Pose:
"annotations": {"pose": [[class_id, x1, y1, v1, x2, y2, v2, ...], ...]}
- OBB:
"annotations": {"obb": [[class_id, x_center, y_center, width, height, angle], ...]}
- Classificazione:
"annotations": {"classification": [class_id]}
Esempio di utilizzo
Per utilizzare un dataset NDJSON con YOLO11, è sufficiente specificare il percorso del .ndjson
file:
Esempio
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt")
# Train using NDJSON dataset
results = model.train(data="path/to/dataset.ndjson", epochs=100, imgsz=640)
# Start training with NDJSON dataset
yolo detect train data=path/to/dataset.ndjson model=yolo11n.pt epochs=100 imgsz=640
Vantaggi del formato NDJSON
- File singolo: Tutte le informazioni del dataset contenute in un unico file
- Streaming: Può elaborare grandi dataset riga per riga senza caricare tutto in memoria
- Integrazione cloud: Supporta URL di immagini remote per l'addestramento basato su cloud
- Estensibile: Facile aggiungere campi di metadati personalizzati
- Controllo della versione: Il formato a file singolo funziona bene con git e i sistemi di controllo della versione
Dataset supportati
Di seguito è riportato un elenco dei set di dati supportati e una breve descrizione per ciascuno:
- Argoverse: Un set di dati contenente dati di tracciamento 3D e previsione del movimento da ambienti urbani con ricche annotazioni.
- COCO: Common Objects in Context (COCO) è un dataset su larga scala per il rilevamento di oggetti, la segmentazione e la didascalia con 80 categorie di oggetti.
- LVIS: Un set di dati su larga scala per il rilevamento di oggetti, la segmentazione e la didascalia con 1203 categorie di oggetti.
- COCO8: Un sottoinsieme più piccolo delle prime 4 immagini di COCO train e COCO val, adatto per test rapidi.
- COCO8-Grayscale: Una versione in scala di grigi di COCO8 creata convertendo RGB in scala di grigi, utile per la valutazione di modelli a singolo canale.
- COCO8-Multispectral: Una versione multispettrale a 10 canali di COCO8 creata interpolando le lunghezze d'onda RGB, utile per la valutazione di modelli spectral-aware.
- COCO128: Un sottoinsieme più piccolo delle prime 128 immagini di COCO train e COCO val, adatto per i test.
- Global Wheat 2020: Un set di dati contenente immagini di spighe di grano per il Global Wheat Challenge 2020.
- Objects365: Un set di dati di alta qualità e su larga scala per il rilevamento di oggetti con 365 categorie di oggetti e oltre 600.000 immagini annotate.
- OpenImagesV7: Un set di dati completo di Google con 1,7 milioni di immagini di addestramento e 42.000 immagini di convalida.
- SKU-110K: Un set di dati caratterizzato dal rilevamento denso di oggetti in ambienti di vendita al dettaglio con oltre 11.000 immagini e 1,7 milioni di bounding box.
- HomeObjects-3K Nuovo 🚀: Un set di dati di oggetti domestici indoor tra cui letti, sedie, TV e altro, ideale per applicazioni nell'automazione di smart home, robotica, realtà aumentata e analisi del layout delle stanze.
- VisDrone: Un set di dati contenente dati di rilevamento di oggetti e tracciamento multi-oggetto da immagini acquisite da droni con oltre 10.000 immagini e sequenze video.
- VOC: Il set di dati Pascal Visual Object Classes (VOC) per il rilevamento e la segmentazione di oggetti con 20 classi di oggetti e oltre 11.000 immagini.
- xView: Un set di dati per il rilevamento di oggetti in immagini aeree con 60 categorie di oggetti e oltre 1 milione di oggetti annotati.
- Roboflow 100: Un benchmark diversificato per il rilevamento di oggetti con 100 set di dati che coprono sette domini di immagini per una valutazione completa del modello.
- Tumore cerebrale: Un dataset per il rilevamento di tumori cerebrali che include immagini MRI o TAC con dettagli sulla presenza, la posizione e le caratteristiche del tumore.
- Fauna selvatica africana: Un dataset contenente immagini della fauna selvatica africana, tra cui bufali, elefanti, rinoceronti e zebre.
- Firma: Un dataset contenente immagini di vari documenti con firme annotate, a supporto della verifica dei documenti e della ricerca sul rilevamento delle frodi.
- Medical-pills: Un set di dati con immagini di pillole mediche, annotate per applicazioni come la garanzia della qualità farmaceutica, lo smistamento delle pillole e la conformità normativa.
Aggiunta del tuo dataset
Se possiedi un dataset e desideri utilizzarlo per addestrare modelli di rilevamento con il formato Ultralytics YOLO, assicurati che sia conforme al formato specificato sopra in "Formato Ultralytics YOLO". Converti le tue annotazioni nel formato richiesto e specifica i percorsi, il numero di classi e i nomi delle classi nel file di configurazione YAML.
Importa o converti formati di etichette
Formato Dataset COCO in Formato YOLO
È possibile convertire facilmente le etichette dal popolare formato dataset COCO al formato YOLO utilizzando il seguente frammento di codice:
Esempio
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/")
Questo strumento di conversione può essere utilizzato per convertire il dataset COCO o qualsiasi dataset in formato COCO nel formato Ultralytics YOLO. Il processo trasforma le annotazioni COCO basate su JSON nel più semplice formato YOLO basato su testo, rendendolo compatibile con i modelli Ultralytics YOLO.
Ricorda di verificare se il set di dati che desideri utilizzare è compatibile con il tuo modello e segue le convenzioni di formato necessarie. Set di dati formattati correttamente sono fondamentali per addestrare modelli di object detection di successo.
FAQ
Cos'è il formato dataset Ultralytics YOLO e come strutturarlo?
Il formato Ultralytics YOLO è una configurazione strutturata per definire i dataset nei tuoi progetti di training. Implica l'impostazione dei percorsi per le immagini di training, validazione e test e le relative etichette. Ad esempio:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8 dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco8/
# Example usage: yolo train data=coco8.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8 ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8.zip
Le etichette vengono salvate in *.txt
file con un file per immagine, formattati come class x_center y_center width height
con coordinate normalizzate. Per una guida dettagliata, consulta Esempio di dataset COCO8.
Come posso convertire un dataset COCO nel formato YOLO?
È possibile convertire un dataset COCO nel formato YOLO utilizzando gli strumenti di conversione Ultralytics. Ecco un metodo rapido:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/")
Questo codice convertirà le tue annotazioni COCO in formato YOLO, consentendo una perfetta integrazione con i modelli YOLO di Ultralytics. Per ulteriori dettagli, visita la sezione Importa o Converti Formati di Etichette.
Quali dataset sono supportati da Ultralytics YOLO per il rilevamento di oggetti?
Ultralytics YOLO supporta una vasta gamma di dataset, tra cui:
Ogni pagina del dataset fornisce informazioni dettagliate sulla struttura e sull'utilizzo, personalizzate per un addestramento YOLO11 efficiente. Esplora l'elenco completo nella sezione Dataset supportati.
Come posso iniziare ad addestrare un modello YOLO11 utilizzando il mio dataset?
Per iniziare ad addestrare un modello YOLO11, assicurati che il tuo dataset sia formattato correttamente e che i percorsi siano definiti in un file YAML. Utilizza il seguente script per iniziare l'addestramento:
Esempio
from ultralytics import YOLO
model = YOLO("yolo11n.pt") # Load a pretrained model
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)
yolo detect train data=path/to/your_dataset.yaml model=yolo11n.pt epochs=100 imgsz=640
Consulta la sezione Utilizzo per maggiori dettagli sull'utilizzo di diverse modalità, inclusi i comandi CLI.
Dove posso trovare esempi pratici di utilizzo di Ultralytics YOLO per il rilevamento di oggetti?
Ultralytics fornisce numerosi esempi e guide pratiche per l'utilizzo di YOLO11 in diverse applicazioni. Per una panoramica completa, visita il Blog di Ultralytics dove puoi trovare casi di studio, tutorial dettagliati e storie della community che mostrano il rilevamento di oggetti, la segmentazione e altro ancora con YOLO11. Per esempi specifici, consulta la sezione Utilizzo nella documentazione.