Ultralytics YOLO27:

Segmentación semántica con Ultralytics YOLO#

Semantic segmentation examples

La segmentación semántica asigna una etiqueta de clase a cada píxel de una imagen, lo que produce un mapa de clases denso que cubre toda la escena. A diferencia de la segmentación de instancias, que separa los objetos individuales, la segmentación semántica agrupa todos los píxeles de la misma clase, independientemente del número de objetos distintos presentes.



Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial

La salida de un modelo de segmentación semántica es un único mapa de clases de alto por ancho, donde el valor de cada píxel corresponde a un ID de clase predicho. Esto hace que la segmentación semántica sea ideal para tareas de interpretación de escenas, como la conducción autónoma, el análisis de imágenes médicas y la cartografía de la cobertura terrestre.

Consejo

Usa la tarea task=semantic o la tarea yolo semantic de la CLI para la segmentación semántica. Los archivos de modelo de segmentación semántica YOLO26 usan el sufijo -sem, como yolo26n-sem.pt.

Modelos#

A continuación se muestran los modelos de segmentación semántica YOLO26 preentrenados en el conjunto de datos Cityscapes.

Los modelos se descargan automáticamente de la versión más reciente de Ultralytics durante el primer uso.

Modelotamaño
(píxeles)
mIoUvalVelocidad
RTX3090 PyTorch
(ms)
parámetros
(M)
FLOPs
(B)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.623.8
YOLO26s-sem1024 × 204880.88.4 ± 0.06.591.0
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3305.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.8388.2
YOLO26x-sem1024 × 204883.648.9 ± 0.240.1866.9
  • Los valores de mIoUval corresponden a un único modelo y una única escala en el conjunto de validación de Cityscapes.
    Reprodúcelos con yolo semantic val data=cityscapes.yaml device=0 imgsz=2048
  • Las métricas de velocidad son promedios calculados sobre las imágenes de validación de Cityscapes mediante una instancia RTX3090.
    Reprodúcelas con yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048
  • Los valores de Params y FLOPs corresponden al modelo fusionado después de model.fuse(), que combina las capas Conv y BatchNorm. Los checkpoints preentrenados conservan la arquitectura completa de entrenamiento y pueden mostrar recuentos superiores.

A continuación se muestran los modelos de segmentación semántica YOLO26 preentrenados en el conjunto de datos ADE20K.

Los modelos se descargan automáticamente de la versión más reciente de Ultralytics durante el primer uso.

Modelotamaño
(píxeles)
mIoUvalVelocidad
RTX3090 PyTorch
(ms)
parámetros
(M)
FLOPs
(B)
YOLO26n-sem-ade20k64038.83.9 ± 0.21.64.5
YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.5
YOLO26m-sem-ade20k64047.44.7 ± 0.314.459.6
YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.2
YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.4
  • Los valores de mIoUval corresponden a un único modelo y una única escala en el conjunto de validación de ADE20K.
    Reprodúcelos con yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, sustituyendo yolo26n-sem-ade20k.pt por el checkpoint yolo26*-sem-ade20k.pt deseado.
  • Las métricas de velocidad son promedios calculados sobre las imágenes de validación de ADE20K mediante una instancia RTX3090.
    Reprodúcelas con yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, sustituyendo yolo26n-sem-ade20k.pt por el checkpoint yolo26*-sem-ade20k.pt deseado.
  • Los valores de Params y FLOPs corresponden al modelo fusionado después de model.fuse(), que combina las capas Conv y BatchNorm. Los checkpoints preentrenados conservan la arquitectura completa de entrenamiento y pueden mostrar recuentos superiores.

Consulta la vista previa de YOLO27 no publicada para ver los resultados preliminares de mIoU en Cityscapes.

Entrenar#

Entrena YOLO26n-sem en el conjunto de datos Cityscapes8 durante 100 épocas con un tamaño de imagen de 1024. Consulta la página de Configuración para ver la lista completa de argumentos disponibles.

Ejemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.yaml")  # build a new model from YAML
model = YOLO("yolo26n-sem.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

Consulta todos los detalles del modo train en la página de Entrenamiento. Los modelos de segmentación semántica también se pueden entrenar con el entrenamiento en la nube de Ultralytics Platform.

Formato del conjunto de datos#

Los conjuntos de datos de segmentación semántica usan imágenes de máscara de un solo canal, normalmente PNG, donde el valor de cada píxel representa un ID de clase. Los píxeles con valor 255 se tratan como "ignore" y se excluyen del cálculo de la pérdida. El YAML del conjunto de datos debe especificar las rutas a las imágenes y a sus directorios de máscaras correspondientes. Consulta la Guía de conjuntos de datos de segmentación semántica para conocer los detalles del formato. Entre los conjuntos de datos compatibles se incluyen Cityscapes y ADE20K. Puedes gestionar y etiquetar conjuntos de datos semánticos con la anotación de Ultralytics Platform.

Val#

Valida la precisión del modelo YOLO26n-sem entrenado en un conjunto de datos de segmentación semántica. Pasa data explícitamente para que la validación use el YAML del conjunto de datos previsto.

Ejemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou  # mean Intersection over Union
metrics.pixel_accuracy  # overall pixel accuracy

Predecir#

Usa un modelo YOLO26n-sem entrenado para ejecutar predicciones sobre imágenes.

Ejemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    semantic_mask = result.semantic_mask.data  # class map, shape (H,W), integer dtype selected by class count

Consulta todos los detalles del modo predict en la página Predecir.

Salida de resultados#

La segmentación semántica de YOLO devuelve un objeto Results por imagen. Cada resultado almacena un mapa de clases denso para toda la imagen, en lugar de una lista de máscaras de objetos. Los píxeles con la misma clase predicha comparten el mismo ID de clase, aunque pertenezcan a objetos distintos.

AtributoTipoFormaDescripción
result.semantic_maskSemanticMask(H,W)Mapa de clases denso.
result.semantic_mask.datatorch.uint8
torch.int16
torch.int32
(H,W)IDs de clase; el dtype se selecciona según el número de clases.
result.masks--Sin máscaras de instancias.
result.boxes--Sin cajas ni confianzas de instancia.
result.masks.xy--No hay polígonos de forma predeterminada.

Para consultar los campos específicos de la tarea de Results en todas las tareas, visita la sección Resultados de predicción por tarea.

Calidad de los límites de la máscara

La segmentación semántica predice un mapa de clases denso y después cambia su tamaño para ajustarlo de nuevo a las dimensiones de la imagen con fines de visualización y uso posterior. Por tanto, las estructuras muy finas, como las marcas de carril, las líneas de pista, los postes o los cables, pueden verse escalonadas cuando la inferencia se ejecuta con un imgsz mucho menor que la resolución de la imagen original. Si los límites aparecen irregulares, vuelve a probar primero el modelo PyTorch nativo .pt con un imgsz mayor, como 1024, 1280 o el valor práctico más cercano al tamaño de la imagen de origen. Usa modelos exportados solo después de confirmar que la salida de .pt es aceptable, ya que las entradas de menor resolución no pueden recuperar detalles finos que no estaban presentes en el mapa de clases predicho.

Segmentación de instancias frente a segmentación semántica#

AspectoSegmentación de instancias (task="segment")Segmentación semántica (task="semantic")
Objetivo de la predicciónSegmentar cada objeto detectado por separadoAsignar un ID de clase a cada píxel
Campo de salidaresult.masksresult.semantic_mask
Datos principalesresult.masks.dataresult.semantic_mask.data
Forma(N,H,W)(H,W)
Valores de píxelValores de máscara binaria: 0 o 1IDs de clase: 0, 1, 2, ...
Dtypetorch.uint8torch.uint8
torch.int16
torch.int32
Objetos de la misma claseSe mantienen como instancias separadasSe fusionan en la misma región de clase
PolígonosSí, mediante result.masks.xy y result.masks.xynNo hay salida de polígonos de forma predeterminada
BBoxes y confianzaSí, mediante result.boxesNo hay BBox ni puntuaciones de confianza por instancia
Uso habitualConteo, seguimiento, recorte y medición a nivel de objetoEtiquetado denso de escenas, zonas transitables, cobertura terrestre y regiones médicas

Exportar#

Exporta un modelo YOLO26n-sem a otro formato, como ONNX, CoreML, etc.

Ejemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Export the model
model.export(format="onnx")

Los formatos de exportación de segmentación semántica YOLO26 disponibles se muestran en la tabla siguiente. Puedes exportar a cualquier formato mediante el argumento format, es decir, format='onnx' o format='engine'. Puedes predecir o validar directamente con modelos exportados, es decir, yolo predict model=yolo26n-sem.onnx. Tras completar la exportación, se muestran ejemplos de uso para tu modelo.

FormatoArgumento formatModeloMetadatosArgumentos
PyTorch-yolo26n-sem.pt-
TorchScripttorchscriptyolo26n-sem.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-sem_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-sem_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-sem.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-sem_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-sem_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-sem.aimodelimgsz, batch, quantize

nms=None se establece por defecto en salidas sin procesar para la NMS externa. Configura nms=False para seleccionar una cabeza libre de NMS disponible; los formatos no compatibles recurren a su ruta de salida nativa. Las entradas nms anteriores identifican los formatos que pueden incrustar la NMS con nms=True.

Consulta todos los detalles de export en la página Exportar.

Preguntas frecuentes#

  • Para entrenar un modelo de segmentación semántica YOLO26 con un conjunto de datos personalizado, debes preparar imágenes de máscara PNG donde el valor de cada píxel represente un ID de clase (0, 1, 2, ...) y los píxeles con valor 255 se ignoren durante el entrenamiento. Crea un archivo YAML del conjunto de datos que apunte a los directorios de imágenes y máscaras y, después, entrena el modelo:

    Ejemplo
    from ultralytics import YOLO
    
    # Load a pretrained YOLO26 semantic segmentation model
    model = YOLO("yolo26n-sem.pt")
    
    # Train the model
    results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)

    Consulta la página de Configuración para ver más argumentos disponibles.

  • La segmentación de instancias y la segmentación semántica son tareas a nivel de píxel, pero se diferencian en un aspecto clave:

    • La segmentación semántica asigna una etiqueta de clase a cada píxel, pero no distingue entre objetos individuales de la misma clase. Por ejemplo, todos los coches de una escena comparten la misma etiqueta de clase.
    • La segmentación de instancias identifica cada objeto individual por separado y produce máscaras distintas para cada objeto, aunque pertenezcan a la misma clase.

    La segmentación semántica es más adecuada para tareas de comprensión de escenas, como la conducción autónoma y la cartografía de la cobertura terrestre, mientras que la segmentación de instancias es preferible cuando es importante contar o seguir objetos individuales.

  • Sí. Si tu conjunto de datos usa etiquetas de polígonos de Ultralytics YOLO (un .txt por imagen), 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 semánticas por imagen sobre la marcha. En conjuntos de datos multiclase (N > 1), se añade automáticamente una clase background adicional a names. En conjuntos de datos de una sola clase (N == 1), 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. Consulta la Guía de conjuntos de datos de segmentación semántica para obtener más información.

  • Ultralytics YOLO26 proporciona configuraciones integradas para varios conjuntos de datos de segmentación semántica:

    • Cityscapes: escenas urbanas de calles con 19 clases, ampliamente utilizadas en la investigación sobre conducción autónoma.
    • ADE20K: un conjunto de datos de interpretación de escenas a gran escala con 150 clases.

    También puedes usar cualquier conjunto de datos personalizado que proporcione anotaciones de máscaras PNG cuyos valores de píxel correspondan a IDs de clase.

  • Valida un modelo de segmentación semántica YOLO26 preentrenado con el YAML del conjunto de datos utilizado para la evaluación:

    Ejemplo
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-sem.pt")
    
    # Validate the model
    metrics = model.val(data="cityscapes.yaml")
    print("Mean IoU:", metrics.miou)
    print("Pixel Accuracy:", metrics.pixel_accuracy)

    Estos pasos te proporcionarán métricas de validación como la intersección media sobre unión (mIoU) y la precisión a nivel de píxel, que son medidas estándar para evaluar el rendimiento de la segmentación semántica.

  • Exporta un modelo de segmentación semántica YOLO26 al formato ONNX con comandos de Python o de la CLI:

    Ejemplo
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-sem.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")

    Para obtener más información sobre la exportación a distintos formatos, consulta la página Exportar.

Comentarios