Descripción general de los conjuntos de datos de segmentación de instancias#
La segmentación de instancias es una tarea de visión artificial que consiste en identificar y delimitar objetos individuales dentro de una imagen. Esta guía ofrece una descripción general de los formatos de conjuntos de datos compatibles con Ultralytics YOLO para tareas de segmentación de instancias, junto con instrucciones para preparar, convertir y usar estos conjuntos de datos para entrenar tus modelos.
Formatos de conjuntos de datos compatibles#
Formato Ultralytics YOLO#
El formato de etiquetas del conjunto de datos que se usa para entrenar modelos de segmentación YOLO es el siguiente:
- Un archivo de texto por imagen: cada imagen del conjunto de datos tiene un archivo de texto correspondiente con el mismo nombre que el archivo de imagen y la extensión ".txt".
- Una fila por objeto: cada fila del archivo de texto corresponde a una instancia de objeto en la imagen.
- Información del objeto por fila: cada fila contiene la siguiente información sobre la instancia del objeto:
- Índice de clase del objeto: un número entero que representa la clase del objeto (por ejemplo, 0 para una persona, 1 para un coche, etc.).
- Coordenadas del polígono del objeto: los puntos
(x, y)que delimitan la máscara del objeto, normalizados para que estén entre 0 y 1.
El formato de una sola fila del archivo del conjunto de datos de segmentación es el siguiente:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>En este formato, <class-index> es el índice de la clase del objeto y <x1> <y1> <x2> <y2> ... <xn> <yn> son las coordenadas normalizadas del polígono de la máscara de segmentación del objeto (los valores están en [0, 1] respecto a la anchura y la altura de la imagen). Las coordenadas están separadas por espacios.
Aquí tienes un ejemplo del formato de conjunto de datos YOLO para una imagen con dos objetos, uno con un segmento de 3 puntos y otro con uno de 5 puntos.
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- La longitud de cada fila no tiene que ser igual.
- Cada etiqueta de segmentación debe tener un mínimo de 3 puntos
(x, y):<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - Todos los objetos necesitan un polígono. Las filas en formato de detección (
<class-index> <x_center> <y_center> <width> <height>) no incluyen ninguno, y se rechaza un conjunto de datos de segmentación cuyo número de cajas y polígonos no coincide, con unValueErroral cargar sus etiquetas.
Formato YAML del conjunto de datos#
El framework Ultralytics usa un formato de archivo YAML para definir la configuración del conjunto de datos y del modelo para entrenar modelos de segmentación. Aquí tienes un ejemplo del formato YAML utilizado para definir un conjunto de datos de segmentación:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipLos campos train, val y test indican las imágenes de entrenamiento, validación y prueba. Cada uno admite un directorio, una lista de directorios o un archivo *.txt que enumera una ruta de imagen por línea (las rutas que empiezan por ./ se resuelven con respecto al archivo *.txt). Un archivo *.txt resulta útil para entrenar con un subconjunto de un directorio, omitir imágenes sin etiquetar o combinar imágenes de varias fuentes en una misma partición.
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames es un diccionario de nombres de clases. El orden de los nombres debe coincidir con el orden de los índices de clase de los objetos en los archivos del conjunto de datos YOLO.
Uso#
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-seg.pt") # cargar un modelo preentrenado (recomendado para entrenar)
# Entrenar el modelo
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Conjuntos de datos compatibles#
Ultralytics YOLO admite diversos conjuntos de datos para tareas de segmentación de instancias. Aquí tienes una lista de los más utilizados. La mayoría también están alojados en Ultralytics Platform, donde puedes explorar las imágenes y anotaciones, consultar las estadísticas del conjunto de datos y clonarlo para entrenar en la nube.
- Carparts-seg: un conjunto de datos especializado en la segmentación de piezas de coches, ideal para aplicaciones de automoción. Incluye diversos vehículos con anotaciones detalladas de cada componente.
- COCO: un conjunto de datos completo para la detección de objetos, la segmentación y la generación de descripciones, con más de 200 000 imágenes etiquetadas de una amplia variedad de categorías.
- COCO8-seg: un subconjunto compacto de 8 imágenes de COCO diseñado para probar rápidamente el entrenamiento de modelos de segmentación, ideal para comprobaciones de CI y validación de flujos de trabajo en el repositorio
ultralytics. - COCO128-seg: un conjunto de datos más pequeño para tareas de segmentación de instancias, con un subconjunto de 128 imágenes de COCO y anotaciones de segmentación.
- Crack-seg: un conjunto de datos diseñado para segmentar grietas en distintas superficies. Es esencial para el mantenimiento de infraestructuras y el control de calidad, y proporciona imágenes detalladas para entrenar modelos que identifiquen daños estructurales.
- Package-seg: un conjunto de datos dedicado a segmentar distintos tipos de materiales y formas de embalaje. Resulta especialmente útil para la logística y la automatización de almacenes, ya que ayuda a desarrollar sistemas de manipulación y clasificación de paquetes.
Añadir tu propio conjunto de datos#
Si tienes tu propio conjunto de datos y quieres usarlo para entrenar modelos de segmentación con el formato Ultralytics YOLO, asegúrate de que siga el formato especificado anteriormente en «Formato Ultralytics YOLO». Convierte tus anotaciones al formato requerido e indica las rutas, el número de clases y los nombres de las clases en el archivo de configuración YAML. Mantén images/ y labels/ en carpetas separadas al mismo nivel y con una estructura de subcarpetas coincidente; si colocas archivos de etiquetas .txt en la carpeta de imágenes, el modelo podría no detectar las etiquetas.
Migrar o convertir formatos de etiquetas#
Convertir del formato del conjunto de datos COCO al formato YOLO#
Puedes convertir fácilmente las etiquetas del popular formato de conjunto de datos COCO al formato YOLO con el siguiente fragmento de código:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Esta herramienta de conversión permite convertir el conjunto de datos COCO o cualquier conjunto de datos en formato COCO al formato Ultralytics YOLO.
Recuerda comprobar que el conjunto de datos que quieres usar sea compatible con tu modelo y siga las convenciones de formato necesarias. Un formato correcto es esencial para entrenar modelos de segmentación eficaces.
Anotación automática#
La anotación automática es una función esencial que permite generar un conjunto de datos de segmentación con un modelo de detección preentrenado. Te permite anotar rápida y correctamente un gran número de imágenes sin necesidad de etiquetarlas manualmente, lo que ahorra tiempo y esfuerzo.
Generar un conjunto de datos de segmentación con un modelo de detección#
Para anotar automáticamente tu conjunto de datos con el framework Ultralytics, puedes usar la función auto_annotate como se muestra a continuación:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
data | str | obligatorio | Ruta al directorio que contiene las imágenes de destino para anotarlas o segmentarlas. |
det_model | str | 'yolo26x.pt' | Ruta al modelo de detección YOLO para la detección inicial de objetos. |
sam_model | str | 'sam_b.pt' | Ruta al modelo SAM para la segmentación (admite los pesos de SAM, SAM 2, MobileSAM y SAM 3). |
device | str | '' | Dispositivo de cálculo (por ejemplo, 'cuda:0', 'cpu' o '' para la detección automática del dispositivo). |
conf | float | 0.25 | Umbral de confianza de detección YOLO para filtrar detecciones poco fiables. |
iou | float | 0.45 | Umbral de IoU para la supresión no máxima, que permite filtrar cuadros superpuestos. |
imgsz | int | 640 | Tamaño de entrada para cambiar el tamaño de las imágenes (se redondea al múltiplo de 32 superior si es necesario). |
max_det | int | 300 | Número máximo de detecciones por imagen para optimizar el uso de memoria. |
classes | list[int] | None | Lista de índices de clases que se deben detectar (por ejemplo, [0, 1] para persona y bicicleta). |
output_dir | str | None | Directorio donde guardar las anotaciones (por defecto, el directorio hermano <data>_auto_annotate_labels). |
La función auto_annotate recibe la ruta a tus imágenes, junto con argumentos opcionales para especificar los modelos de detección preentrenados, por ejemplo, YOLO26, YOLO11 u otros modelos, y los modelos de segmentación, por ejemplo, SAM, SAM 2, MobileSAM o SAM 3, el dispositivo en el que se ejecutarán los modelos y el directorio de salida donde se guardarán los resultados anotados.
Al aprovechar la potencia de los modelos preentrenados, la anotación automática puede reducir considerablemente el tiempo y el esfuerzo necesarios para crear conjuntos de datos de segmentación de alta calidad. Esta función resulta especialmente útil para investigadores y desarrolladores que trabajan con grandes colecciones de imágenes, ya que les permite centrarse en el desarrollo y la evaluación de modelos en lugar de realizar anotaciones manuales.
Visualizar anotaciones de conjuntos de datos#
Antes de entrenar tu modelo, suele ser útil visualizar las anotaciones de tu conjunto de datos para comprobar que sean correctas. Ultralytics proporciona una función de utilidad para este fin. Esta función solo lee etiquetas de cajas en formato de detección (<class-index> <x_center> <y_center> <width> <height>), por lo que no puede analizar archivos de etiquetas de polígonos de segmentación:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Define el mapa de etiquetas con todas las etiquetas de clase anotadas.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Ruta de la imagen de entrada.
"path/to/annotations.txt", # Ruta del archivo de anotaciones de la imagen.
label_map,
)Esta función dibuja cajas delimitadoras, etiqueta los objetos con los nombres de sus clases y ajusta el color del texto para mejorar la legibilidad. Así, te ayuda a identificar y corregir errores de anotación antes del entrenamiento.
Convertir máscaras de segmentación al formato YOLO#
Si tienes imágenes de máscaras en escala de grises donde el valor de cada píxel es el índice de clase + 1 (0 corresponde al fondo), puedes convertirlas al formato de segmentación YOLO con:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# Para conjuntos de datos como COCO, con 80 clases
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)Esta utilidad convierte las imágenes de máscaras al formato de segmentación YOLO y las guarda en el directorio de salida especificado.
Preguntas frecuentes#
Ultralytics YOLO admite varios formatos de conjuntos de datos para la segmentación de instancias; el principal es el propio formato Ultralytics YOLO. Cada imagen del conjunto de datos necesita un archivo de texto correspondiente con información de los objetos, dividida en varias filas (una por objeto), que indique el índice de clase y las coordenadas normalizadas del polígono. Para obtener instrucciones más detalladas sobre el formato de conjuntos de datos YOLO, visita Descripción general de los conjuntos de datos de segmentación de instancias.
Convertir anotaciones del formato COCO al formato YOLO es sencillo con las herramientas de Ultralytics. Puedes usar la función
convert_cocodel móduloultralytics.data.converter:from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Este script convierte las anotaciones de tu conjunto de datos COCO al formato YOLO requerido, para que puedas usarlo para entrenar tus modelos YOLO. Para obtener más información, consulta Migrar o convertir formatos de etiquetas.
Para preparar un archivo YAML con el que entrenar modelos YOLO con Ultralytics, tienes que definir las rutas del conjunto de datos y los nombres de las clases. Aquí tienes un ejemplo de configuración YAML:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-seg # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Classes names: 0: person 1: bicycle 2: car 3: motorcycle 4: airplane 5: bus 6: train 7: truck 8: boat 9: traffic light 10: fire hydrant 11: stop sign 12: parking meter 13: bench 14: bird 15: cat 16: dog 17: horse 18: sheep 19: cow 20: elephant 21: bear 22: zebra 23: giraffe 24: backpack 25: umbrella 26: handbag 27: tie 28: suitcase 29: frisbee 30: skis 31: snowboard 32: sports ball 33: kite 34: baseball bat 35: baseball glove 36: skateboard 37: surfboard 38: tennis racket 39: bottle 40: wine glass 41: cup 42: fork 43: knife 44: spoon 45: bowl 46: banana 47: apple 48: sandwich 49: orange 50: broccoli 51: carrot 52: hot dog 53: pizza 54: donut 55: cake 56: chair 57: couch 58: potted plant 59: bed 60: dining table 61: toilet 62: tv 63: laptop 64: mouse 65: remote 66: keyboard 67: cell phone 68: microwave 69: oven 70: toaster 71: sink 72: refrigerator 73: book 74: clock 75: vase 76: scissors 77: teddy bear 78: hair drier 79: toothbrush # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipAsegúrate de actualizar las rutas y los nombres de las clases para que coincidan con tu conjunto de datos. Para obtener más información, consulta la sección Formato YAML del conjunto de datos.
La anotación automática de Ultralytics YOLO te permite generar anotaciones de segmentación para tu conjunto de datos con un modelo de detección preentrenado. Esto reduce considerablemente la necesidad de etiquetar manualmente. Puedes usar la función
auto_annotatede la siguiente manera:from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # or sam_model="mobile_sam.pt"Esta función automatiza el proceso de anotación para que sea más rápido y eficiente. Para obtener más información, consulta la referencia de anotación automática.