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 della stessa classe. L'obiettivo dell'addestramento è una mappa densa delle classi, in cui ogni pixel memorizza un ID di classe.
Questa guida spiega il formato dei dataset utilizzato dai modelli Ultralytics YOLO per la segmentazione semantica ed elenca le configurazioni dei dataset integrate disponibili per l'addestramento e la validazione.
Formati di dataset supportati#
Sono supportati due formati per le annotazioni. Il loader del dataset seleziona le maschere PNG quando lo YAML del dataset definisce una chiave masks_dir oppure quando una cartella masks/ esiste già accanto alle immagini nella root del dataset; altrimenti ricorre alle annotazioni 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 corrisponde all'indice della classe per il pixel corrispondente dell'immagine.
- I valori dei pixel
0,1,2, ... rappresentano gli ID di classe della 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 usare lo stesso stem del file immagine corrispondente, ad esempio
frankfurt_000000_000294.png. - Per impostazione predefinita, le maschere vengono risolte come
.png; se manca, vengono accettate anche altre estensioni di immagine supportate. Usa formati senza perdita come.pngo.tiff, poiché la compressione con perdita (ad esempio.jpg) corrompe i valori dei pixel corrispondenti agli ID di classe.
La struttura predefinita mantiene immagini e maschere in cartelle parallele. Il valore masks_dir dello 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.
Formato delle annotazioni poligonali YOLO#
Se il tuo dataset contiene già annotazioni poligonali Ultralytics YOLO (un file .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 a livello di riga.
Questo percorso viene selezionato automaticamente quando lo YAML del dataset omette masks_dir e nella root del dataset non esiste alcuna cartella masks/ accanto alle immagini: rimuovi o rinomina qualsiasi cartella masks/ residua, altrimenti il loader ricorre alla modalità con maschere PNG e cerca lì le maschere. Comportamento:
- I poligoni vengono convertiti in una maschera semantica per immagine al momento del caricamento e ordinati per area, così gli oggetti più piccoli hanno la precedenza su quelli più grandi nelle regioni sovrapposte.
- Multi-classe (
N > 1innames): dopo le classi dichiarate viene aggiunta una classebackgroundper i pixel non coperti da alcun poligono. Il modello viene creato conN + 1canali di output e l'ultimo canale corrisponde allo sfondo. - Classe singola (
N == 1innames): l'addestramento mantiene 1 classe. La maschera è binaria, con la classe dichiarata rappresentata da1e i pixel non coperti da alcun poligono rappresentati da0. Non viene aggiunta alcuna classe di sfondo anames. - I pixel aggiunti dal padding dell'augmentation (ad esempio un ritaglio casuale) continuano a usare
255come etichetta da ignorare.
Usa questo percorso quando i tuoi dati sono già annotati come poligoni di istanza e vuoi ottenere un modello di segmentazione semantica dagli stessi file.
Formato YAML del dataset#
I dataset di segmentazione semantica vengono configurati con file YAML. I campi principali sono:
| Chiave | Descrizione |
|---|---|
path | Directory root del dataset. |
train | Percorso delle immagini di addestramento relativo a path oppure percorso assoluto. |
val | Percorso delle immagini di validazione relativo a path oppure percorso assoluto. |
test | Percorso opzionale delle immagini di test. |
masks_dir | Nome della directory utilizzata per le maschere semantiche. Ometti questa chiave (senza una cartella masks/ nella root del dataset) per passare al formato delle annotazioni poligonali YOLO. |
names | Mappatura da ID di 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 delle maschere di origine non corrispondono già a ID di classe di addestramento contigui. Cityscapes e ADE20K includono mappature che convertono gli ID delle etichette originali negli ID di addestramento della segmentazione semantica YOLO e ignorano le etichette inutilizzate.
Utilizzo#
Addestra un modello YOLO26 di segmentazione semantica 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 dei dataset per la segmentazione semantica per questi dataset. Consulta la pagina dell'attività di segmentazione semantica per la tabella completa dei benchmark dei modelli preaddestrati.
- Cityscapes: dataset di segmentazione semantica di scene stradali urbane con 19 classi di addestramento.
- Cityscapes8: un sottoinsieme di Cityscapes composto da 8 immagini per test rapidi e verifiche CI.
- ADE20K: dataset per la comprensione della scena con 150 classi semantiche.
Aggiungere il tuo dataset#
Opzione A — Maschere PNG#
- Salva le immagini in cartelle degli split come
images/traineimages/val. - Salva una maschera a canale singolo per ogni immagine nelle cartelle delle maschere corrispondenti, come
masks/trainemasks/val. - Assicurati che i valori dei pixel delle maschere siano ID di classe. Usa
255per i pixel che devono essere ignorati. - Crea uno 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 — Annotazioni poligonali#
- Organizza le immagini e i file poligonali
.txtesattamente come per la segmentazione delle istanze. - Crea uno YAML del dataset con
path,train,valenames— omettimasks_dir. - Assicurati che nella root del dataset non esista alcuna cartella
masks/accanto alle immagini: la sua sola presenza attiva la modalità con maschere PNG nel loader, anche senzamasks_dirnello YAML. - Non aggiungere una voce "background" a
names. Per i dataset multi-classe il loader ne aggiunge automaticamente una; per i dataset a classe singola l'addestramento resta 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 annotazioni poligonali senza dover configurare manualmente questa struttura.
FAQ#
Le maschere di segmentazione semantica sono mappe dense di pixel. Ogni pixel memorizza un ID di classe e c'è un'immagine maschera per ogni immagine di addestramento. Le annotazioni di segmentazione delle istanze in Ultralytics YOLO usano file di testo con coordinate poligonali, una riga per ogni istanza di oggetto.
Il valore di pixel
255viene usato come etichetta da ignorare. Questi pixel vengono esclusi dal calcolo della loss e delle metriche, una funzione utile per regioni vuote, pixel non annotati o classi esterne all'insieme di etichette di addestramento.Sì. Ogni maschera semantica deve avere lo stesso stem del file immagine corrispondente. Il loader del dataset sostituisce il componente di directory
imagesconmasks_dire cerca i file delle maschere corrispondenti, ricorrendo ad altre estensioni di immagine supportate (.jpg,.tiff, ecc.) se non trova una maschera.png; tuttavia, sono consigliati solo formati senza perdita, poiché il fallback non lo impone.Sì, se corrispondono già agli ID di classe
names. Se il dataset di origine usa ID non contigui o include etichette che devono essere ignorate, aggiungi una sezionelabel_mappingper convertire i valori dei pixel di origine negli ID di addestramento.Sì. I dataset di segmentazione delle istanze usano annotazioni poligonali Ultralytics YOLO (un file
.txtper immagine con righe<class-index> <x1> <y1> <x2> <y2> ...) e gli stessi file possono essere riutilizzati per la segmentazione semantica: ometti semplicementemasks_dirdallo YAML del dataset e assicurati che nella root del dataset non esista alcuna cartellamasks/accanto alle immagini (la sua sola presenza attiva la modalità con maschere PNG anche senza impostaremasks_dir). Il loader converte quindi i poligoni in maschere per immagine al volo. Per i dataset multi-classe (N > 1) viene aggiunta una classebackgrounde il modello viene creato conN + 1canali di output. Per i dataset a classe singola (N == 1) l'addestramento resta a 1 classe: la maschera mostra la classe dichiarata come1e i pixel non coperti come0.Ultralytics include file YAML dei dataset pronti all'uso per Cityscapes (19 classi di scene urbane), il leggero sottoinsieme Cityscapes8 per i test della pipeline e ADE20K (150 classi di interpretazione delle scene). Ogni pagina documenta l'elenco esatto delle classi, i passaggi per il download e un esempio di addestramento verificato.