Panoramica sui dataset di segmentazione semantica

La segmentazione semantica assegna un'etichetta di classe a ogni pixel di un'immagine. A differenza della segmentazione di istanze, la segmentazione semantica non distingue singoli oggetti della stessa classe. L'obiettivo dell'addestramento è una mappa di classe densa in cui ogni pixel memorizza un ID di classe.

Questa guida spiega il formato di dataset utilizzato dai modelli di segmentazione semantica Ultralytics YOLO ed elenca le configurazioni di dataset integrate disponibili per l'addestramento e la validazione.

Formati di dataset supportati

Sono supportati due formati di etichetta. Il caricatore del dataset sceglie il percorso in base alla presenza o meno della chiave masks_dir nel file YAML del dataset.

Formato maschera PNG

I dataset di segmentazione semantica utilizzano un file immagine e un file maschera per ogni campione. La maschera è un'immagine a canale singolo, solitamente PNG, in cui ogni valore di pixel è l'indice di classe per il corrispondente pixel dell'immagine.

  • I valori dei pixel 0, 1, 2, ... rappresentano gli ID di classe dalla mappatura names del dataset.
  • Il valore di pixel 255 è trattato come etichetta di ignoranza ed è escluso dal calcolo della loss e delle metriche.
  • I file maschera dovrebbero utilizzare lo stesso nome base del file immagine corrispondente, ad esempio frankfurt_000000_000294.png.
  • Le estensioni di maschera supportate sono .png, .PNG, .bmp e .tif.

Il layout predefinito mantiene immagini e maschere in cartelle parallele. Il valore masks_dir dal file YAML del dataset sostituisce il componente del percorso images per trovare le maschere.

dataset/
├── images/
│   ├── train/
│   └── val/
└── masks/
    ├── train/
    └── val/

Ad esempio, un'immagine in images/train/aachen_000000_000019.png è associata a una maschera in masks/train/aachen_000000_000019.png quando masks_dir: masks.

Formato etichetta poligono YOLO

Se il tuo dataset dispone già di etichette poligono Ultralytics YOLO (un .txt per immagine con righe <class-index> <x1> <y1> <x2> <y2> ...), puoi addestrare la segmentazione semantica direttamente da esse, senza bisogno di conversione in maschere PNG. Consulta il formato dataset per segmentazione di istanze per il layout a livello di riga.

Questo percorso viene selezionato automaticamente quando il file YAML del dataset omette masks_dir. Comportamento:

  • I poligoni vengono convertiti in una maschera semantica per immagine al momento del caricamento, ordinati per area in modo che gli oggetti più piccoli prevalgano su quelli più grandi nelle regioni di sovrapposizione.
  • Multi-classe (N > 1 in names): viene aggiunta una classe background extra dopo le tue classi dichiarate per i pixel non coperti da alcun poligono. Il modello è costruito con N + 1 canali di output e l'ultimo canale è lo sfondo.
  • Classe singola (N == 1 in names): addestrato comunque come 1 classe. La maschera è binaria, con la tua classe dichiarata mostrata come 1 e i pixel non coperti da alcun poligono come 0. Nessuna classe di sfondo extra viene aggiunta a names.
  • I pixel aggiunti dal padding di aumento (ad es. ritaglio casuale) utilizzano comunque 255 come etichetta di ignoranza.

Utilizza questo percorso quando i tuoi dati sono già etichettati come poligoni di istanza e desideri un modello di segmentazione semantica dagli stessi file.

Formato YAML del dataset

I dataset di segmentazione semantica sono configurati con file YAML. I campi principali sono:

ChiaveDescrizione
pathDirectory radice del dataset.
trainPercorso dell'immagine di addestramento relativo a path, o percorso assoluto.
valPercorso dell'immagine di validazione relativo a path, o percorso assoluto.
testPercorso opzionale dell'immagine di test.
masks_dirNome della directory utilizzata per le maschere semantiche. Ometti questa chiave per passare al formato etichetta poligono YOLO.
namesMappatura da ID classe a nome classe.
label_mappingMappatura opzionale dagli ID del dataset sorgente agli ID di addestramento o ignore_label.
ultralytics/cfg/datasets/cityscapes8.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes8/
# Example usage: yolo semantic train data=cityscapes8.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
#     └── cityscapes8 ← downloads here (small subset)
#         └── images
#         └── masks

# Dataset root directory
path: cityscapes8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images

masks_dir: masks # semantic mask directory

# Cityscapes 19-class labels
names:
  0: road
  1: sidewalk
  2: building
  3: wall
  4: fence
  5: pole
  6: traffic light
  7: traffic sign
  8: vegetation
  9: terrain
  10: sky
  11: person
  12: rider
  13: car
  14: truck
  15: bus
  16: train
  17: motorcycle
  18: bicycle

# Map source label IDs to train IDs; ignore_label is converted to 255.
label_mapping:
  -1: ignore_label
  0: ignore_label
  1: ignore_label
  2: ignore_label
  3: ignore_label
  4: ignore_label
  5: ignore_label
  6: ignore_label
  7: 0
  8: 1
  9: ignore_label
  10: ignore_label
  11: 2
  12: 3
  13: 4
  14: ignore_label
  15: ignore_label
  16: ignore_label
  17: 5
  18: ignore_label
  19: 6
  20: 7
  21: 8
  22: 9
  23: 10
  24: 11
  25: 12
  26: 13
  27: 14
  28: 15
  29: ignore_label
  30: ignore_label
  31: 16
  32: 17
  33: 18

# Download URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/cityscapes8.zip

Utilizza label_mapping quando gli ID delle maschere sorgente non corrispondono già agli ID di classe di addestramento contigui. Cityscapes e ADE20K includono mappature che convertono gli ID etichetta originali in ID di addestramento per la segmentazione semantica YOLO e ignorano le etichette inutilizzate.

Utilizzo

Addestra un modello di segmentazione semantica YOLO26 con Python o CLI:

Esempio
from ultralytics import YOLO

# Load a pretrained semantic segmentation model
model = YOLO("yolo26n-sem.pt")

# Train on the Cityscapes8 semantic segmentation dataset
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

Dataset supportati

Ultralytics fornisce file YAML di dataset per la segmentazione semantica per questi dataset:

  • Cityscapes: Dataset di segmentazione semantica per scene stradali urbane con 19 classi di addestramento.
  • Cityscapes8: Un sottoinsieme di 8 immagini di Cityscapes per test rapidi e controlli CI.
  • ADE20K: Dataset di parsing di scene con 150 classi semantiche.

Aggiunta del tuo dataset

Opzione A — Maschere PNG

  1. Salva le tue immagini in cartelle di split come images/train e images/val.
  2. Salva una maschera a canale singolo per immagine nelle cartelle maschera speculari, come masks/train e masks/val.
  3. Assicurati che i valori dei pixel della maschera siano ID di classe. Usa 255 per i pixel da ignorare.
  4. Crea un file YAML del dataset con path, train, val, masks_dir e names.
  5. Aggiungi label_mapping solo quando gli ID delle tue maschere richiedono la conversione in ID di addestramento contigui.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

Opzione B — Etichette poligono

  1. Disponi le immagini e i file poligono .txt esattamente come per la segmentazione di istanze.
  2. Crea un file YAML del dataset con path, train, val e namesometti masks_dir.
  3. Non aggiungere una voce "background" a names. Per i dataset multi-classe, il caricatore ne aggiunge una automaticamente; per i dataset a classe singola, l'addestramento rimane a 1 classe — la tua classe dichiarata diventa 1 nella maschera e i pixel scoperti diventano 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

FAQ

Qual è la differenza tra maschere di segmentazione semantica ed etichette di segmentazione di istanze?

Le maschere di segmentazione semantica sono mappe densi di pixel. Ogni pixel memorizza un ID classe e c'è un'immagine maschera per ogni immagine di addestramento. Le etichette di segmentazione di istanze in Ultralytics YOLO utilizzano file di testo con coordinate poligonali, una riga per istanza di oggetto.

Quale valore di pixel viene ignorato durante l'addestramento?

Il valore di pixel 255 è usato come etichetta di ignoranza. Questi pixel vengono saltati durante il calcolo della loss e delle metriche, il che è utile per regioni vuote, pixel non etichettati o classi al di fuori del set di etichette di addestramento.

I nomi dei file maschera devono corrispondere ai nomi dei file immagine?

Sì. Ogni maschera semantica deve avere lo stesso nome base del file dell'immagine corrispondente. Il caricatore del dataset sostituisce il componente della directory images con masks_dir e cerca i file maschera corrispondenti.

Posso usare direttamente gli ID etichetta del dataset originale?

Sì, se corrispondono già ai tuoi ID di classe names. Se il dataset sorgente usa ID non contigui o include etichette da ignorare, aggiungi una sezione label_mapping per convertire i valori dei pixel sorgente in ID di addestramento.

Posso usare il mio dataset di segmentazione di istanze per addestrare la segmentazione semantica?

Sì. I dataset di segmentazione di istanze usano le etichette poligono Ultralytics YOLO (un .txt per immagine con righe <class-index> <x1> <y1> <x2> <y2> ...), e gli stessi file possono essere riutilizzati per la segmentazione semantica: basta omettere masks_dir dal file YAML del dataset. Il caricatore converte i poligoni in maschere per immagine al volo. Per i dataset multi-classe (N > 1) viene aggiunta una classe background extra e il modello viene costruito con N + 1 canali di output. Per i dataset a classe singola (N == 1) l'addestramento rimane a 1 classe: la maschera mostra la tua classe dichiarata come 1 e i pixel scoperti come 0.

Commenti