Ultralytics YOLO27:
Get Started

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:

  1. 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".
  2. Una riga per oggetto: ogni riga del file di testo corrisponde a una singola istanza di oggetto nell'immagine.
  3. 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
Suggerimento
  • 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 un ValueError al 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/cfg/datasets/coco8-seg.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.zip

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

Percorsi delle immagini in un file `*.txt`
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: person

names è 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#

Esempio
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:

Esempio
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:

Esempio
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgomentoTipoPredefinitoDescrizione
datastrobbligatorioPercorso della directory contenente le immagini di destinazione da annotare o segmentare.
det_modelstr'yolo26x.pt'Percorso del modello di rilevamento YOLO per il rilevamento iniziale degli oggetti.
sam_modelstr'sam_b.pt'Percorso del modello SAM per la segmentazione (supporta i pesi di SAM, SAM 2, MobileSAM e SAM 3).
devicestr''Dispositivo di calcolo (ad es. 'cuda:0', 'cpu' o '' per il rilevamento automatico del dispositivo).
conffloat0.25Soglia di confidenza del rilevamento YOLO per filtrare i rilevamenti deboli.
ioufloat0.45Soglia IoU per la soppressione non massima, usata per filtrare i riquadri sovrapposti.
imgszint640Dimensione di input per ridimensionare le immagini (arrotondata al multiplo di 32 più vicino per eccesso, se necessario).
max_detint300Numero massimo di rilevamenti per immagine per ottimizzare l'uso della memoria.
classeslist[int]NoneElenco degli indici delle classi da rilevare (ad es. [0, 1] per persona e bicicletta).
output_dirstrNoneDirectory 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_coco del modulo ultralytics.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.zip

    Assicurati 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_annotate nel 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.

Commenti