Ir al contenido

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 implica la identificación y delimitación de objetos individuales dentro de una imagen. Esta guía proporciona una visión general de los formatos de conjuntos de datos soportados por 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 Conjuntos de Datos Compatibles

Formato Ultralytics YOLO

El formato de etiqueta del conjunto de datos utilizado para entrenar modelos de segmentación YOLO es el siguiente:

  1. Un archivo de texto por imagen: Cada imagen en el conjunto de datos tiene un archivo de texto correspondiente con el mismo nombre que el archivo de imagen y la extensión ".txt".
  2. Una fila por objeto: Cada fila en el archivo de texto corresponde a una instancia de objeto en la imagen.
  3. Información del objeto por fila: Cada fila contiene la siguiente información sobre la instancia del objeto:
    • Índice de clase del objeto: Un 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 que estén 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 de delimitación de la máscara de segmentación del objeto. Las coordenadas están separadas por espacios.

Aquí hay un ejemplo del formato de dataset YOLO para una sola imagen con dos objetos compuestos 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 que ser igual.
  • Cada etiqueta de segmentación debe tener un mínimo de 3 puntos xy: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

Formato YAML del conjunto de datos

El framework de Ultralytics utiliza un formato de archivo YAML para definir la configuración del dataset y del modelo para el entrenamiento de Modelos de Segmentación. Aquí tienes un ejemplo del formato YAML utilizado para definir un dataset de segmentación:

ultralytics/cfg/datasets/coco8-seg.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.zip

El train y val Los campos 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 dataset YOLO.

Uso

Ejemplo

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640

Conjuntos de Datos Compatibles

Ultralytics YOLO admite varios conjuntos de datos para tareas de segmentación de instancias. Aquí hay una lista de los más utilizados:

  • COCO: Un dataset completo para detección de objetos, segmentación y subtitulado, que presenta más de 200,000 imágenes etiquetadas en una amplia gama de categorías.
  • COCO8-seg: Un subconjunto compacto de COCO de 8 imágenes diseñado para pruebas rápidas del 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 dataset 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 dataset especializado centrado en la segmentación de partes de automóviles, ideal para aplicaciones automotrices. Incluye una variedad de vehículos con anotaciones detalladas de componentes individuales del automóvil.
  • Crack-seg: Un dataset diseñado para la segmentación de grietas en varias superficies. Esencial para el mantenimiento de la infraestructura y el control de calidad, proporciona imágenes detalladas para entrenar modelos para identificar debilidades estructurales.
  • Package-seg: Un dataset dedicado a la segmentación de diferentes tipos de materiales y formas de embalaje. Es particularmente útil para la logística y la automatización de almacenes, ayudando en el desarrollo de sistemas para el manejo y la clasificación de paquetes.

Añadir tu propio conjunto de datos

Si tiene su propio dataset y le gustaría usarlo para entrenar modelos de segmentación con el formato Ultralytics YOLO, asegúrese de que siga el formato especificado anteriormente en "Formato Ultralytics YOLO". 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.

Adaptar o Convertir Formatos de Etiquetas

Formato de Conjunto de Datos COCO a Formato YOLO

Puede convertir fácilmente etiquetas del popular formato de dataset COCO al formato YOLO utilizando el siguiente fragmento de código:

Ejemplo

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Esta herramienta de conversión se puede utilizar para convertir el dataset COCO o cualquier dataset en el formato COCO al formato Ultralytics YOLO.

Recuerde verificar si el dataset que desea utilizar es compatible con su modelo y sigue las convenciones de formato necesarias. Los datasets formateados correctamente son cruciales para entrenar modelos de detección de objetos exitosos.

Anotación Automática

La autoanotación es una característica esencial que le permite generar un dataset de segmentación utilizando un modelo de detección pre-entrenado. Le permite anotar rápida y precisamente una gran cantidad de imágenes sin la necesidad de un etiquetado manual, ahorrando tiempo y esfuerzo.

Generar un Conjunto de Datos de Segmentación Utilizando un Modelo de Detección

Para autoanotar su dataset utilizando el framework Ultralytics, puede utilizar la auto_annotate función como se muestra a continuación:

Ejemplo

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.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 la anotación o segmentación.
det_model str 'yolo11x.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 la segmentación (admite las variantes SAM, SAM2 y los modelos mobile_sam).
device str '' Dispositivo de cálculo (p. ej., 'cuda:0', 'cpu' o '' para la detección automática de dispositivos).
conf float 0.25 Umbral de confianza de detección YOLO para filtrar detecciones débiles.
iou float 0.45 Umbral de IoU para la supresión no máxima para filtrar cuadros superpuestos.
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 eficiencia de memoria.
classes list[int] None Lista de índices de clase para detectar (p. ej., [0, 1] para persona y bicicleta).
output_dir str None Directorio para guardar las anotaciones (por defecto './labels' relativo a la ruta de datos).

El auto_annotate función toma la ruta a sus imágenes, junto con argumentos opcionales para especificar los modelos de detección pre-entrenados, es decir, YOLO11, YOLOv8 u otro modelos y modelos de segmentación, es decir, SAM, SAM2 o MobileSAM, el dispositivo en el que se ejecutarán los modelos y el directorio de salida para guardar los resultados anotados.

Al aprovechar el poder de los modelos pre-entrenados, la autoanotación puede reducir significativamente el tiempo y el esfuerzo necesarios para crear datasets de segmentación de alta calidad. Esta característica es particularmente ú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 la anotación manual.

Visualizar anotaciones del conjunto de datos

Antes de entrenar tu modelo, a menudo es útil visualizar las anotaciones de tu conjunto de datos para asegurarte 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, lo que le ayuda a identificar y corregir cualquier error de anotación antes del entrenamiento.

Conversión de máscaras de segmentación al formato YOLO

Si tiene 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 las 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 dataset para la segmentación de instancias, siendo el formato principal su propio formato Ultralytics YOLO. Cada imagen en su dataset necesita un archivo de texto correspondiente con información del objeto segmentada en varias filas (una fila por objeto), que enumera el índice de clase y las coordenadas de límite normalizadas. Para obtener instrucciones más detalladas sobre el formato del dataset YOLO, visite la Descripción general de los datasets de segmentación de instancias.

¿Cómo puedo convertir las anotaciones del conjunto de datos COCO al formato YOLO?

La conversión de anotaciones en formato COCO a formato YOLO es sencilla utilizando las herramientas de Ultralytics. Puede utilizar el convert_coco función de 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 las anotaciones de tu dataset COCO al formato requerido por YOLO, haciéndolo adecuado para el entrenamiento de tus modelos YOLO. Para más detalles, consulta Port or Convert Label Formats.

¿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 dataset 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.zip

Asegúrate de actualizar las rutas y los nombres de las clases según tu dataset. Para más información, consulta la sección Dataset YAML Format.

¿Qué es la función de anotación automática en Ultralytics YOLO?

La auto-anotación en Ultralytics YOLO te permite generar anotaciones de segmentación para tu dataset utilizando un modelo de detección pre-entrenado. Esto reduce significativamente la necesidad de etiquetado manual. Puedes usar la auto_annotate función 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 eficiente. Para obtener más detalles, explora la Referencia de Auto-anotación.



📅 Creado hace 1 año ✏️ Actualizado hace 10 días

Comentarios