Visión general de los conjuntos de datos de segmentación de instancias
La segmentación de instancias es una tarea de visión por ordenador que consiste en identificar y delinear objetos individuales dentro de una imagen. Esta guía proporciona 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 el entrenamiento de sus modelos.
Formatos de datos admitidos
Ultralytics YOLO formato
El formato de las etiquetas de los conjuntos de datos utilizados para entrenar los modelos de segmentación de YOLO es el siguiente:
- Un archivo de texto por imagen: Cada imagen del conjunto de datos tiene su correspondiente archivo de texto 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 persona, 1 para coche, etc.).
- Coordenadas de delimitación del objeto: Las coordenadas de delimitación alrededor del área de la máscara, normalizadas para estar entre 0 y 1.
El formato de una fila del fichero de datos de segmentación es el siguiente:
En este formato, <class-index>
es el índice de la clase del objeto, y <x1> <y1> <x2> <y2> ... <xn> <yn>
son las coordenadas de delimitación de la máscara de segmentación del objeto. Las coordenadas están separadas por espacios.
He aquí un ejemplo del formato del 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
Consejo
- La longitud de cada fila no tiene por qué ser igual.
- Cada etiqueta de segmentación debe tener un mínimo de 3 puntos xy:
<class-index> <x1> <y1> <x2> <y2> <x3> <y3>
Conjunto de datos en formato YAML
El marco Ultralytics utiliza un formato de archivo YAML para definir el conjunto de datos y la configuración del modelo para el entrenamiento de los modelos de detección. A continuación se muestra un ejemplo del formato YAML utilizado para definir un conjunto de datos de detección:
# 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: ../datasets/coco8-seg # dataset root dir (absolute or relative; if relative, it's relative to default datasets_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 (80 COCO classes)
names:
0: person
1: bicycle
2: car
# ...
77: teddy bear
78: hair drier
79: toothbrush
En 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 las clases de objetos en los archivos del conjunto de datos YOLO .
Utilización
Ejemplo
Conjuntos de datos compatibles
Ultralytics YOLO admite varios conjuntos de datos para tareas de segmentación por ejemplo. Aquí tienes una lista de los más utilizados:
- COCO: un completo conjunto de datos para la detección, segmentación y subtitulación de objetos, con más de 200 000 imágenes etiquetadas de una amplia gama de categorías.
- COCO8-seg: Un subconjunto compacto de 8 imágenes de COCO diseñado para probar rápidamente el entrenamiento del modelo de segmentación, ideal para comprobaciones de CI y validación del flujo de trabajo en el
ultralytics
repositorio. - 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.
- Carparts-seg: Un conjunto de datos especializado centrado en la segmentación de piezas de automóviles, ideal para aplicaciones de automoción. Incluye una variedad de vehículos con anotaciones detalladas de los componentes individuales del automóvil.
- Crack-seg: Un conjunto de datos adaptado para la segmentación de grietas en diversas superficies. Esencial para el mantenimiento de infraestructuras y el control de calidad, proporciona imágenes detalladas para el entrenamiento de modelos de identificación de debilidades estructurales.
- Package-seg: conjunto de datos dedicado a la segmentación de distintos tipos de materiales y formas de envases. 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 su propio conjunto de datos
Si tiene su propio conjunto de datos y desea utilizarlo para entrenar modelos de segmentación con el formato Ultralytics YOLO , asegúrese de que sigue el formato especificado anteriormente en "Ultralytics YOLO format". Convierta sus anotaciones al formato requerido y especifique las rutas, el número de clases y los nombres de las clases en el archivo de configuración YAML.
Portar o convertir formatos de etiquetas
COCO Dataset Format a YOLO Format
Puede convertir fácilmente etiquetas del popular formato de conjunto de datos COCO al formato YOLO utilizando el siguiente fragmento de código:
Ejemplo
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 .
No olvide volver a comprobar si el conjunto de datos que desea utilizar es compatible con su modelo y sigue las convenciones de formato necesarias. Los conjuntos de datos formateados correctamente son cruciales para entrenar con éxito modelos de detección de objetos.
Anotación automática
La anotación automática es una función esencial que permite generar un conjunto de datos de segmentación utilizando un modelo de detección preentrenado. Permite anotar con rapidez y precisión un gran número de imágenes sin necesidad de etiquetado manual, lo que ahorra tiempo y esfuerzo.
Generar un conjunto de datos de segmentación utilizando un modelo de detección
Para auto-anotar su conjunto de datos utilizando el marco Ultralytics , puede utilizar la función auto_annotate
como se muestra a continuación:
Ejemplo
Argumento | Tipo | Por defecto | Descripción |
---|---|---|---|
data |
str |
obligatorio | Ruta al directorio que contiene las imágenes de destino para la anotación o segmentación. |
det_model |
str |
'yolo11x.pt' |
YOLO trayectoria del modelo de detección para la detección inicial de objetos. |
sam_model |
str |
'sam_b.pt' |
Trayectoria del modelo SAM para la segmentación (admite las variantes SAM, SAM2 y los modelos mobile_sam). |
device |
str |
'' |
Dispositivo de cálculo (por ejemplo, 'cuda:0', 'cpu', o '' para la detección automática de dispositivos). |
conf |
float |
0.25 |
YOLO umbral de confianza de detección para filtrar las detecciones débiles. |
iou |
float |
0.45 |
Umbral IoU de Supresión No Máxima para filtrar cajas solapadas. |
imgsz |
int |
640 |
Tamaño de entrada para redimensionar las imágenes (debe ser múltiplo de 32). |
max_det |
int |
300 |
Número máximo de detecciones por imagen para ahorrar memoria. |
classes |
list[int] |
None |
Lista de índices de clase a detectar (por ejemplo, [0, 1] para persona y bicicleta). |
output_dir |
str |
None |
Guardar directorio para anotaciones (por defecto './labels' relativo a la ruta de datos). |
En auto_annotate
toma la ruta de acceso a sus imágenes, junto con argumentos opcionales para especificar los modelos de detección preentrenados, es decir. YOLO11, YOLOv8 u otros modelos y modelos de segmentación, es decir SAM, SAM2 o MobileSAMel dispositivo en el que se ejecutarán los modelos y el directorio de salida en el que se guardarán los resultados anotados.
Al aprovechar la potencia de los modelos preentrenados, la anotación automática 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 de modelos en lugar de en la anotación manual.
Visualizar anotaciones de conjuntos de datos
Antes de entrenar el modelo, suele ser útil visualizar las anotaciones del conjunto de datos para asegurarse de que son correctas. Ultralytics proporciona una función de utilidad para este propósito:
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 los objetos con nombres de clase y ajusta el color del texto para una mejor legibilidad, ayudándole a identificar y corregir cualquier error de anotación antes del entrenamiento.
Conversión de máscaras de segmentación al formato YOLO
Si dispone de máscaras de segmentación en formato binario, puede 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 conjuntos de datos admite Ultralytics YOLO para la segmentación de instancias?
Ultralytics YOLO admite varios formatos de conjuntos de datos para la segmentación de instancias, siendo el principal su propio formato Ultralytics YOLO . Cada imagen de su conjunto de datos necesita un archivo de texto correspondiente con la información del objeto segmentada en varias filas (una fila por objeto), que enumere el índice de clase y las coordenadas de delimitación normalizadas. Para obtener instrucciones más detalladas sobre el formato del conjunto de datos YOLO , visite la descripción general de los conjuntos de datos de segmentación de instancias.
¿Cómo puedo convertir las anotaciones del conjunto de datos COCO al formato YOLO ?
Convertir las anotaciones en formato COCO al formato YOLO es muy sencillo utilizando las herramientas de Ultralytics . Puede utilizar la herramienta convert_coco
de la función ultralytics.data.converter
módulo:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)
Este script convierte sus anotaciones del conjunto de datos COCO al formato requerido YOLO , haciéndolo adecuado para el entrenamiento de sus modelos YOLO . Para más detalles, consulte Portar o Convertir formatos de etiquetas.
¿Cómo preparo un archivo YAML para entrenar los modelos de Ultralytics YOLO ?
Para preparar un archivo YAML para el entrenamiento de modelos YOLO con Ultralytics, es necesario definir las rutas de los conjuntos de datos y los nombres de las clases. Aquí tienes un ejemplo de configuración YAML:
path: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
names:
0: person
1: bicycle
2: car
# ...
Asegúrese de actualizar las rutas y los nombres de clase de acuerdo con su conjunto de datos. Para obtener más información, consulte la sección Formato YAML del conjunto de datos.
¿Qué es la función de anotación automática en Ultralytics YOLO ?
La anotación automática en Ultralytics YOLO le permite generar anotaciones de segmentación para su conjunto de datos utilizando un modelo de detección preentrenado. Esto reduce significativamente la necesidad de etiquetado manual. Puede utilizar la función auto_annotate
de la siguiente manera:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.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 eficaz. Para más detalles, explore la Referencia de anotación automática.