Segmentación de instancias con Ultralytics YOLO#
La segmentación de instancias va un paso más allá que la detección de objetos: consiste en identificar los objetos individuales de una imagen y separarlos del resto.
El resultado de un modelo de segmentación de instancias es un conjunto de máscaras o contornos que delimitan cada objeto de la imagen, junto con las etiquetas de clase y las puntuaciones de confianza de cada objeto. La segmentación de instancias resulta útil cuando necesitas saber no solo dónde están los objetos en una imagen, sino también cuál es su forma exacta.
Ver: Ejecuta la segmentación con un modelo Ultralytics YOLO preentrenado en Python.
Los modelos YOLO26 Segment usan el sufijo -seg, es decir, yolo26n-seg.pt, y están preentrenados con COCO.
Modelos#
A continuación se muestran los modelos YOLO26 Segment preentrenados con el conjunto de datos COCO.
Los modelos se descargan automáticamente desde la versión más reciente de Ultralytics al usarlos por primera vez.
| Modelo | tamaño (píxeles) | mAPcaja 50-95(integral) | mAPmáscara 50-95(integral) | Velocidad CPU ONNX (ms) | Velocidad T4 TensorRT10 (ms) | parámetros (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-seg | 640 | 39.6 | 33.9 | 53.3 ± 0.5 | 2.1 ± 0.0 | 2.7 | 9.3 |
| YOLO26s-seg | 640 | 47.3 | 40.0 | 118.4 ± 0.9 | 3.3 ± 0.0 | 10.4 | 34.5 |
| YOLO26m-seg | 640 | 52.5 | 44.1 | 328.2 ± 2.4 | 6.7 ± 0.1 | 23.6 | 121.7 |
| YOLO26l-seg | 640 | 54.4 | 45.5 | 387.0 ± 3.7 | 8.0 ± 0.1 | 28.0 | 140.1 |
| YOLO26x-seg | 640 | 56.5 | 47.0 | 787.0 ± 6.8 | 16.4 ± 0.1 | 62.8 | 314.0 |
- Los valores de mAPval corresponden a un único modelo y una única escala en el conjunto de datos COCO val2017.
Reprodúcelos conyolo segment val data=coco.yaml device=0 nms=False - La velocidad es el promedio calculado con imágenes de COCO val usando ONNX en CPU y TensorRT10 en una GPU NVIDIA T4.
Reprodúcela conyolo segment val data=coco.yaml batch=1 device=0|cpu nms=False - Los valores de Params y FLOPs corresponden a modelos fusionados tras plegar Conv/BatchNorm y eliminar la rama de detección no utilizada. Los checkpoints preentrenados conservan toda la arquitectura de entrenamiento y pueden mostrar valores más altos.
Estos puntos de control segmentan las 80 clases de COCO. Para segmentar categorías que no estén en esa lista sin volver a entrenar, consulta YOLOE, que recibe las clases como una indicación de texto, un ejemplo visual o un vocabulario integrado.
Consulta la vista previa no publicada de YOLO27 para ver resultados preliminares de cajas y máscaras en COCO.
Entrenar#
Entrena YOLO26n-seg con el conjunto de datos COCO8-seg durante 100 épocas con un tamaño de imagen de 640. Consulta la página de Configuración para ver la lista completa de argumentos disponibles.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-seg.yaml") # Crea un modelo nuevo a partir de YAML
model = YOLO("yolo26n-seg.pt") # Carga un modelo preentrenado (recomendado para el entrenamiento)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt") # Crea el modelo a partir de YAML y transfiere los pesos
# Entrenar el modelo
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Consulta la página Entrenamiento para ver todos los detalles del modo train. También puedes entrenar modelos de segmentación con el entrenamiento en la nube de Ultralytics Platform.
Formato del conjunto de datos#
Encontrarás información detallada sobre el formato de los conjuntos de datos de segmentación YOLO en la Guía de conjuntos de datos. Para convertir un conjunto de datos COCO JSON existente al formato YOLO, usa la función integrada convert_coco con use_segments=True, tal como se explica en la guía de conversión de COCO a YOLO. También puedes crear máscaras de segmentación con la anotación de Ultralytics Platform mediante herramientas de polígonos y anotación inteligente con tecnología SAM.
Validar#
Valida la precisión del modelo YOLO26n-seg entrenado. No hacen falta argumentos, ya que model conserva data y los argumentos de entrenamiento como atributos del modelo: path/to/best.pt del ejemplo de Entrenamiento valida con COCO8-seg. Los pesos oficiales registran una ruta al conjunto de datos de entrenamiento que no existe en tu equipo, así que, tras mostrar un aviso, usan el valor predeterminado de la tarea coco8-seg.yaml. Pasa data para validar con otro conjunto de datos.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-seg.pt") # carga un modelo oficial
model = YOLO("path/to/best.pt") # cargar un modelo personalizado
# Valida el modelo
metrics = model.val() # no hacen falta argumentos; se recuerdan el conjunto de datos y los ajustes
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # una lista que contiene mAP50-95(B) para cada categoría
metrics.box.image_metrics # diccionario de métricas por imagen para det, con precisión, exhaustividad, F1, TP, FP y FN
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # una lista que contiene mAP50-95(M) para cada categoría
metrics.seg.image_metrics # diccionario de métricas por imagen para seg, con precisión, exhaustividad, F1, TP, FP y FNPredecir#
Usa un modelo YOLO26n-seg entrenado para hacer predicciones sobre imágenes.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-seg.pt") # carga un modelo oficial
model = YOLO("path/to/best.pt") # cargar un modelo personalizado
# Haz predicciones con el modelo
results = model("https://ultralytics.com/images/bus.jpg") # haz una predicción sobre una imagen
# Accede a los resultados
for result in results:
xy = result.masks.xy # polígonos de máscaras en coordenadas de píxeles
xyn = result.masks.xyn # polígonos de máscaras normalizados
masks = result.masks.data # máscaras binarias, forma (N,H,W), tipo de datos torch.uint8Consulta todos los detalles del modo predict en la página de predicción.
Resultados de salida#
La segmentación de instancias de YOLO devuelve un objeto Results por imagen. Cada resultado almacena predicciones por objeto: cada instancia detectada tiene su propia máscara binaria, clase, confianza y caja.
| Atributo | Tipo | Forma | Descripción |
|---|---|---|---|
result.masks | Masks | (N) | Máscaras de instancia. |
result.masks.data | torch.uint8 | (N,H,W) | Máscaras binarias, con valores 0 o 1. |
result.masks.xy | np.float32 | list[(P,2)] | Polígonos de píxeles. |
result.masks.xyn | np.float32 | list[(P,2)] | Polígonos normalizados. |
result.boxes | Boxes | (N) | Cuadros/clases/confianzas de instancia. |
result.boxes.cls | torch.float32 | (N,) | ID de clase; conviértelos a int para obtener los nombres. |
Para consultar los campos Results específicos de cada tarea, visita la sección resultados de predicción por tarea.
Segmentación de instancias frente a segmentación semántica#
La segmentación de instancias se realiza a nivel de objeto: dos coches generan dos máscaras, dos cajas y dos puntuaciones de confianza. La segmentación semántica clasifica a nivel de píxel: esos mismos coches pasan a ser píxeles con el mismo ID de clase en un mapa de clases del tamaño de la imagen, sin cajas ni puntuaciones de confianza por objeto, ni una lista de polígonos predeterminada. Consulta la comparación campo por campo en la página de segmentación semántica.
Exportar#
Exporta un modelo YOLO26n-seg a otro formato, como ONNX, CoreML, etc.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-seg.pt") # carga un modelo oficial
model = YOLO("path/to/best.pt") # cargar un modelo personalizado
# Exporta el modelo
model.export(format="onnx")Los formatos de exportación disponibles para YOLO26-seg aparecen en la tabla siguiente. Puedes exportar a cualquier formato con el argumento format, es decir, format='onnx' o format='engine'. También puedes hacer predicciones o validar directamente con modelos exportados, por ejemplo, yolo predict model=yolo26n-seg.onnx. Cuando termine la exportación, se mostrarán ejemplos de uso de tu modelo.
CoreML admite NMS integrado (nms=True) para detección, segmentación de instancias y pose con formas estáticas. Las exportaciones de segmentación predeterminadas (nms=None) dejan NMS a cargo del consumidor.
| Formato | Argumento format | Modelo | Metadatos | Argumentos |
|---|---|---|---|---|
| PyTorch | - | yolo26n-seg.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-seg.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-seg.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-seg_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-seg.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-seg.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n-seg.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-seg.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-seg_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-seg_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-seg.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-seg_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-seg_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-seg_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-seg_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-seg_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-seg_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-seg_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-seg_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None usa de forma predeterminada salidas sin procesar para NMS externa. Establece nms=False para seleccionar una cabeza sin NMS disponible; los formatos no compatibles recurren a su ruta de salida nativa. Las entradas nms anteriores identifican los formatos que pueden integrar NMS con nms=True.
Consulta todos los detalles de export en la página Exportar.
Preguntas frecuentes#
Para entrenar un modelo de segmentación YOLO26 con un conjunto de datos personalizado, primero tienes que prepararlo en el formato de segmentación YOLO. Puedes usar la utilidad integrada
convert_cocopara convertir conjuntos de datos COCO JSON. Cuando el conjunto de datos esté listo, puedes entrenar el modelo con Python o con comandos de CLI:Ejemplofrom ultralytics import YOLO # Carga un modelo YOLO26 Segment preentrenado model = YOLO("yolo26n-seg.pt") # Entrenar el modelo results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)Consulta la página de Configuración para ver más argumentos disponibles.
La detección de objetos identifica y localiza objetos en una imagen dibujando cajas delimitadoras a su alrededor, mientras que la segmentación de instancias no solo identifica las cajas delimitadoras, sino que también delimita la forma exacta de cada objeto. Los modelos de segmentación de instancias YOLO26 generan máscaras o contornos que delimitan cada objeto detectado, lo cual resulta especialmente útil en tareas donde es importante conocer la forma precisa de los objetos, como el diagnóstico por imagen o la conducción autónoma.
Ultralytics YOLO26 es un modelo de última generación, conocido por su gran precisión y rendimiento en tiempo real, lo que lo hace ideal para tareas de segmentación de instancias. Los modelos YOLO26 Segment vienen preentrenados con el conjunto de datos COCO, lo que garantiza un rendimiento sólido con una gran variedad de objetos. Además, YOLO admite funciones de entrenamiento, validación, predicción y exportación con una integración sencilla, por lo que es muy versátil tanto para la investigación como para aplicaciones industriales.
Cargar y validar un modelo YOLO de segmentación preentrenado es sencillo. Así puedes hacerlo con Python y con CLI:
Ejemplofrom ultralytics import YOLO # Cargar un modelo preentrenado model = YOLO("yolo26n-seg.pt") # Valida el modelo metrics = model.val() print("Mean Average Precision for boxes:", metrics.box.map) print("Mean Average Precision for masks:", metrics.seg.map)Estos pasos te proporcionarán métricas de validación como la precisión media promedio (mAP), esencial para evaluar el rendimiento del modelo.
Exportar un modelo YOLO de segmentación al formato ONNX es sencillo y puedes hacerlo con Python o con comandos de CLI:
Ejemplofrom ultralytics import YOLO # Cargar un modelo preentrenado model = YOLO("yolo26n-seg.pt") # Exporta el modelo al formato ONNX model.export(format="onnx")Encontrarás más detalles sobre la exportación a distintos formatos en la página de Exportación.