Panoramica dei dataset per la segmentazione delle istanze#
La segmentazione delle istanze è un'attività di computer vision che consiste nell'identificare e delimitare singoli oggetti all'interno di un'immagine. Questa guida offre una panoramica dei formati dei dataset supportati da Ultralytics YOLO per le attività di segmentazione delle istanze, insieme alle istruzioni per preparare, convertire e utilizzare questi dataset per addestrare i tuoi modelli.
Formati di dataset supportati#
Formato Ultralytics YOLO#
Il formato delle etichette del dataset utilizzato per addestrare i modelli di segmentazione YOLO è il seguente:
- Un file di testo per immagine: ogni immagine del dataset ha un file di testo corrispondente 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 intero che rappresenta la classe dell'oggetto (ad esempio, 0 per una persona, 1 per un'auto e così via).
- Coordinate dei poligoni degli oggetti: i punti
(x, y)che delineano la maschera dell'oggetto, normalizzati 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, mentre <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, costituiti da un segmento con 3 punti e da un segmento con 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 ha bisogno di un poligono. Le righe in formato detect (
<class-index> <x_center> <y_center> <width> <height>) non ne contengono alcuno, e un dataset di segmentazione i cui conteggi di bounding box e poligoni differiscono viene rifiutato con unValueErroral caricamento delle relative etichette.
Formato YAML del dataset#
Il framework Ultralytics utilizza 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 utilizzato 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 ./ vengono risolti in relazione al file *.txt). Un file *.txt è utile per addestrare il modello su un sottoinsieme di una directory, saltare le immagini senza etichetta o combinare immagini provenienti 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 delle 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
# Load a model
model = YOLO("yolo26n-seg.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Dataset supportati#
Ultralytics YOLO supporta vari dataset per attività di segmentazione di istanze. Ecco un elenco di quelli più comunemente utilizzati. La maggior parte di questi dataset è ospitata anche su Ultralytics Platform, dove puoi esplorare le immagini e le annotazioni, visualizzare le statistiche dei dataset e clonarli per l'addestramento sul cloud.
- Carparts-seg: un dataset specializzato nella segmentazione dei componenti automobilistici, ideale per le applicazioni nel settore automobilistico. Include una varietà di veicoli con annotazioni dettagliate dei singoli componenti.
- COCO: un dataset completo per il rilevamento degli oggetti, la segmentazione e la generazione di didascalie, con oltre 200.000 immagini etichettate appartenenti a un'ampia gamma di categorie.
- COCO8-seg: un sottoinsieme compatto di COCO composto da 8 immagini, progettato per testare rapidamente l'addestramento dei 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 delle istanze, contenente un sottoinsieme di 128 immagini COCO con annotazioni di segmentazione.
- Crack-seg: un dataset progettato per la segmentazione delle crepe su diverse superfici. Essenziale per la manutenzione delle infrastrutture e il controllo qualità, fornisce immagini dettagliate per addestrare modelli in grado di identificare le debolezze strutturali.
- Package-seg: un dataset dedicato alla segmentazione di diversi tipi e forme di materiali da imballaggio. È particolarmente utile per l'automazione della logistica e dei magazzini e contribuisce allo sviluppo di sistemi per la movimentazione e lo smistamento dei pacchi.
Aggiungere il tuo dataset#
Se hai un tuo dataset e vuoi utilizzarlo per addestrare modelli di segmentazione nel formato Ultralytics YOLO, assicurati che segua il formato specificato sopra nella sezione "Formato Ultralytics YOLO". Converti le annotazioni nel formato richiesto e specifica i percorsi, il numero di classi e i nomi delle classi nel file di configurazione YAML. Mantieni images/ e labels/ come cartelle separate allo stesso livello, con una struttura di sottocartelle corrispondente; inserire i file .txt delle etichette nella cartella delle immagini può causare la mancata rilevazione delle etichette da parte del modello.
Trasferire o convertire i formati delle etichette#
Dal formato del dataset COCO al formato YOLO#
Puoi convertire facilmente le etichette dal diffuso formato del dataset COCO al formato YOLO utilizzando 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 utilizzato per convertire il dataset COCO o qualsiasi dataset nel formato COCO al formato Ultralytics YOLO.
Ricorda di verificare attentamente che il dataset che vuoi utilizzare sia compatibile con il tuo modello e segua le convenzioni di formato necessarie. Dataset formattati correttamente sono fondamentali per addestrare modelli di segmentazione efficaci.
Annotazione automatica#
L'annotazione automatica è una funzionalità essenziale che consente di generare un dataset di segmentazione utilizzando un modello di rilevamento preaddestrato. Ti permette di annotare rapidamente e accuratamente un gran numero di immagini senza dover ricorrere all'etichettatura manuale, risparmiando tempo e fatica.
Generazione di un dataset di segmentazione utilizzando un modello di rilevamento#
Per annotare automaticamente il tuo dataset utilizzando 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 esempio, '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 dei non massimi, per filtrare i box sovrapposti. |
imgsz | int | 640 | Dimensione di input per il ridimensionamento delle immagini (deve essere un multiplo di 32). |
max_det | int | 300 | Numero massimo di rilevamenti per immagine per un uso efficiente della memoria. |
classes | list[int] | None | Elenco degli indici delle classi da rilevare (ad esempio, [0, 1] per persona e bicicletta). |
output_dir | str | None | Directory di salvataggio per le annotazioni (per impostazione predefinita: directory adiacente a <data>_auto_annotate_labels). |
La funzione auto_annotate accetta il percorso delle tue immagini, insieme ad argomenti opzionali per specificare i modelli di rilevamento preaddestrati, ad esempio YOLO26, YOLO11 o altri modelli, 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 significativamente il tempo e l'impegno necessari per creare dataset di segmentazione di alta qualità. Questa funzionalità è particolarmente utile per ricercatori e sviluppatori che lavorano con grandi raccolte di immagini, poiché consente loro di concentrarsi sullo sviluppo e sulla valutazione dei modelli anziché sull'annotazione manuale.
Visualizzazione delle annotazioni del dataset#
Prima di addestrare il modello, spesso è utile visualizzare le annotazioni del dataset per assicurarsi che siano corrette. Ultralytics fornisce una funzione di utilità a questo scopo:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Define the label map with all annotated class labels.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Input image path.
"path/to/annotations.txt", # Annotation file path for the image.
label_map,
)Questa funzione disegna i riquadri, assegna agli oggetti le etichette con i nomi delle classi e regola il colore del testo per migliorarne la leggibilità, aiutandoti a individuare e correggere eventuali errori nelle annotazioni prima dell'addestramento.
Conversione delle maschere di segmentazione nel formato YOLO#
Se hai maschere di segmentazione in formato binario, puoi convertirle nel formato di segmentazione YOLO utilizzando:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# For datasets like COCO with 80 classes
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 binarie nel formato di segmentazione YOLO e le salva nella directory di output specificata.
FAQ#
Ultralytics YOLO supporta diversi formati di dataset per la segmentazione delle istanze, tra cui il formato principale è il proprio formato Ultralytics YOLO. Ogni immagine del dataset deve avere un file di testo corrispondente con le informazioni sugli oggetti segmentate in più righe (una riga per oggetto), contenenti l'indice della classe e le coordinate normalizzate del riquadro. Per istruzioni più dettagliate sul formato dei dataset YOLO, consulta la Panoramica dei dataset per la segmentazione delle istanze.
Convertire le annotazioni dal formato COCO al formato YOLO è semplice utilizzando gli strumenti Ultralytics. Puoi usare la funzione
convert_cocodal 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 ulteriori dettagli, consulta Trasferimento o conversione dei formati delle etichette.
Per preparare un file YAML per addestrare i 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 ulteriori informazioni, consulta la sezione Formato YAML del dataset.
L'annotazione automatica in Ultralytics YOLO consente di generare annotazioni di segmentazione per il tuo dataset utilizzando un modello di rilevamento preaddestrato. Riduce significativamente la necessità di etichettatura manuale. Puoi utilizzare la funzione
auto_annotatecome segue:from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # or sam_model="mobile_sam.pt"Questa funzione automatizza il processo di annotazione, rendendolo più rapido ed efficiente. Per ulteriori dettagli, consulta il Riferimento per l'annotazione automatica.