Ultralytics YOLO27:

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 los objetos individuales de una misma clase. El objetivo del entrenamiento es un mapa de clases denso en el que 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 de Ultralytics YOLO y enumera las configuraciones de conjuntos de datos integradas disponibles para el entrenamiento y la validación.

Formatos de conjuntos de datos compatibles#

Se admiten dos formatos de etiquetas. El cargador del conjunto de datos selecciona las máscaras PNG cuando el YAML del conjunto de datos define una clave masks_dir o cuando ya existe una carpeta masks/ junto a tus imágenes en la raíz del conjunto de datos; de lo contrario, recurre a las etiquetas de polígonos de YOLO.

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, normalmente PNG, en la que cada valor de píxel es el índice de clase correspondiente al píxel de la imagen.

  • Los valores de píxel 0, 1, 2, ... representan los ID de clase de la asignación names del conjunto de datos.
  • El valor de píxel 255 se trata como la etiqueta de exclusión y se excluye del cálculo de la pérdida y de las métricas.
  • Los archivos de máscara deben utilizar el mismo nombre base que el archivo de imagen correspondiente, por ejemplo, frankfurt_000000_000294.png.
  • De forma predeterminada, las máscaras se resuelven como .png; si falta, también se aceptan otras extensiones de imagen compatibles. Utiliza formatos sin pérdida, como .png o .tiff, ya que la compresión con pérdida (por ejemplo, .jpg) corrompe los valores de píxel de los ID de clase.

La estructura predeterminada mantiene las imágenes y las máscaras en carpetas paralelas. El valor masks_dir del YAML del conjunto de datos sustituye 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 etiquetas de polígonos de YOLO#

Si tu conjunto de datos ya tiene etiquetas de polígonos de Ultralytics YOLO (un .txt por imagen con filas <class-index> <x1> <y1> <x2> <y2> ...), puedes entrenar directamente la segmentación semántica a partir de ellas, sin necesidad de convertirlas en máscaras PNG. Consulta el formato de conjunto de datos de segmentación de instancias para ver la estructura de las filas.

Esta opción se selecciona automáticamente cuando el YAML del conjunto de datos omite masks_dir y no existe ninguna carpeta masks/ junto a tus imágenes en la raíz del conjunto de datos; elimina o cambia de nombre cualquier carpeta masks/ sobrante, o el cargador volverá al modo de máscaras PNG y buscará allí las máscaras. Comportamiento:

  • Los polígonos se convierten en una máscara semántica por imagen durante la carga y se ordenan por área, de modo que los objetos más pequeños prevalecen sobre los más grandes en las regiones superpuestas.
  • Multiclase (N > 1 en names): se añade una clase background adicional después de las 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 corresponde al fondo.
  • Monoclase (N == 1 en names): sigue entrenándose como 1 clase. La máscara es binaria, con la clase declarada representada 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 por el relleno de las aumentaciones (por ejemplo, un recorte aleatorio) siguen utilizando 255 como etiqueta de exclusión.

Utiliza esta opción cuando tus datos ya estén etiquetados como polígonos de instancias 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 las imágenes de entrenamiento relativa a path o una ruta absoluta.
valRuta de las imágenes de validación relativa a path o una ruta absoluta.
testRuta opcional de las imágenes de prueba.
masks_dirNombre del directorio utilizado para las máscaras semánticas. Omite esta clave (sin ninguna carpeta masks/ en la raíz del conjunto de datos) para cambiar al formato de etiquetas de polígonos de YOLO.
namesAsignación de ID de clase a nombre de clase.
label_mappingAsignación opcional de los ID del conjunto de datos de origen a los ID de entrenamiento 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

Utiliza label_mapping cuando los ID de las máscaras de origen aún no coincidan con los ID de clase de entrenamiento consecutivos. Cityscapes y ADE20K incluyen asignaciones que convierten los ID de etiqueta originales en ID de entrenamiento de segmentación semántica de YOLO e ignoran las etiquetas no utilizadas.

Uso#

Entrena un modelo de segmentación semántica YOLO26 con Python o la 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 compatibles#

Ultralytics proporciona archivos YAML de conjuntos de datos de segmentación semántica para estos conjuntos de datos. Consulta la página de la tarea de segmentación semántica para ver la tabla completa de evaluación comparativa de modelos preentrenados.

  • Cityscapes: un dataset de segmentación semántica de escenas urbanas con 19 clases de entrenamiento.
  • Cityscapes8: un subconjunto de Cityscapes de 8 imágenes para realizar pruebas rápidas y comprobaciones de CI.
  • ADE20K: un dataset de interpretación 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 de partición como images/train y images/val.
  2. Guarda una máscara de un solo canal por imagen en las carpetas de máscaras correspondientes, como masks/train y masks/val.
  3. Asegúrate de que los valores de píxel de las máscaras sean ID de clase. Utiliza 255 para los píxeles que deban ignorarse.
  4. Crea un YAML del conjunto de datos con path, train, val, masks_dir y names.
  5. Añade label_mapping solo cuando sea necesario convertir los ID de las máscaras en ID de entrenamiento consecutivos.
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ígonos#

  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 del conjunto de datos con path, train, val y names; omite masks_dir.
  3. Asegúrate de que no exista ninguna carpeta masks/ junto a tus imágenes en la raíz del conjunto de datos; su mera presencia cambia el cargador al modo de máscaras PNG incluso sin masks_dir en el YAML.
  4. No añadas una entrada de "fondo" a names. En los conjuntos de datos multiclase, el cargador añade una automáticamente; en los conjuntos de datos monoclase, el entrenamiento se mantiene en 1 clase: la 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

Ultralytics Platform proporciona una herramienta de anotación de polígonos para la tarea semántica, además de anotación inteligente asistida por SAM: anota directamente en el navegador y exporta o entrena con el conjunto de datos resultante etiquetado con polígonos sin tener que configurar esta estructura manualmente.

Preguntas frecuentes#

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

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

  • Sí. Cada máscara semántica debe tener el mismo nombre base de archivo que la imagen correspondiente. El cargador del conjunto de datos sustituye el componente de directorio images por masks_dir y busca archivos de máscara coincidentes; si no encuentra una máscara .png, recurre a otras extensiones de imagen compatibles (.jpg, .tiff, etc.), aunque solo se recomiendan formatos sin pérdida, ya que este mecanismo alternativo no lo impone.

  • Sí, si ya coinciden con los ID de clase names. Si el conjunto de datos de origen utiliza ID no consecutivos o incluye etiquetas que deberían ignorarse, añade una sección label_mapping para convertir los valores de píxel de origen en ID de entrenamiento.

  • Sí. Los conjuntos de datos de segmentación de instancias utilizan etiquetas de polígonos de Ultralytics YOLO (un .txt por imagen con filas <class-index> <x1> <y1> <x2> <y2> ...) y los mismos archivos se pueden reutilizar para la segmentación semántica; solo omite masks_dir del YAML del conjunto de datos y asegúrate de que no exista ninguna carpeta masks/ junto a tus imágenes en la raíz del conjunto de datos (su mera presencia activa el modo de máscaras PNG incluso sin establecer masks_dir). A continuación, el cargador convierte los polígonos en máscaras por imagen sobre la marcha. En los conjuntos de datos multiclase (N > 1) se añade una clase background adicional y el modelo se construye con N + 1 canales de salida. En los conjuntos de datos monoclase (N == 1), el entrenamiento se mantiene en 1 clase: la máscara muestra la clase declarada como 1 y los píxeles no cubiertos como 0.

  • Ultralytics incluye archivos YAML de conjuntos de datos listos para usar para Cityscapes (19 clases de escenas urbanas), el subconjunto ligero Cityscapes8 para probar canalizaciones y ADE20K (150 clases de interpretación de escenas). Cada página documenta la lista exacta de clases, los pasos de descarga y un ejemplo de entrenamiento verificado.

Comentarios