Segmentación de instancias con Ultralytics YOLO#
La segmentación de instancias va un paso más allá de la detección de objetos e implica identificar objetos individuales en una imagen y segmentarlos del resto de la imagen.
La salida 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.
Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
Los modelos Segment de YOLO26 usan el sufijo -seg, es decir, yolo26n-seg.pt, y están preentrenados con COCO.
Modelos#
Aquí se muestran los modelos Segment preentrenados de YOLO26. Los modelos Detect, Segment y Pose están preentrenados con el conjunto de datos COCO, los modelos de segmentación semántica están preentrenados con Cityscapes y los modelos Classify están preentrenados con el conjunto de datos ImageNet.
Los modelos se descargan automáticamente de la versión más reciente de Ultralytics durante el primer uso.
| Modelo | tamaño (píxeles) | mAPcaja 50-95(e2e) | mAPmáscara 50-95(e2e) | 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úcelo conyolo val segment data=coco.yaml device=0 nms=False - La velocidad se calcula como la media en las imágenes de validación de COCO utilizando una instancia Amazon EC2 P4d.
Reprodúcela conyolo val segment data=coco.yaml batch=1 device=0|cpu nms=False - Los valores de Params y FLOPs corresponden a modelos fusionados después del plegado de Conv/BatchNorm y la eliminación de la rama de detección no utilizada. Los puntos de control preentrenados conservan la arquitectura de entrenamiento completa y pueden mostrar recuentos más altos.
Estos checkpoints segmentan las 80 clases de COCO. Para segmentar categorías que no estén en esa lista sin volver a entrenar, consulta YOLOE, que acepta las clases como una solicitud de texto, un ejemplo visual o un vocabulario integrado.
Consulta la vista previa inédita de YOLO27 para ver los resultados preliminares de cuadros 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. Para consultar la lista completa de argumentos disponibles, visita la página de Configuración.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.yaml") # build a new model from YAML
model = YOLO("yolo26n-seg.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Consulta todos los detalles del modo train en la página de entrenamiento. Los modelos de segmentación también se pueden entrenar con el entrenamiento en la nube de Ultralytics Platform.
Formato del conjunto de datos#
El formato del conjunto de datos de segmentación de YOLO se puede consultar en detalle en la Dataset Guide. Para convertir un conjunto de datos COCO JSON existente al formato de YOLO, utiliza la función integrada convert_coco con use_segments=True, tal como se describe en la COCO to YOLO guide. También puedes crear máscaras de segmentación con Ultralytics Platform annotation utilizando herramientas de polígonos y la anotación inteligente impulsada por SAM.
Val#
Valida la precisión del modelo YOLO26n-seg entrenado con el conjunto de datos COCO8-seg. No se necesitan argumentos, ya que model conserva su data de entrenamiento y sus argumentos como atributos del modelo.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val() # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # a list containing mAP50-95(B) for each category
metrics.box.image_metrics # per-image metrics dictionary for det with precision, recall, F1, TP, FP, and FN
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # a list containing mAP50-95(M) for each category
metrics.seg.image_metrics # per-image metrics dictionary for seg with precision, recall, F1, TP, FP, and FNPredecir#
Utiliza un modelo YOLO26n-seg entrenado para ejecutar predicciones en imágenes.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.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:
xy = result.masks.xy # mask polygons in pixel coordinates
xyn = result.masks.xyn # normalized mask polygons
masks = result.masks.data # binary masks, shape (N,H,W), dtype torch.uint8Consulta todos los detalles del modo predict en la página Predecir.
Salida de resultados#
La segmentación de instancias de YOLO devuelve un objeto Results por imagen. Cada resultado almacena predicciones a nivel de objeto, donde
cada instancia detectada tiene su propia máscara binaria, clase, confianza y cuadro.
| 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) | Cajas, clases y confianzas de las instancias. |
result.boxes.cls | torch.float32 | (N,) | ID de clase; conviértelos a int para obtener los nombres. |
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.
Diferencias con la segmentación semántica#
La segmentación de instancias es una segmentación a nivel de objeto: dos coches producen dos máscaras, dos cuadros y dos puntuaciones de confianza. La segmentación semántica es una clasificación a nivel de píxel: esos mismos coches se convierten en píxeles con el mismo ID de clase en un único mapa de clases del tamaño de la imagen, sin cuadros, confianzas ni una lista de polígonos por objeto de forma predeterminada.
Exportar#
Exporta un modelo YOLO26n-seg a otro formato, como ONNX, CoreML, etc.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")Los formatos de exportación disponibles para YOLO26-seg 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-seg.onnx. Una vez completada la exportación, se muestran ejemplos de uso para tu modelo.
CoreML admite NMS incrustado (nms=True) para detección, segmentación de instancias y pose con formas estáticas. Las exportaciones de segmentación predeterminadas (nms=None) dejan el NMS en manos 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 |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz, keras, 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 |
| 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 |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-seg.aimodel | ✅ | imgsz, 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 de YOLO26 en un conjunto de datos personalizado, primero necesitas preparar tu conjunto de datos en el formato de segmentación de YOLO. Puedes utilizar la utilidad integrada
convert_cocopara convertir conjuntos de datos COCO JSON. Una vez que tu conjunto de datos esté listo, puedes entrenar el modelo utilizando comandos de Python o de la CLI:Ejemplofrom ultralytics import YOLO # Load a pretrained YOLO26 segment model model = YOLO("yolo26n-seg.pt") # Train the model 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 dentro de una imagen dibujando cuadros delimitadores a su alrededor, mientras que la segmentación de instancias no solo identifica los cuadros delimitadores, sino que también delimita la forma exacta de cada objeto. Los modelos de segmentación de instancias de YOLO26 proporcionan máscaras o contornos que delimitan cada objeto detectado, lo que resulta especialmente útil en tareas en las que 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 reconocido por su alta precisión y rendimiento en tiempo real, lo que lo hace ideal para tareas de segmentación de instancias. Los modelos Segment de YOLO26 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 las funciones de entrenamiento, validación, predicción y exportación con una integración fluida, por lo que resulta muy versátil tanto para aplicaciones de investigación como industriales.
Cargar y validar un modelo de segmentación YOLO preentrenado es sencillo. Así puedes hacerlo mediante Python y CLI:
Ejemplofrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-seg.pt") # Validate the model 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), que son fundamentales para evaluar el rendimiento del modelo.
Exportar un modelo de segmentación YOLO al formato ONNX es sencillo y se puede hacer mediante comandos de Python o de CLI:
Ejemplofrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-seg.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.