Link to this sectionPanoramica dei dataset di segmentazione semantica#
La segmentazione semantica assegna un'etichetta di classe a ogni pixel in un'immagine. A differenza della segmentazione di istanze, la segmentazione semantica non separa i singoli oggetti della stessa classe. L'obiettivo dell'addestramento è una mappa di classi densa in cui ogni pixel memorizza un ID 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.
Link to this sectionFormati di dataset supportati#
Sono supportati due formati di etichette. Il caricatore del dataset seleziona il percorso in base alla presenza o meno di una chiave masks_dir definita nel file YAML del dataset.
Link to this sectionFormato 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 classe dalla mappaturanamesdel dataset. - Il valore di pixel
255viene trattato come etichetta di ignoranza ed è escluso dal calcolo della loss e delle metriche. - I file maschera devono utilizzare lo stesso nome base (stem) del file immagine corrispondente, ad esempio
frankfurt_000000_000294.png. - Le maschere vengono risolte come
.pngper impostazione predefinita; se mancanti, sono accettate anche altre estensioni immagine supportate. Utilizza formati senza perdita (lossless) come.pngo.tiff, poiché la compressione con perdita (ad es..jpg) corrompe i valori dei pixel dell'ID classe.
Il layout predefinito mantiene immagini e maschere in cartelle parallele. Il valore masks_dir del file YAML del dataset sostituisce il componente di 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.
Link to this sectionFormato etichetta poligono YOLO#
Se il tuo dataset possiede già etichette poligono Ultralytics YOLO (un file .txt per immagine con righe <class-index> <x1> <y1> <x2> <y2> ...), puoi addestrare la segmentazione semantica direttamente da essi, senza necessità 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 sovrascrivano quelli più grandi nelle regioni di sovrapposizione.
- Multi-classe (
N > 1innames): viene aggiunta un'ulteriore classebackgrounddopo le classi dichiarate per i pixel non coperti da alcun poligono. Il modello viene costruito conN + 1canali di output e l'ultimo canale è lo sfondo (background). - Classe singola (
N == 1innames): addestrato comunque come 1 classe. La maschera è binaria, con la classe dichiarata mostrata come1e i pixel non coperti da alcun poligono come0. Nessuna classe di sfondo aggiuntiva viene aggiunta anames. - I pixel aggiunti dal padding di data augmentation (es. ritaglio casuale) utilizzano comunque
255come etichetta di ignoranza.
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.
Link to this sectionFormato 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 delle immagini di addestramento relativo a path o percorso assoluto. |
val | Percorso delle immagini 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 per passare al formato etichetta poligono 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.zipUtilizza label_mapping quando gli ID delle maschere di origine 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.
Link to this sectionUtilizzo#
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)Link to this sectionDataset supportati#
Ultralytics fornisce file YAML di dataset di segmentazione semantica per questi dataset:
- Cityscapes: Dataset di segmentazione semantica di scene stradali urbane con 19 classi di addestramento.
- Cityscapes8: Un sottoinsieme di 8 immagini di Cityscapes per test rapidi e verifiche CI.
- ADE20K: Dataset di parsing di scene con 150 classi semantiche.
Link to this sectionAggiungere il proprio dataset#
Link to this sectionOpzione A — Maschere PNG#
- Salva le tue immagini in cartelle di split come
images/traineimages/val. - Salva una maschera a canale singolo per ogni immagine nelle cartelle speculari, come
masks/trainemasks/val. - Assicurati che i valori dei pixel della maschera siano ID classe. Usa
255per i pixel da ignorare. - Crea un file YAML del dataset con
path,train,val,masks_direnames. - Aggiungi
label_mappingsolo se gli ID delle tue maschere richiedono una 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: buildingLink to this sectionOpzione B — Etichette poligono#
- Disponi immagini e file poligono
.txtesattamente come per la segmentazione di istanze. - Crea un file YAML del dataset con
path,train,valenames— omettimasks_dir. - Non aggiungere una voce "background" in
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: carLink to this sectionFAQ#
Link to this sectionQual è 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 ogni istanza di oggetto.
Link to this sectionQuale valore di pixel viene ignorato durante l'addestramento?#
Il valore di pixel 255 viene 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.
Link to this sectionI 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.
Link to this sectionPosso usare direttamente gli ID etichetta del dataset originale?#
Sì, se corrispondono già agli ID di classe del tuo campo names. Se il dataset di origine usa ID non contigui o include etichette da ignorare, aggiungi una sezione label_mapping per convertire i valori dei pixel di origine negli ID di addestramento.
Link to this sectionPosso usare il mio dataset di segmentazione di istanze per addestrare la segmentazione semantica?#
Sì. I dataset di segmentazione di istanze utilizzano etichette poligono Ultralytics YOLO (un file .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 non coperti come 0.