Vai al contenuto

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).

Esempio di immagine etichettata

Il file di etichetta corrispondente all'immagine sopra contiene 2 persone (classe 0) e una cravatta (classe 27):

Esempio di file di etichette

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 struttura della directory del set di dati

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:

  1. Record del dataset (prima riga): Contiene i metadati del dataset, inclusi il tipo di task, i nomi delle classi e le informazioni generali
  2. 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.



📅 Creato 1 anno fa ✏️ Aggiornato 10 giorni fa

Commenti