Présentation des jeux de données de segmentation sémantique

La segmentation sémantique attribue une étiquette de classe à chaque pixel d'une image. Contrairement à la segmentation d'instance, la segmentation sémantique ne sépare pas les objets individuels d'une même classe. La cible d'entraînement est une carte de classe dense où chaque pixel stocke un ID de classe.

Ce guide explique le format de jeu de données utilisé par les modèles de segmentation sémantique Ultralytics YOLO et liste les configurations de jeux de données intégrées disponibles pour l'entraînement et la validation.

Formats de jeu de données pris en charge

Deux formats d'étiquettes sont pris en charge. Le chargeur de jeu de données choisit le chemin selon que le YAML du jeu de données définit ou non une clé masks_dir.

Format de masque PNG

Les jeux de données de segmentation sémantique utilisent un fichier image et un fichier masque par échantillon. Le masque est une image à canal unique, généralement PNG, où chaque valeur de pixel est l'index de classe pour le pixel de l'image correspondant.

  • Les valeurs de pixel 0, 1, 2, ... représentent les ID de classe issus du mappage names du jeu de données.
  • La valeur de pixel 255 est traitée comme l'étiquette d'ignorance et est exclue du calcul de la perte et des métriques.
  • Les fichiers de masque doivent utiliser le même nom de base que leur fichier image correspondant, par exemple frankfurt_000000_000294.png.
  • Les extensions de masque prises en charge sont .png, .PNG, .bmp et .tif.

La disposition par défaut conserve les images et les masques dans des dossiers parallèles. La valeur masks_dir du YAML du jeu de données remplace le composant de chemin images pour trouver les masques.

dataset/
├── images/
│   ├── train/
│   └── val/
└── masks/
    ├── train/
    └── val/

Par exemple, une image située à images/train/aachen_000000_000019.png est associée à un masque situé à masks/train/aachen_000000_000019.png lorsque masks_dir: masks.

Format d'étiquette de polygone YOLO

Si ton jeu de données possède déjà des étiquettes de polygone Ultralytics YOLO (un .txt par image avec des lignes <class-index> <x1> <y1> <x2> <y2> ...), tu peux effectuer l'entraînement de segmentation sémantique directement à partir de celles-ci — aucune conversion de masque PNG n'est nécessaire. Voir le format de jeu de données de segmentation d'instance pour la disposition ligne par ligne.

Ce chemin est sélectionné automatiquement lorsque le YAML du jeu de données omet masks_dir. Comportement :

  • Les polygones sont convertis en un masque sémantique par image au moment du chargement, triés par zone afin que les petits objets remplacent les plus grands dans les régions de chevauchement.
  • Multi-classe (N > 1 dans names) : une classe background supplémentaire est ajoutée après tes classes déclarées pour les pixels non couverts par un polygone. Le modèle est construit avec N + 1 canaux de sortie et le dernier canal est l'arrière-plan.
  • Classe unique (N == 1 dans names) : toujours entraîné comme 1 classe. Le masque est binaire, avec ta classe déclarée affichée comme 1 et les pixels non couverts par un polygone comme 0. Aucune classe d'arrière-plan supplémentaire n'est ajoutée à names.
  • Les pixels ajoutés par le remplissage d'augmentation (par exemple, recadrage aléatoire) utilisent toujours 255 comme étiquette d'ignorance.

Utilise ce chemin lorsque tes données sont déjà étiquetées en tant que polygones d'instance et que tu souhaites obtenir un modèle de segmentation sémantique à partir des mêmes fichiers.

Format YAML du jeu de données

Les jeux de données de segmentation sémantique sont configurés avec des fichiers YAML. Les champs principaux sont :

CléDescription
pathRépertoire racine du jeu de données.
trainChemin de l'image d'entraînement relatif à path, ou un chemin absolu.
valChemin de l'image de validation relatif à path, ou un chemin absolu.
testChemin de l'image de test optionnel.
masks_dirNom du répertoire utilisé pour les masques sémantiques. Omet cette clé pour passer au format d'étiquette de polygone YOLO.
namesMappage de l'ID de classe vers le nom de classe.
label_mappingMappage optionnel des ID du jeu de données source vers les ID d'entraînement ou 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

Utilise label_mapping lorsque les ID de masque source ne correspondent pas déjà aux ID de classe d'entraînement contigus. Cityscapes et ADE20K incluent des mappages qui convertissent les ID d'étiquette originaux en ID d'entraînement de segmentation sémantique YOLO et ignorent les étiquettes inutilisées.

Utilisation

Entraîne un modèle de segmentation sémantique YOLO26 avec Python ou CLI :

Exemple
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)

Jeux de données pris en charge

Ultralytics fournit des fichiers YAML de jeux de données de segmentation sémantique pour ces jeux de données :

  • Cityscapes : Jeu de données de segmentation sémantique de scènes de rue urbaines avec 19 classes d'entraînement.
  • Cityscapes8 : Un sous-ensemble de 8 images Cityscapes pour des tests rapides et des vérifications CI.
  • ADE20K : Jeu de données d'analyse de scène avec 150 classes sémantiques.

Ajouter ton propre jeu de données

Option A — Masques PNG

  1. Enregistre tes images sous des dossiers de répartition tels que images/train et images/val.
  2. Enregistre un masque à canal unique par image sous les dossiers de masques en miroir, tels que masks/train et masks/val.
  3. Assure-toi que les valeurs de pixel du masque sont des ID de classe. Utilise 255 pour les pixels qui doivent être ignorés.
  4. Crée un YAML de jeu de données avec path, train, val, masks_dir et names.
  5. Ajoute label_mapping uniquement lorsque tes ID de masque ont besoin d'une conversion en ID d'entraînement contigus.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

Option B — Étiquettes de polygone

  1. Dispose les images et les fichiers de polygone .txt exactement comme pour la segmentation d'instance.
  2. Crée un YAML de jeu de données avec path, train, val et namesomet masks_dir.
  3. N'ajoute pas d'entrée "background" à names. Pour les jeux de données multi-classes, le chargeur en ajoute une automatiquement ; pour les jeux de données à classe unique, l'entraînement reste à 1 classe — ta classe déclarée devient 1 dans le masque et les pixels non couverts deviennent 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

FAQ

Quelle est la différence entre les masques de segmentation sémantique et les étiquettes de segmentation d'instance ?

Les masques de segmentation sémantique sont des cartes de pixels denses. Chaque pixel stocke un ID de classe, et il y a une image de masque par image d'entraînement. Les étiquettes de segmentation d'instance dans Ultralytics YOLO utilisent des fichiers texte avec des coordonnées de polygone, une ligne par instance d'objet.

Quelle valeur de pixel est ignorée pendant l'entraînement ?

La valeur de pixel 255 est utilisée comme étiquette d'ignorance. Ces pixels sont sautés pendant le calcul de la perte et des métriques, ce qui est utile pour les régions vides, les pixels non étiquetés ou les classes en dehors de l'ensemble d'étiquettes d'entraînement.

Les noms de fichiers de masque doivent-ils correspondre aux noms de fichiers image ?

Oui. Chaque masque sémantique doit avoir le même nom de base que l'image correspondante. Le chargeur de jeu de données remplace le composant de répertoire images par masks_dir et recherche les fichiers de masque correspondants.

Puis-je utiliser directement les ID d'étiquette du jeu de données original ?

Oui, s'ils correspondent déjà aux ID de classe de tes names. Si le jeu de données source utilise des ID non contigus ou inclut des étiquettes qui doivent être ignorées, ajoute une section label_mapping pour convertir les valeurs de pixel sources en ID d'entraînement.

Puis-je utiliser mon jeu de données de segmentation d'instance pour entraîner la segmentation sémantique ?

Oui. Les jeux de données de segmentation d'instance utilisent des étiquettes de polygone Ultralytics YOLO (un .txt par image avec des lignes <class-index> <x1> <y1> <x2> <y2> ...), et les mêmes fichiers peuvent être réutilisés pour la segmentation sémantique — il suffit d'omettre masks_dir du YAML du jeu de données. Le chargeur convertit les polygones en masques par image à la volée. Pour les jeux de données multi-classes (N > 1), une classe background supplémentaire est ajoutée et le modèle est construit avec N + 1 canaux de sortie. Pour les jeux de données à classe unique (N == 1), l'entraînement reste à 1 classe — le masque affiche ta classe déclarée comme 1 et les pixels non couverts comme 0.

Commentaires