Segmentación de instancias con Ultralytics YOLO#
La segmentación de instancias va un paso más allá de la detección de objetos y consiste en identificar objetos individuales en una imagen y segmentarlos del resto de la imagen.
El resultado de un modelo de segmentación de instancias es un conjunto de máscaras o contornos que delinean cada objeto en la imagen, junto con etiquetas de clase y puntuaciones de confianza para cada objeto. La segmentación de instancias es útil cuando no solo necesitas saber 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 YOLO26 Segment utilizan el sufijo -seg, es decir, yolo26n-seg.pt, y están preentrenados en COCO.
Modelos#
Aquí se muestran los modelos Segment preentrenados de YOLO26. Los modelos de detección, segmentación y pose están preentrenados en el conjunto de datos COCO, los modelos Semantic están preentrenados en el conjunto de datos Cityscapes y los modelos de clasificación están preentrenados en el conjunto de datos ImageNet.
Los Modelos se descargan automáticamente de la última versión de Ultralytics en su primer uso.
| Modelo | tamaño (píxeles) | mAPbox 50-95(e2e) | mAPmask 50-95(e2e) | Velocidad CPU ONNX (ms) | Velocidad T4 TensorRT10 (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-seg | 640 | 39.6 | 33.9 | 53.3 ± 0.5 | 2.1 ± 0.0 | 2.7 | 9.1 |
| YOLO26s-seg | 640 | 47.3 | 40.0 | 118.4 ± 0.9 | 3.3 ± 0.0 | 10.4 | 34.2 |
| YOLO26m-seg | 640 | 52.5 | 44.1 | 328.2 ± 2.4 | 6.7 ± 0.1 | 23.6 | 121.5 |
| YOLO26l-seg | 640 | 54.4 | 45.5 | 387.0 ± 3.7 | 8.0 ± 0.1 | 28.0 | 139.8 |
| YOLO26x-seg | 640 | 56.5 | 47.0 | 787.0 ± 6.8 | 16.4 ± 0.1 | 62.8 | 313.5 |
- Los valores de mAPval corresponden a un solo modelo y una sola escala en el conjunto de datos COCO val2017.
Reprodúcelo conyolo val segment data=coco.yaml device=0 - La velocidad se calcula como un promedio en las imágenes de validación de COCO utilizando una instancia Amazon EC2 P4d.
Reprodúcelo conyolo val segment data=coco.yaml batch=1 device=0|cpu - Los valores de Params y FLOPs corresponden al modelo fusionado después de
model.fuse(), el cual combina las capas Conv y BatchNorm y, para los modelos end2end, elimina la cabeza de detección auxiliar de uno a muchos. Los puntos de control preentrenados conservan toda la arquitectura de entrenamiento y pueden mostrar recuentos mayores.
Estos puntos de control segmentan las 80 clases de COCO. Para segmentar categorías fuera de esa lista sin reentrenar, consulta YOLOE, que toma las clases como un prompt de texto, un ejemplo visual o un vocabulario integrado.
Entrenar#
Entrena YOLO26n-seg en el conjunto de datos COCO8-seg durante 100 épocas con un tamaño de imagen de 640. Para ver una lista completa de los argumentos disponibles, consulta 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 Train. 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 Guía de conjuntos de datos. Para convertir tu conjunto de datos existente desde otros formatos (como COCO, etc.) al formato YOLO, utiliza la herramienta JSON2YOLO de Ultralytics. También puedes crear máscaras de segmentación con la anotación de Ultralytics Platform utilizando herramientas de polígonos y anotación inteligente impulsada por SAM.
Validar#
Valida la precisión del modelo YOLO26n-seg entrenado en el conjunto de datos COCO8-seg. No se necesitan argumentos, ya que el model conserva su data y sus argumentos de entrenamiento 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 Predict.
Resultado de la salida#
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 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, 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/confianzas de instancia. |
result.boxes.cls | torch.float32 | (N,) | ID de clase; convertidos a int para obtener los nombres. |
Para ver los campos de Results específicos de cada tarea en todas ellas, consulta la sección Predict Results by Task.
En qué se diferencia esto de 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 cajas 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 mapa de clases del tamaño de una imagen, sin cajas por objeto, confianzas ni lista de polígonos predeterminada.
Exportar#
Exporta un modelo YOLO26n-seg a un formato diferente 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 de YOLO26-seg disponibles se muestran en la tabla siguiente. Puedes exportar a cualquier formato usando el argumento format, es decir, format='onnx' o format='engine'. Puedes predecir o validar directamente en modelos exportados, es decir, yolo predict model=yolo26n-seg.onnx. Los ejemplos de uso se muestran para tu modelo una vez que se completa la exportación.
Las canalizaciones NMS integradas de CoreML (nms=True) solo admiten modelos de detección de objetos. Las exportaciones de segmentación a CoreML generan una advertencia y fuerzan nms=False, produciendo un modelo sin procesar sin NMS.
| Formato | Argumento de 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 |
Consulta todos los detalles de export en la página Export.
FAQ#
Para entrenar un modelo de segmentación YOLO26 en un conjunto de datos personalizado, primero debes preparar tu conjunto de datos en el formato de segmentación YOLO. Puedes utilizar herramientas como JSON2YOLO para convertir conjuntos de datos de otros formatos. Una vez que tu conjunto de datos esté listo, puedes entrenar el modelo utilizando Python o comandos de 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 Configuration para ver más argumentos disponibles.
La detección de objetos identifica y localiza objetos dentro de una imagen dibujando cajas delimitadoras a su alrededor, mientras que la segmentación de instancias no solo identifica las cajas, sino que también delinea la forma exacta de cada objeto. Los modelos de segmentación de instancias de YOLO26 proporcionan máscaras o contornos que delinean cada objeto detectado, lo cual es especialmente útil para tareas donde es importante conocer la forma precisa de los objetos, como en imágenes médicas o 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 YOLO26 Segment vienen preentrenados en el conjunto de datos COCO, lo que garantiza un rendimiento sólido en una variedad de objetos. Además, YOLO admite funciones de entrenamiento, validación, predicción y exportación con una integración fluida, lo que lo hace muy versátil tanto para aplicaciones de investigación como industriales.
Cargar y validar un modelo de segmentación YOLO preentrenado es sencillo. Aquí tienes cómo hacerlo tanto con Python como con 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 de la Media (mAP), que es crucial para evaluar el rendimiento del modelo.
Exportar un modelo de segmentación YOLO al formato ONNX es simple y puede realizarse mediante comandos de Python o 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 detalles sobre la exportación a varios formatos, consulta la página Export.