Panoramica dei dataset di segmentazione semantica#
Semantic segmentation assegna un'etichetta di classe a ogni pixel di un'immagine. A differenza della instance segmentation, la segmentazione semantica non separa i singoli oggetti della stessa classe. L'obiettivo di addestramento è una mappa di classi densa in cui ogni pixel memorizza un ID di classe.
Questa guida spiega il formato del 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 etichette. Il caricatore del dataset seleziona le maschere PNG quando il file YAML del dataset definisce una chiave masks_dir, o quando esiste già una cartella masks/ accanto alle tue immagini nella root del dataset; altrimenti, torna alle etichette poligonali YOLO.
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 delle classe dalla mappatura del datasetnames. - Il valore del pixel
255viene trattato come etichetta di ignoraggio ed è escluso dal calcolo della perdita e delle metriche. - I file delle maschere dovrebbero utilizzare lo stesso nome di base (stem) del file immagine corrispondente, ad esempio
frankfurt_000000_000294.png. - Le maschere vengono risolte come
.pngper impostazione predefinita; se mancanti, vengono accettate anche altre estensioni di immagine supportate. Usa formati lossless come.pngo.tiff, poiché la compressione lossy (ad esempio.jpg) corrompe i valori dei pixel dell'ID di classe.
Il layout predefinita 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 viene associata a una maschera in masks/train/aachen_000000_000019.png quando masks_dir: masks.
Formato etichetta poligono YOLO#
Se il tuo dataset ha già etichette poligonali 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 alcuna conversione di maschera PNG. Consulta il formato del dataset di segmentazione d'istanza per il layout a livello di riga.
Questo percorso viene selezionato automaticamente quando il file YAML del dataset omette masks_dir e non esiste alcuna cartella masks/ accanto alle tue immagini nella root del dataset; rimuovi o rinomina qualsiasi cartella masks/ rimasta, altrimenti il caricatore passerà alla modalità maschera PNG cercando le maschere lì. 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 sovrascrivano quelli più grandi nelle regioni di sovrapposizione.
- Multi-classe (
N > 1innames): un'ulteriore classebackgroundviene aggiunta dopo le classi dichiarate per i pixel non coperti da alcun poligono. Il modello viene costruito con canali di outputN + 1e l'ultimo canale è lo sfondo. - Classe singola (
N == 1innames): viene comunque addestrato come 1 classe. La maschera è binaria, con la classe dichiarata mostrata come1e i pixel non coperti da alcun poligono come0. Nessuna classe di sfondo extra viene aggiunta anames. - I pixel aggiunti dal padding di augmentazione (es. ritaglio casuale) utilizzano comunque
255come etichetta da ignorare.
Utilizza questo percorso quando i tuoi dati sono già etichettati come poligoni di istanza e desideri ottenere un modello di segmentazione semantica dagli stessi file.
Formato YAML del dataset#
I dataset di segmentazione semantica sono configurati tramite file YAML. I campi principali sono:
| Chiave | Descrizione |
|---|---|
path | Directory radice del dataset. |
train | Percorso dell'immagine di addestramento relativo a path, o percorso assoluto. |
val | Percorso dell'immagine di validazione relativo a path, o percorso assoluto. |
test | Percorso opzionale delle immagini di test. |
masks_dir | Nome della directory utilizzata per le maschere semantiche. Ometti questa chiave (senza cartella masks/ nella root del dataset) per passare al formato di etichetta poligonale YOLO. |
names | Mappatura da ID classe a nome della classe. |
label_mapping | Mappatura opzionale dagli ID del dataset di origine agli ID di addestramento o a ignore_label. |
# 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.zipUsa label_mapping quando gli ID della maschera di origine non corrispondono già agli ID di classe di addestramento contigui. Cityscapes e ADE20K includono mappature che convertono gli ID delle etichette originali in ID di addestramento per la segmentazione semantica YOLO e ignorano le etichette non utilizzate.
Utilizzo#
Addestra un modello di segmentazione semantica YOLO26 con Python o CLI:
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 di segmentazione semantica per questi dataset. Consulta la pagina delle attività di segmentazione semantica per la tabella completa dei benchmark dei modelli pre-addestrati.
- Cityscapes: Dataset di segmentazione semantica per scene stradali urbane con 19 classi di training.
- Cityscapes8: Un sottoinsieme di Cityscapes di 8 immagini per test rapidi e controlli CI.
- ADE20K: Dataset di parsing di scene con 150 classi semantiche.
Aggiungere il proprio dataset#
Opzione A — Maschere PNG#
- Salva le tue immagini in cartelle di split come
images/traineimages/val. - Salva una maschera a canale singolo per immagine nelle cartelle di maschere speculari, come
masks/trainemasks/val. - Assicurati che i valori dei pixel della maschera siano ID di classe. Usa
255per i pixel che devono essere ignorati. - Crea un file YAML per il dataset con
path,train,val,masks_direnames. - Aggiungi
label_mappingsolo 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: buildingOpzione B — Etichette poligono#
- Disponi le immagini e i file di poligoni
.txtesattamente come per la instance segmentation. - Crea un file YAML per il dataset con
path,train,valenames— omettimasks_dir. - Assicurati che non esista alcuna cartella
masks/accanto alle tue immagini nella root del dataset: la sua sola presenza attiva la modalità maschera PNG del caricatore anche senzamasks_dirnel file YAML. - 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 diventa1nella maschera e i pixel non coperti diventano0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carUltralytics Platform fornisce uno strumento di annotazione poligonale per l'attività semantica, oltre all'annotazione intelligente assistita da SAM: annota direttamente nel browser ed esporta o addestra sul dataset con etichette poligonali risultante senza dover configurare questo layout a mano.
FAQ#
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 ogni istanza di oggetto.
Il valore del pixel
255viene usato come etichetta da ignorare. Questi pixel vengono saltati durante il calcolo della perdita e delle metriche, il che è utile per regioni vuote, pixel non etichettati o classi esterne al set di etichette di addestramento.Sì. Ogni maschera semantica dovrebbe avere lo stesso nome di file dell'immagine corrispondente. Il caricatore del dataset sostituisce il componente di directory
imagesconmasks_dire cerca i file di maschera corrispondenti, passando ad altre estensioni di immagine supportate (.jpg,.tiff, ecc.) se non viene trovata una maschera.png, sebbene siano consigliati solo formati lossless, poiché il fallback non lo impone.Sì, se corrispondono già ai tuoi ID di classe
names. Se il dataset di origine utilizza ID non contigui o include etichette che dovrebbero essere ignorate, aggiungi una sezionelabel_mappingper convertire i valori dei pixel di origine in ID di addestramento.Sì. I dataset di segmentazione d'istanza utilizzano le etichette poligonali Ultralytics YOLO (un
.txtper immagine con righe<class-index> <x1> <y1> <x2> <y2> ...), e gli stessi file possono essere riutilizzati per la segmentazione semantica: basta ometteremasks_dirdal file YAML del dataset e assicurarsi che non esista alcuna cartellamasks/accanto alle immagini nella root del dataset (la sua sola presenza attiva la modalità maschera PNG anche senzamasks_dirimpostato). Il caricatore converte quindi i poligoni in maschere per immagine al volo. Per i dataset multi-classe (N > 1) viene aggiunta una classe extrabackground, e il modello viene costruito con canali di outputN + 1. Per i dataset a classe singola (N == 1) l'addestramento rimane a 1 classe: la maschera mostra la tua classe dichiarata come1e i pixel non coperti come0.Ultralytics include file YAML di dataset pronti all'uso per Cityscapes (19 classi di scene urbane), il sottoinsieme leggero Cityscapes8 per il test delle pipeline e ADE20K (150 classi di parsing di scene). Ciascuna pagina documenta l'elenco esatto delle classi, i passaggi di download e un esempio di addestramento verificato.