Segmentación semántica
La segmentación semántica asigna una etiqueta de clase a cada píxel de una imagen, produciendo un mapa de clases denso que cubre toda la escena. A diferencia de la segmentación de instancias, que separa objetos individuales, la segmentación semántica agrupa todos los píxeles de la misma clase independientemente de cuántos objetos distintos estén presentes.
El resultado de un modelo de segmentación semántica es un mapa de clases único de altura por anchura donde cada valor de píxel corresponde a una ID de clase predicha. Esto hace que la segmentación semántica sea ideal para tareas de análisis de escenas como la conducción autónoma, la imagen médica y el mapeo de cobertura terrestre.
Utiliza task=semantic o la tarea CLI yolo semantic para la segmentación semántica. Los archivos del modelo de segmentación semántica YOLO26 utilizan 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 desde la última versión de Ultralytics durante el primer uso.
| Modelo | tamaño (píxeles) | mIoUval | Velocidad RTX3090 PyTorch (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 22.7 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 88.8 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 304.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.9 | 384.7 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.2 | 861.7 |
- Los valores de mIoUval son para un modelo único a escala única en el conjunto de validación de Cityscapes.
Reproduce conyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - Las métricas de velocidad se promedian sobre imágenes de validación de Cityscapes utilizando una instancia Amazon EC2 P4d.
Reproduce conyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - Los valores de Params (parámetros) y FLOPs son para el modelo fusionado después de
model.fuse(), que combina las capas Conv y BatchNorm. Los puntos de control preentrenados conservan la arquitectura de entrenamiento completa y pueden mostrar recuentos más altos.
Entrenar
Entrena YOLO26n-sem en el conjunto de datos Cityscapes8 durante 100 épocas con un tamaño de imagen de 1024. Para obtener una lista completa de los argumentos disponibles, consulta la página de Configuración.
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 los detalles completos del modo train en la página Train.
Formato del conjunto de datos
Los conjuntos de datos de segmentación semántica utilizan imágenes de máscara de un solo canal, típicamente PNG, donde cada valor de píxel representa una ID de clase. Los píxeles con valor 255 se tratan como "ignorar" 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 obtener detalles sobre el formato. Los conjuntos de datos compatibles incluyen Cityscapes y ADE20K.
Validar
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 utilice el YAML del conjunto de datos previsto.
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 accuracyPredicción
Utiliza un modelo YOLO26n-sem entrenado para ejecutar predicciones en imágenes.
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 # height x width class map (torch.Tensor)Consulta los detalles completos del modo predict en la página Predict.
Exportar
Exporta un modelo YOLO26n-sem a un formato diferente como ONNX, CoreML, etc.
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 encuentran en la tabla a continuación. Puedes exportar a cualquier formato utilizando el argumento format, por ejemplo, format='onnx' o format='engine'. Puedes predecir o validar directamente en los modelos exportados, por ejemplo, yolo predict model=yolo26n-sem.onnx. Se muestran ejemplos de uso para tu modelo una vez finalizada la exportación.
| Formato | Argumento format | Modelo | Metadatos | Argumentos |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n-sem.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n-sem_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DeepX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
Consulta los detalles completos de export en la página Export.
Preguntas frecuentes
¿Cómo entreno un modelo de segmentación semántica YOLO26 en un conjunto de datos personalizado?
Para entrenar un modelo de segmentación semántica YOLO26 en un conjunto de datos personalizado, necesitas preparar imágenes de máscara PNG donde cada valor de píxel represente una 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 tus directorios de imágenes y máscaras, luego entrena el modelo:
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.
¿Cuál es la diferencia entre la segmentación de instancias y la segmentación semántica?
La segmentación de instancias y la segmentación semántica son tareas a nivel de píxel, pero difieren en un aspecto clave:
- 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 en una escena comparten la misma etiqueta de clase.
- Segmentación de instancias identifica cada objeto individual por separado, produciendo máscaras distintas para cada objeto aunque pertenezcan a la misma clase.
La segmentación semántica es la más adecuada para tareas de comprensión de escenas como la conducción autónoma y el mapeo de cobertura terrestre, mientras que la segmentación de instancias es preferible cuando contar o rastrear objetos individuales es importante.
¿Puedo utilizar datos de segmentación de instancias para entrenar la segmentación semántica?
Sí. Si tu conjunto de datos utiliza etiquetas de polígono de Ultralytics YOLO (un .txt por imagen), omite masks_dir del YAML del conjunto de datos y el cargador convertirá los polígonos a máscaras semánticas por imagen sobre la marcha. Para conjuntos de datos multiclase (N > 1), se añade automáticamente una clase background extra a names. Para conjuntos de datos de una sola clase (N == 1), 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. Consulta la Guía de conjuntos de datos de segmentación semántica para obtener más detalles.
¿Qué conjuntos de datos son compatibles para la segmentación semántica?
Ultralytics YOLO26 proporciona configuraciones integradas para varios conjuntos de datos de segmentación semántica:
- Cityscapes: Escenas de calles urbanas con 19 clases, ampliamente utilizadas para la investigación de conducción autónoma.
- ADE20K: Un conjunto de datos de análisis de escenas a gran escala con 150 clases.
También puedes utilizar cualquier conjunto de datos personalizado que proporcione anotaciones de máscara PNG donde los valores de los píxeles correspondan a IDs de clase.
¿Cómo valido un modelo de segmentación semántica YOLO26 preentrenado?
Valida un modelo de segmentación semántica YOLO26 preentrenado con el YAML del conjunto de datos utilizado para la evaluación:
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 sobre unión media (mIoU) y la precisión de píxeles, que son medidas estándar para evaluar el rendimiento de la segmentación semántica.
¿Cómo puedo exportar un modelo de segmentación semántica YOLO26 al formato ONNX?
Exporta un modelo de segmentación semántica YOLO26 al formato ONNX con Python o comandos CLI:
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 detalles sobre la exportación a varios formatos, consulta la página Export.