Panoramica dei dataset di segmentazione semantica#
La segmentazione semantica assegna un'etichetta di classe a ogni pixel di un'immagine. A differenza della segmentazione delle istanze, la segmentazione semantica non separa i singoli oggetti appartenenti alla stessa classe. L'obiettivo dell'addestramento è una mappa densa delle classi, in cui ogni pixel contiene un ID di classe.
Questa guida illustra il formato dei dataset usato dai modelli Ultralytics YOLO per la segmentazione semantica ed elenca le configurazioni di dataset integrate disponibili per l'addestramento e la convalida.
Formati di dataset supportati#
Sono supportati due formati di etichette. Il caricatore del dataset seleziona le maschere PNG se il file YAML del dataset definisce una chiave masks_dir oppure se nella radice del dataset è già presente una cartella masks/ accanto alle immagini; altrimenti usa le etichette poligonali YOLO.
Formato delle maschere PNG#
I dataset di segmentazione semantica usano 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 indica l'indice di classe del pixel corrispondente nell'immagine.
- I valori di pixel
0,1,2, ... rappresentano gli ID di classe definiti nella mappaturanamesdel dataset. - Il valore di pixel
255viene trattato come etichetta da ignorare ed è escluso dal calcolo della loss e delle metriche. - I file delle maschere devono avere lo stesso nome base del file immagine corrispondente, ad esempio
frankfurt_000000_000294.png. - Per impostazione predefinita, le maschere vengono individuate come
.png; se non è disponibile, vengono accettate anche altre estensioni di immagine supportate. Usa formati senza perdita, come.pngo.tiff, perché la compressione con perdita (ad esempio.jpg) altera i valori dei pixel degli ID di classe.
La struttura predefinita mantiene immagini e maschere in cartelle parallele. Il valore masks_dir del file YAML del dataset sostituisce il componente di percorso images per individuare le maschere.
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/Ad esempio, all'immagine images/train/aachen_000000_000019.png corrisponde la maschera masks/train/aachen_000000_000019.png quando masks_dir: masks.
Formato delle etichette poligonali YOLO#
Se il tuo dataset contiene già etichette poligonali Ultralytics YOLO (un .txt per immagine con righe <class-index> <x1> <y1> <x2> <y2> ...), puoi addestrare direttamente la segmentazione semantica senza convertire le maschere PNG. Consulta il formato dei dataset per la segmentazione delle istanze per la struttura delle righe.
Questo percorso viene selezionato automaticamente quando il file YAML del dataset non include masks_dir e nella radice del dataset non è presente una cartella masks/ accanto alle immagini: rimuovi o rinomina qualsiasi cartella masks/ residua, altrimenti il caricatore passa alla modalità con maschere PNG e cerca le maschere in quella posizione. Funzionamento:
- I poligoni vengono convertiti in una maschera semantica per immagine al momento del caricamento e ordinati per area, così gli oggetti più piccoli prevalgono su quelli più grandi nelle aree di sovrapposizione.
- Più classi (
N > 1innames): dopo le classi dichiarate viene aggiunta una classebackgroundaggiuntiva per i pixel non coperti da alcun poligono. Il modello viene creato conN + 1canali di output e l'ultimo canale rappresenta lo sfondo. - Classe singola (
N == 1innames): l'addestramento avviene comunque con 1 classe. La maschera è binaria: la classe dichiarata è rappresentata da1e i pixel non coperti da alcun poligono da0. Non viene aggiunta alcuna classe di sfondo aggiuntiva anames. - I pixel aggiunti dal padding dell'augmentation (ad esempio, da un ritaglio casuale) continuano a usare
255come etichetta da ignorare.
Usa questo percorso quando i tuoi dati sono già etichettati come poligoni di istanza e vuoi ottenere un modello di segmentazione semantica dagli stessi file.
Formato YAML del dataset#
I dataset di segmentazione semantica si configurano con file YAML. I campi principali sono:
| Chiave | Descrizione |
|---|---|
path | Directory radice del dataset. |
train | Percorso delle immagini di addestramento relativo a path oppure percorso assoluto. |
val | Percorso delle immagini di convalida relativo a path oppure percorso assoluto. |
test | Percorso facoltativo delle immagini di test. |
masks_dir | Nome della directory usata per le maschere semantiche. Ometti questa chiave (se nella radice del dataset non è presente la cartella masks/) per passare al formato di etichette poligonali YOLO. |
names | Mappatura dagli ID di classe ai nomi delle classi. |
label_mapping | Mappatura facoltativa 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 delle maschere sorgente non corrispondono già a ID di classe contigui per l'addestramento. Cityscapes e ADE20K includono mappature che convertono gli ID delle etichette originali negli ID di addestramento YOLO per la segmentazione semantica e ignorano le etichette non utilizzate.
Utilizzo#
Addestra un modello YOLO26 di segmentazione semantica con Python o CLI:
from ultralytics import YOLO
# Carica un modello di segmentazione semantica preaddestrato
model = YOLO("yolo26n-sem.pt")
# Addestra sul dataset di segmentazione semantica Cityscapes8
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 dell'attività di segmentazione semantica per la tabella completa dei benchmark dei modelli preaddestrati.
- Cityscapes: Un dataset per la segmentazione semantica di scene stradali urbane, con 19 classi di addestramento.
- Cityscapes8: un sottoinsieme Cityscapes di 8 immagini per test rapidi e controlli CI.
- ADE20K: Un dataset per l'analisi delle scene con 150 classi semantiche.
Aggiungere il proprio dataset#
Opzione A — Maschere PNG#
- Salva le immagini in cartelle di suddivisione come
images/traineimages/val. - Salva una maschera a canale singolo per immagine nelle cartelle delle maschere corrispondenti, ad esempio
masks/trainemasks/val. - Assicurati che i valori dei pixel delle maschere siano ID di classe. Usa
255per i pixel da ignorare. - Crea un file YAML del dataset con
path,train,val,masks_direnames. - Aggiungi
label_mappingsolo quando gli ID delle maschere devono essere convertiti 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 poligonali#
- Organizza le immagini e i file poligonali
.txtesattamente come per la segmentazione delle istanze. - Crea un file YAML del dataset con
path,train,valenames— omettimasks_dir. - Assicurati che nella radice del dataset non esista alcuna cartella
masks/accanto alle immagini: la sua sola presenza attiva la modalità maschere PNG del caricatore, anche senzamasks_dirnel file YAML. - Non aggiungere una voce "background" a
names. Per i dataset multiclasse il caricatore ne aggiunge automaticamente una; per i dataset a classe singola l'addestramento rimane a 1 classe: la 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 offre 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 risultante con etichette poligonali, senza dover configurare manualmente questa struttura.
Domande frequenti#
Le maschere di segmentazione semantica sono mappe dense di pixel. Ogni pixel memorizza un ID di classe e a ogni immagine di addestramento corrisponde una maschera. Le etichette di segmentazione delle istanze in Ultralytics YOLO usano file di testo con coordinate poligonali, una riga per ogni istanza di oggetto.
Il valore dei pixel
255viene usato come etichetta da ignorare. Questi pixel vengono esclusi dal calcolo della loss e delle metriche, utile per regioni vuote, pixel non etichettati o classi esterne all'insieme di etichette di addestramento.Sì. Ogni maschera semantica deve avere lo stesso nome di base del file dell'immagine corrispondente. Il caricatore del dataset sostituisce il componente di directory
imagesconmasks_dire cerca i file di maschera corrispondenti, ricorrendo ad altre estensioni di immagine supportate (.jpg,.tiffecc.) se non trova una maschera.png; tuttavia, sono consigliati solo formati senza perdita, perché il ripiego non lo impone.Sì, se corrispondono già agli ID di classe
names. Se il dataset sorgente usa ID non contigui o include etichette da ignorare, aggiungi una sezionelabel_mappingper convertire i valori dei pixel sorgente in ID di addestramento.Sì. I dataset di segmentazione delle istanze usano le etichette poligonali Ultralytics YOLO (un
.txtper immagine con righe<class-index> <x1> <y1> <x2> <y2> ...) e gli stessi file si possono riutilizzare per la segmentazione semantica: basta ometteremasks_dirdal file YAML del dataset e assicurarsi che nella radice del dataset non esista alcuna cartellamasks/accanto alle immagini (la sua sola presenza attiva la modalità maschere PNG, anche senza impostaremasks_dir). Il caricatore converte quindi i poligoni in maschere per immagine al volo. Per i dataset multiclasse (N > 1) viene aggiunta una classebackgroundaggiuntiva e il modello viene creato conN + 1canali di output. Per i dataset a classe singola (N == 1) l'addestramento rimane a 1 classe: la maschera mostra la 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 leggero sottoinsieme Cityscapes8 per testare le pipeline e ADE20K (150 classi di parsing delle scene). Ogni pagina documenta l'elenco esatto delle classi, le istruzioni per il download e un esempio di addestramento verificato.