Visión general de los conjuntos de datos para segmentación de instancias
La segmentación de instancias es una tarea de visión artificial que consiste en identificar y delinear objetos individuales dentro de una imagen. Esta guía ofrece una visión general de los formatos de conjuntos de datos compatibles con Ultralytics YOLO para tareas de segmentación de instancias, junto con instrucciones sobre cómo preparar, convertir y utilizar estos conjuntos de datos para entrenar tus modelos.
Formatos de dataset compatibles
Formato Ultralytics YOLO
El formato de etiqueta del conjunto de datos utilizado 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 en el 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 persona, 1 para coche, etc.).
- Coordenadas del cuadro delimitador del objeto: las coordenadas del contorno alrededor del área de la máscara, normalizadas para estar entre 0 y 1.
El formato para una sola fila en el 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 para el 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] relativos al ancho y alto de la imagen). Las coordenadas están separadas por espacios.
He aquí un ejemplo del formato de conjunto de datos YOLO para una sola imagen con dos objetos formados por un segmento de 3 puntos y un segmento 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 por qué 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>
Formato YAML del conjunto de datos
El marco de trabajo Ultralytics utiliza un formato de archivo YAML para definir la configuración del conjunto de datos y del modelo para el entrenamiento de modelos de segmentación. He aquí 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 y val especifican las rutas a los directorios que contienen las imágenes de entrenamiento y validación, respectivamente.
names es un diccionario de nombres de clases. El orden de los nombres debe coincidir con el orden de los índices de clase de objeto en los archivos del conjunto de datos YOLO.
Uso
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Datasets compatibles
Ultralytics YOLO admite varios conjuntos de datos para tareas de segmentación de instancias. He aquí una lista de los más utilizados:
- Carparts-seg: Un conjunto de datos especializado centrado en la segmentación de piezas de automóvil, ideal para aplicaciones de automoción. Incluye una gran variedad de vehículos con anotaciones detalladas de los componentes individuales del coche.
- COCO: Un conjunto de datos exhaustivo para detección de objetos, segmentación y subtitulado, que cuenta con más de 200.000 imágenes etiquetadas en una amplia gama de categorías.
- COCO8-seg: Un subconjunto compacto de 8 imágenes de COCO diseñado para realizar pruebas rápidas del 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, que contiene un subconjunto de 128 imágenes COCO con anotaciones de segmentación.
- Crack-seg: Un conjunto de datos adaptado a la segmentación de grietas en diversas superficies. Esencial para el mantenimiento de infraestructuras y el control de calidad, proporciona imágenes detalladas para entrenar modelos que identifiquen debilidades estructurales.
- Package-seg: Un conjunto de datos dedicado a la segmentación de diferentes tipos de materiales y formas de embalaje. Es 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 dataset
Si tienes tu propio conjunto de datos y quieres utilizarlo para entrenar modelos de segmentación con el formato Ultralytics YOLO, asegúrate de que sigue el formato especificado arriba en "Formato Ultralytics YOLO". Convierte tus anotaciones al formato requerido y especifica 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/ como carpetas separadas al mismo nivel, con una estructura de subcarpetas coincidente; colocar archivos .txt de etiquetas en la carpeta de imágenes puede hacer que el modelo no detecte las etiquetas.
Portar o convertir formatos de etiquetas
Formato de dataset COCO a formato YOLO
Puedes convertir fácilmente etiquetas del popular formato de conjunto de datos COCO al formato YOLO utilizando 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 puede utilizarse para convertir el conjunto de datos COCO o cualquier conjunto de datos en formato COCO al formato Ultralytics YOLO.
Recuerda comprobar si el conjunto de datos que quieres utilizar es compatible con tu modelo y sigue las convenciones de formato necesarias. Unos conjuntos de datos correctamente formateados son cruciales para entrenar modelos de segmentación satisfactorios.
Autoanotación
La autoanotación es una función esencial que te permite generar un conjunto de datos de segmentación utilizando un modelo de detección preentrenado. Te permite anotar rápida y precisamente un gran número de imágenes sin necesidad de etiquetado manual, ahorrando tiempo y esfuerzo.
Generar conjunto de datos de segmentación utilizando un modelo de detección
Para autoanotar tu conjunto de datos utilizando el marco de trabajo Ultralytics, puedes utilizar 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 | requerido | Ruta al directorio que contiene las imágenes objetivo para la anotación o segmentación. |
det_model | str | 'yolo26x.pt' | Ruta del modelo de detección YOLO para la detección inicial de objetos. |
sam_model | str | 'sam_b.pt' | Ruta del modelo SAM para segmentación (admite SAM, variantes de SAM2 y modelos MobileSAM). |
device | str | '' | Dispositivo de computación (p. ej., 'cuda:0', 'cpu', o '' para la detección automática del dispositivo). |
conf | float | 0.25 | Umbral de confianza de detección de YOLO para filtrar detecciones débiles. |
iou | float | 0.45 | Umbral de IoU para la supresión no máxima (NMS) para filtrar cajas superpuestas. |
imgsz | int | 640 | Tamaño de entrada para redimensionar imágenes (debe ser múltiplo de 32). |
max_det | int | 300 | Número máximo de detecciones por imagen para la eficiencia de la memoria. |
classes | list[int] | None | Lista de índices de clase a detectar (p. ej., [0, 1] para persona y bicicleta). |
output_dir | str | None | Directorio de guardado para anotaciones (por defecto es './labels' relativo a la ruta de los datos). |
La función auto_annotate toma la ruta a tus imágenes, junto con argumentos opcionales para especificar los modelos de detección preentrenados, es decir, YOLO26, YOLO11 u otros modelos y modelos de segmentación, es decir, SAM, SAM2 o MobileSAM, el dispositivo en el que ejecutar los modelos y el directorio de salida para guardar los resultados anotados.
Al aprovechar la potencia de los modelos preentrenados, la autoanotación puede reducir significativamente el tiempo y el esfuerzo necesarios para crear conjuntos de datos de segmentación de alta calidad. Esta función es 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 del modelo en lugar de en la anotación manual.
Visualizar anotaciones del conjunto de datos
Antes de entrenar tu modelo, a menudo resulta útil visualizar las anotaciones de tu conjunto de datos para asegurarte de que son correctas. Ultralytics proporciona una función de utilidad para este fin:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Define the label map with all annotated class labels.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Input image path.
"path/to/annotations.txt", # Annotation file path for the image.
label_map,
)Esta función dibuja cuadros delimitadores, etiqueta objetos con nombres de clase y ajusta el color del texto para una mejor legibilidad, ayudándote a identificar y corregir cualquier error de anotación antes del entrenamiento.
Convertir máscaras de segmentación al formato YOLO
Si tienes máscaras de segmentación en formato binario, puedes convertirlas al formato de segmentación YOLO utilizando:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)Esta utilidad convierte imágenes de máscara binaria al formato de segmentación YOLO y las guarda en el directorio de salida especificado.
Preguntas frecuentes
¿Qué formatos de conjunto de datos admite Ultralytics YOLO para la segmentación de instancias?
Ultralytics YOLO admite varios formatos de conjunto de datos para la segmentación de instancias, siendo el formato principal su propio formato Ultralytics YOLO. Cada imagen de tu conjunto de datos necesita un archivo de texto correspondiente con información sobre los objetos segmentada en varias filas (una fila por objeto), enumerando el índice de clase y las coordenadas delimitadoras normalizadas. Para obtener instrucciones más detalladas sobre el formato del conjunto de datos YOLO, visita la Visión general de los conjuntos de datos para segmentación de instancias.
¿Cómo puedo convertir anotaciones del conjunto de datos COCO al formato YOLO?
Convertir anotaciones en formato COCO al formato YOLO es sencillo utilizando las herramientas de Ultralytics. Puedes usar la función convert_coco del módulo ultralytics.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, haciéndolo adecuado para entrenar tus modelos YOLO. Para más detalles, consulta Portar o convertir formatos de etiqueta.
¿Cómo preparo un archivo YAML para entrenar modelos Ultralytics YOLO?
Para preparar un archivo YAML para entrenar modelos YOLO con Ultralytics, necesitas definir las rutas del conjunto de datos y los nombres de las clases. He aquí 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 según tu conjunto de datos. Para más información, consulta la sección Formato YAML del conjunto de datos.
¿Qué es la función de autoanotación en Ultralytics YOLO?
La autoanotación en Ultralytics YOLO te permite generar anotaciones de segmentación para tu conjunto de datos utilizando un modelo de detección preentrenado. Esto reduce significativamente la necesidad de etiquetado manual. Puedes usar la función auto_annotate de 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, haciéndolo más rápido y eficiente. Para más detalles, explora la Referencia de Auto-Annotate.