Ultralytics YOLO27:

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 mappatura names del dataset.
  • Il valore di pixel 255 viene 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 .png o .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 > 1 in names): dopo le classi dichiarate viene aggiunta una classe background per i pixel non coperti da alcun poligono. Il modello viene creato con N + 1 canali di output e l'ultimo canale corrisponde allo sfondo.
  • Classe singola (N == 1 in names): l'addestramento mantiene 1 classe. La maschera è binaria, con la classe dichiarata rappresentata da 1 e i pixel non coperti da alcun poligono rappresentati da 0. Non viene aggiunta alcuna classe di sfondo a names.
  • I pixel aggiunti dal padding dell'augmentation (ad esempio un ritaglio casuale) continuano a usare 255 come 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:

ChiaveDescrizione
pathDirectory root del dataset.
trainPercorso delle immagini di addestramento relativo a path oppure percorso assoluto.
valPercorso delle immagini di validazione relativo a path oppure percorso assoluto.
testPercorso opzionale delle immagini di test.
masks_dirNome 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.
namesMappatura da ID di classe a nome della classe.
label_mappingMappatura opzionale dagli ID del dataset di origine agli ID di addestramento o a 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

Usa 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:

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 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#

  1. Salva le immagini in cartelle degli split come images/train e images/val.
  2. Salva una maschera a canale singolo per ogni immagine nelle cartelle delle maschere corrispondenti, come masks/train e masks/val.
  3. Assicurati che i valori dei pixel delle maschere siano ID di classe. Usa 255 per i pixel che devono essere ignorati.
  4. Crea uno YAML del dataset con path, train, val, masks_dir e names.
  5. Aggiungi label_mapping solo 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: building

Opzione B — Annotazioni poligonali#

  1. Organizza le immagini e i file poligonali .txt esattamente come per la segmentazione delle istanze.
  2. Crea uno YAML del dataset con path, train, val e namesometti masks_dir.
  3. 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 senza masks_dir nello YAML.
  4. 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 diventa 1 nella maschera e i pixel non coperti diventano 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

Ultralytics 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 255 viene 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 images con masks_dir e 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 sezione label_mapping per 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 .txt per immagine con righe <class-index> <x1> <y1> <x2> <y2> ...) e gli stessi file possono essere riutilizzati per la segmentazione semantica: ometti semplicemente masks_dir dallo YAML del dataset e assicurati che nella root del dataset non esista alcuna cartella masks/ accanto alle immagini (la sua sola presenza attiva la modalità con maschere PNG anche senza impostare masks_dir). Il loader converte quindi i poligoni in maschere per immagine al volo. Per i dataset multi-classe (N > 1) viene aggiunta una classe background e il modello viene creato con N + 1 canali di output. Per i dataset a classe singola (N == 1) l'addestramento resta a 1 classe: la maschera mostra la classe dichiarata come 1 e i pixel non coperti come 0.

  • 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.

Commenti