Descripción general de los conjuntos de datos de segmentación semántica

La segmentación semántica asigna una etiqueta de clase a cada píxel de una imagen. A diferencia de la segmentación de instancias, la segmentación semántica no separa objetos individuales de la misma clase. El objetivo del entrenamiento es un mapa de clases denso donde cada píxel almacena un ID de clase.

Esta guía explica el formato de conjunto de datos utilizado por los modelos de segmentación semántica Ultralytics YOLO y enumera las configuraciones de conjuntos de datos integradas disponibles para el entrenamiento y la validación.

Formatos de conjuntos de datos admitidos

Se admiten dos formatos de etiqueta. El cargador de conjuntos de datos elige la ruta según si el YAML del conjunto de datos define una clave masks_dir.

Formato de máscara PNG

Los conjuntos de datos de segmentación semántica utilizan un archivo de imagen y un archivo de máscara por muestra. La máscara es una imagen de un solo canal, generalmente PNG, donde cada valor de píxel es el índice de clase para el píxel de imagen correspondiente.

  • Los valores de píxel 0, 1, 2, ... representan los IDs de clase del mapeo names del conjunto de datos.
  • El valor de píxel 255 se trata como la etiqueta de omisión (ignore label) y se excluye del cálculo de pérdida y métricas.
  • Los archivos de máscara deben usar el mismo nombre base que su archivo de imagen correspondiente, por ejemplo frankfurt_000000_000294.png.
  • Las extensiones de máscara admitidas son .png, .PNG, .bmp y .tif.

El diseño predeterminado mantiene las imágenes y las máscaras en carpetas paralelas. El valor masks_dir del YAML del conjunto de datos reemplaza el componente de ruta images para encontrar las máscaras.

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

Por ejemplo, una imagen en images/train/aachen_000000_000019.png se empareja con una máscara en masks/train/aachen_000000_000019.png cuando masks_dir: masks.

Formato de etiqueta de polígono YOLO

Si tu conjunto de datos ya tiene etiquetas de polígono Ultralytics YOLO (un .txt por imagen con filas <class-index> <x1> <y1> <x2> <y2> ...), puedes entrenar la segmentación semántica directamente a partir de ellas; no se necesita conversión a máscara PNG. Consulta el formato de conjunto de datos de segmentación de instancias para conocer el diseño a nivel de fila.

Esta ruta se selecciona automáticamente cuando el YAML del conjunto de datos omite masks_dir. Comportamiento:

  • Los polígonos se convierten en una máscara semántica por imagen en el momento de la carga, ordenados por área para que los objetos más pequeños se superpongan a los más grandes en las regiones de solapamiento.
  • Multiclase (N > 1 en names): se añade una clase background adicional después de tus clases declaradas para los píxeles no cubiertos por ningún polígono. El modelo se construye con N + 1 canales de salida y el último canal es el fondo.
  • Clase única (N == 1 en names): se entrena igual como 1 clase. La máscara es binaria, con tu clase declarada mostrada como 1 y los píxeles no cubiertos por ningún polígono como 0. No se añade ninguna clase de fondo adicional a names.
  • Los píxeles añadidos mediante el relleno de aumento (por ejemplo, recorte aleatorio) siguen utilizando 255 como etiqueta de omisión.

Utiliza esta ruta cuando tus datos ya estén etiquetados como polígonos de instancia y quieras obtener un modelo de segmentación semántica a partir de los mismos archivos.

Formato YAML del conjunto de datos

Los conjuntos de datos de segmentación semántica se configuran con archivos YAML. Los campos principales son:

ClaveDescripción
pathDirectorio raíz del conjunto de datos.
trainRuta de la imagen de entrenamiento relativa a path, o una ruta absoluta.
valRuta de la imagen de validación relativa a path, o una ruta absoluta.
testRuta opcional de la imagen de prueba.
masks_dirNombre del directorio utilizado para las máscaras semánticas. Omite esta clave para cambiar al formato de etiqueta de polígono YOLO.
namesMapeo de ID de clase a nombre de clase.
label_mappingMapeo opcional desde los IDs del conjunto de datos original a los IDs de entrenamiento o 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

Utiliza label_mapping cuando los IDs de la máscara de origen no coincidan ya con los IDs de clase de entrenamiento contiguos. Cityscapes y ADE20K incluyen mapeos que convierten los IDs de etiqueta originales en IDs de entrenamiento de segmentación semántica YOLO e ignoran las etiquetas no utilizadas.

Uso

Entrena un modelo de segmentación semántica YOLO26 con Python o CLI:

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

Conjuntos de datos admitidos

Ultralytics proporciona archivos YAML de conjuntos de datos de segmentación semántica para estos conjuntos de datos:

  • Cityscapes: Conjunto de datos de segmentación semántica de escenas urbanas con 19 clases de entrenamiento.
  • Cityscapes8: Un subconjunto de 8 imágenes de Cityscapes para pruebas rápidas y comprobaciones de CI.
  • ADE20K: Conjunto de datos de análisis de escenas con 150 clases semánticas.

Añadir tu propio conjunto de datos

Opción A — Máscaras PNG

  1. Guarda tus imágenes en carpetas divididas como images/train e images/val.
  2. Guarda una máscara de un solo canal por imagen en las carpetas de máscara reflejadas, como masks/train y masks/val.
  3. Asegúrate de que los valores de los píxeles de la máscara sean IDs de clase. Usa 255 para los píxeles que deban ignorarse.
  4. Crea un YAML de conjunto de datos con path, train, val, masks_dir y names.
  5. Añade label_mapping solo cuando los IDs de tu máscara necesiten conversión a IDs de entrenamiento contiguos.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

Opción B — Etiquetas de polígono

  1. Organiza las imágenes y los archivos de polígonos .txt exactamente igual que para la segmentación de instancias.
  2. Crea un YAML de conjunto de datos con path, train, val y namesomite masks_dir.
  3. No añadas una entrada "background" a names. Para conjuntos de datos multiclase, el cargador añade una automáticamente; para conjuntos de datos de clase única, el entrenamiento permanece en 1 clase: tu clase declarada se convierte en 1 en la máscara y los píxeles no cubiertos se convierten en 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

Preguntas frecuentes

¿Cuál es la diferencia entre las máscaras de segmentación semántica y las etiquetas de segmentación de instancias?

Las máscaras de segmentación semántica son mapas de píxeles densos. Cada píxel almacena un ID de clase y hay una imagen de máscara por imagen de entrenamiento. Las etiquetas de segmentación de instancias en Ultralytics YOLO utilizan archivos de texto con coordenadas de polígono, una fila por instancia de objeto.

¿Qué valor de píxel se ignora durante el entrenamiento?

El valor de píxel 255 se utiliza como etiqueta de omisión. Estos píxeles se omiten durante el cálculo de pérdida y métricas, lo cual es útil para regiones vacías, píxeles sin etiquetar o clases fuera del conjunto de etiquetas de entrenamiento.

¿Deben coincidir los nombres de los archivos de máscara con los nombres de los archivos de imagen?

Sí. Cada máscara semántica debe tener el mismo nombre base que la imagen correspondiente. El cargador de conjuntos de datos reemplaza el componente de directorio images con masks_dir y busca los archivos de máscara coincidentes.

¿Puedo utilizar los IDs de etiqueta originales del conjunto de datos directamente?

Sí, si ya coinciden con los IDs de clase de tus names. Si el conjunto de datos de origen utiliza IDs no contiguos o incluye etiquetas que deben ignorarse, añade una sección label_mapping para convertir los valores de píxeles de origen a IDs de entrenamiento.

¿Puedo utilizar mi conjunto de datos de segmentación de instancias para entrenar la segmentación semántica?

Sí. Los conjuntos de datos de segmentación de instancias utilizan etiquetas de polígono Ultralytics YOLO (un .txt por imagen con filas <class-index> <x1> <y1> <x2> <y2> ...), y los mismos archivos pueden reutilizarse para la segmentación semántica; simplemente omite masks_dir del YAML del conjunto de datos. El cargador convierte los polígonos en máscaras por imagen al vuelo. Para conjuntos de datos multiclase (N > 1), se añade una clase background extra y el modelo se construye con N + 1 canales de salida. Para conjuntos de datos de clase única (N == 1), el entrenamiento permanece en 1 clase: la máscara muestra tu clase declarada como 1 y los píxeles no cubiertos como 0.

Comentarios