Panoramica dei dataset per la segmentazione di istanze#
La segmentazione di istanze è un'attività di visione artificiale che consiste nell'identificare e delimitare i singoli oggetti all'interno di un'immagine. Questa guida offre una panoramica dei formati di dataset supportati da Ultralytics YOLO per le attività di segmentazione di istanze e spiega come preparare, convertire e usare questi dataset per addestrare i tuoi modelli.
Formati di dataset supportati#
Formato Ultralytics YOLO#
Il formato delle etichette del dataset usato per addestrare i modelli di segmentazione YOLO è il seguente:
- Un file di testo per immagine: a ogni immagine del dataset corrisponde un file di testo con lo stesso nome del file immagine e l'estensione ".txt".
- Una riga per oggetto: ogni riga del file di testo corrisponde a una singola istanza di oggetto nell'immagine.
- Informazioni sull'oggetto per riga: ogni riga contiene le seguenti informazioni sull'istanza dell'oggetto:
- Indice della classe dell'oggetto: un numero intero che rappresenta la classe dell'oggetto (ad es. 0 per persona, 1 per automobile e così via).
- Coordinate del poligono dell'oggetto: i punti
(x, y)che delimitano la maschera dell'oggetto, normalizzati in modo da avere valori compresi tra 0 e 1.
Il formato di una singola riga nel file del dataset di segmentazione è il seguente:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>In questo formato, <class-index> è l'indice della classe dell'oggetto e <x1> <y1> <x2> <y2> ... <xn> <yn> sono le coordinate normalizzate del poligono della maschera di segmentazione dell'oggetto (i valori sono espressi in [0, 1] rispetto alla larghezza e all'altezza dell'immagine). Le coordinate sono separate da spazi.
Ecco un esempio del formato del dataset YOLO per una singola immagine con due oggetti, composti rispettivamente da un segmento di 3 punti e da uno di 5 punti.
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- La lunghezza di ogni riga non deve essere necessariamente uguale.
- Ogni etichetta di segmentazione deve avere almeno 3 punti
(x, y):<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - Ogni oggetto deve avere un poligono. Le righe in formato di rilevamento (
<class-index> <x_center> <y_center> <width> <height>) non ne contengono, e un dataset di segmentazione con un numero diverso di riquadri e poligoni viene rifiutato con unValueErroral caricamento delle etichette.
Formato YAML del dataset#
Il framework Ultralytics usa un formato di file YAML per definire la configurazione del dataset e del modello per l'addestramento dei modelli di segmentazione. Ecco un esempio del formato YAML usato per definire un dataset di segmentazione:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← 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-seg # 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-seg.zipI campi train, val e test indicano le immagini di addestramento, convalida e test. Ognuno accetta una directory, un elenco di directory oppure un file *.txt che elenca un percorso immagine per riga (i percorsi che iniziano con ./ sono relativi al file *.txt). Un file *.txt è utile per addestrare su un sottoinsieme di una directory, saltare le immagini senza etichetta o combinare immagini da più origini in una singola suddivisione.
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames è un dizionario di nomi di classi. L'ordine dei nomi deve corrispondere all'ordine degli indici delle classi degli oggetti nei file del dataset YOLO.
Utilizzo#
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n-seg.pt") # carica un modello preaddestrato (consigliato per l'addestramento)
# Addestra il modello
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Dataset supportati#
Ultralytics YOLO supporta vari dataset per le attività di segmentazione di istanze. Ecco un elenco dei più usati. La maggior parte di questi dataset è ospitata anche su Ultralytics Platform, dove puoi esplorare immagini e annotazioni, visualizzare statistiche sui dataset e clonarli per l'addestramento nel cloud.
- Carparts-seg: un dataset specializzato nella segmentazione di parti di automobili, ideale per applicazioni automobilistiche. Include diversi veicoli con annotazioni dettagliate dei singoli componenti.
- COCO: un dataset completo per il rilevamento di oggetti, la segmentazione e la generazione di didascalie, con oltre 200.000 immagini etichettate in un'ampia gamma di categorie.
- COCO8-seg: un sottoinsieme compatto di COCO composto da 8 immagini, pensato per testare rapidamente l'addestramento di modelli di segmentazione, ideale per i controlli CI e la convalida dei flussi di lavoro nel repository
ultralytics. - COCO128-seg: un dataset più piccolo per le attività di segmentazione di istanze, contenente un sottoinsieme di 128 immagini COCO con annotazioni di segmentazione.
- Crack-seg: un dataset progettato per segmentare le crepe su varie superfici. Essenziale per la manutenzione delle infrastrutture e il controllo qualità, fornisce immagini dettagliate per addestrare modelli a identificare i punti deboli strutturali.
- Package-seg: un dataset dedicato alla segmentazione di diversi tipi e forme di imballaggi. È particolarmente utile per la logistica e l'automazione dei magazzini e contribuisce allo sviluppo di sistemi per la gestione e lo smistamento dei pacchi.
Aggiungere il tuo dataset#
Se hai un tuo dataset e vuoi usarlo per addestrare modelli di segmentazione nel formato Ultralytics YOLO, assicurati che rispetti il formato descritto sopra nella sezione "Formato Ultralytics YOLO". Converti le annotazioni nel formato richiesto e specifica nel file di configurazione YAML i percorsi, il numero di classi e i nomi delle classi. Mantieni images/ e labels/ in cartelle separate allo stesso livello, con una struttura di sottocartelle corrispondente; inserire i file .txt delle etichette nella cartella delle immagini può far sì che il modello non trovi le etichette.
Trasferire o convertire i formati delle etichette#
Formato del dataset COCO nel formato YOLO#
Puoi convertire facilmente le etichette dal diffuso formato del dataset COCO al formato YOLO usando il seguente frammento di codice:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Questo strumento di conversione può essere usato per convertire il dataset COCO o qualsiasi dataset in formato COCO nel formato Ultralytics YOLO.
Ricordati di verificare che il dataset che vuoi usare sia compatibile con il tuo modello e rispetti le convenzioni di formato necessarie. I dataset formattati correttamente sono fondamentali per addestrare modelli di segmentazione efficaci.
Annotazione automatica#
L'annotazione automatica è una funzionalità essenziale che ti permette di generare un dataset di segmentazione usando un modello di rilevamento preaddestrato. Ti consente di annotare rapidamente e con precisione un gran numero di immagini senza etichettarle manualmente, risparmiando tempo e fatica.
Generare un dataset di segmentazione usando un modello di rilevamento#
Per annotare automaticamente il tuo dataset con il framework Ultralytics, puoi usare la funzione auto_annotate come mostrato di seguito:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
data | str | obbligatorio | Percorso della directory contenente le immagini di destinazione da annotare o segmentare. |
det_model | str | 'yolo26x.pt' | Percorso del modello di rilevamento YOLO per il rilevamento iniziale degli oggetti. |
sam_model | str | 'sam_b.pt' | Percorso del modello SAM per la segmentazione (supporta i pesi di SAM, SAM 2, MobileSAM e SAM 3). |
device | str | '' | Dispositivo di calcolo (ad es. 'cuda:0', 'cpu' o '' per il rilevamento automatico del dispositivo). |
conf | float | 0.25 | Soglia di confidenza del rilevamento YOLO per filtrare i rilevamenti deboli. |
iou | float | 0.45 | Soglia IoU per la soppressione non massima, usata per filtrare i riquadri sovrapposti. |
imgsz | int | 640 | Dimensione di input per ridimensionare le immagini (arrotondata al multiplo di 32 più vicino per eccesso, se necessario). |
max_det | int | 300 | Numero massimo di rilevamenti per immagine per ottimizzare l'uso della memoria. |
classes | list[int] | None | Elenco degli indici delle classi da rilevare (ad es. [0, 1] per persona e bicicletta). |
output_dir | str | None | Directory in cui salvare le annotazioni (per impostazione predefinita: directory sorella di <data>_auto_annotate_labels). |
La funzione auto_annotate accetta il percorso delle immagini e argomenti opzionali per specificare i modelli di rilevamento preaddestrati, ad esempio YOLO26, YOLO11 o altri modelli, e i modelli di segmentazione, ad esempio SAM, SAM 2, MobileSAM o SAM 3, il dispositivo su cui eseguire i modelli e la directory di output in cui salvare i risultati annotati.
Sfruttando la potenza dei modelli preaddestrati, l'annotazione automatica può ridurre notevolmente il tempo e il lavoro necessari per creare dataset di segmentazione di alta qualità. Questa funzionalità è particolarmente utile per ricercatori e sviluppatori che lavorano con grandi raccolte di immagini, perché permette loro di concentrarsi sullo sviluppo e sulla valutazione dei modelli invece che sull'annotazione manuale.
Visualizzare le annotazioni dei dataset#
Prima di addestrare il modello, spesso è utile visualizzare le annotazioni del dataset per assicurarti che siano corrette. Ultralytics mette a disposizione una funzione di utilità per questo scopo. La funzione legge solo le etichette dei riquadri in formato di rilevamento (<class-index> <x_center> <y_center> <width> <height>), quindi non può analizzare i file di etichette con poligoni di segmentazione:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Definisci la mappa delle etichette con tutte le etichette delle classi annotate.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Percorso dell'immagine di input.
"path/to/annotations.txt", # Percorso del file di annotazione dell'immagine.
label_map,
)Questa funzione disegna i riquadri di delimitazione, assegna agli oggetti etichette con i nomi delle classi e regola il colore del testo per migliorarne la leggibilità, aiutandoti a individuare e correggere gli errori di annotazione prima dell'addestramento.
Convertire le maschere di segmentazione nel formato YOLO#
Se hai immagini di maschere in scala di grigi in cui il valore di ogni pixel è l'indice della classe + 1 (0 indica lo sfondo), puoi convertirle nel formato di segmentazione YOLO usando:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# Per dataset come COCO con 80 classi
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)Questa utilità converte le immagini delle maschere nel formato di segmentazione YOLO e le salva nella directory di output specificata.
Domande frequenti#
Ultralytics YOLO supporta diversi formati di dataset per la segmentazione di istanze; il formato principale è il formato Ultralytics YOLO. Ogni immagine del dataset deve avere un file di testo corrispondente con le informazioni sugli oggetti suddivise in più righe (una per oggetto), che riportano l'indice della classe e le coordinate normalizzate dei poligoni. Per istruzioni più dettagliate sul formato dei dataset YOLO, visita la panoramica sui dataset per la segmentazione di istanze.
Convertire le annotazioni dal formato COCO al formato YOLO è semplice con gli strumenti Ultralytics. Puoi usare la funzione
convert_cocodel moduloultralytics.data.converter:from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Questo script converte le annotazioni del tuo dataset COCO nel formato YOLO richiesto, rendendolo adatto all'addestramento dei tuoi modelli YOLO. Per maggiori dettagli, consulta Trasferire o convertire i formati delle etichette.
Per preparare un file YAML per addestrare modelli YOLO con Ultralytics, devi definire i percorsi del dataset e i nomi delle classi. Ecco un esempio di configurazione YAML:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← 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-seg # 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-seg.zipAssicurati di aggiornare i percorsi e i nomi delle classi in base al tuo dataset. Per maggiori informazioni, consulta la sezione Formato YAML del dataset.
L'annotazione automatica in Ultralytics YOLO ti permette di generare annotazioni di segmentazione per il tuo dataset usando un modello di rilevamento preaddestrato. Questo riduce notevolmente la necessità di etichettare manualmente. Puoi usare la funzione
auto_annotatenel modo seguente:from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # oppure sam_model="mobile_sam.pt"Questa funzione automatizza il processo di annotazione, rendendolo più rapido ed efficiente. Per maggiori dettagli, consulta la documentazione di riferimento sull'annotazione automatica.