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, además de instrucciones para preparar, convertir y utilizar estos conjuntos de datos al entrenar tus modelos.
Formatos de conjuntos de datos compatibles#
Formato Ultralytics YOLO#
El formato de las etiquetas 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 del archivo de texto corresponde a una instancia de objeto de la imagen.
- Información del objeto en cada 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 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 clase del objeto y <x1> <y1> <x2> <y2> ... <xn> <yn> son las coordenadas poligonales normalizadas de la máscara de segmentación del objeto (los valores están en [0, 1] con respecto al ancho y la altura de la imagen). Las coordenadas se separan con espacios.
Aquí tienes un ejemplo del formato de conjunto de datos YOLO para una imagen con dos objetos: uno compuesto por un segmento de 3 puntos y otro por 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> - Cada objeto necesita 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 cuyos recuentos de cajas y polígonos no coinciden con unValueErroral cargar las etiquetas.
Formato YAML del conjunto de datos#
El framework Ultralytics utiliza archivos YAML para definir el conjunto de datos y la configuración del modelo al entrenar modelos de segmentación. A continuación se muestra 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 campo acepta un directorio, un archivo de imagen, una lista de directorios o archivos de imagen, o un archivo UTF-8 *.txt que enumere una ruta de imagen por línea (las rutas que empiecen por ./ se resuelven en relación con el 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 varios orígenes en una sola partición.
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, an image, 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 las clases de objeto en los archivos del conjunto de datos YOLO.
Uso#
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-seg.pt") # Carga un modelo preentrenado (recomendado para el entrenamiento)
# 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. Esta es 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 las anotaciones, consultar 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 vehículos, ideal para aplicaciones de automoción. Incluye varios vehículos con anotaciones detalladas de sus componentes individuales.
- 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 COCO con 8 imágenes, diseñado para probar rápidamente el entrenamiento de modelos de segmentación; es ideal para comprobaciones de CI y validación de flujos de trabajo en el repositorio
ultralytics. - COCO128-seg: conjunto de datos reducido para tareas de segmentación de instancias, que contiene un subconjunto de 128 imágenes de COCO con 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 ofrece 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. Es especialmente útil para la logística y la automatización de almacenes, y 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 utilizarlo 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 las 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/ en carpetas separadas al mismo nivel y con una estructura de subcarpetas coincidente; colocar archivos .txt de etiquetas en la carpeta de imágenes puede hacer que el modelo no las detecte.
Adaptar o convertir formatos de etiquetas#
Convertir el formato del conjunto de datos COCO al formato YOLO#
Puedes convertir 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 sirve para 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 utilizar sea compatible con tu modelo y siga las convenciones de formato necesarias. Un formato correcto es fundamental para entrenar modelos de segmentación eficaces.
Anotación automática#
La anotación automática genera un conjunto de datos de segmentación a partir de un modelo de detección preentrenado, para que puedas etiquetar muchas imágenes sin dibujar cada máscara a mano. Si prefieres etiquetar en el navegador, Ultralytics Platform ofrece anotación inteligente con SAM, YOLO y avisos de clase; además, la tabla comparativa de VLM compara los modelos guiados mediante avisos según su precisión de detección, coste y velocidad.
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 de 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 | obligatorio | Ruta al directorio que contiene las imágenes de destino que se van a anotar o segmentar. |
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 (p. ej., 'cuda:0', 'cpu' o '' para detectar automáticamente el dispositivo). |
conf | float | 0.25 | Umbral de confianza de detección YOLO para filtrar las detecciones poco fiables. |
iou | float | 0.5 | Umbral de IoU para la supresión no máxima (NMS) y el filtrado de cajas superpuestas. |
imgsz | int | 640 | Tamaño de entrada para cambiar el tamaño de las imágenes (se redondea al múltiplo de 32 más cercano por exceso 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 clase que se van a detectar (p. ej., [0, 1] para persona y bicicleta). |
output_dir | str | None | Directorio donde se guardan las anotaciones (por defecto: directorio hermano de <data>_auto_annotate_labels). |
La función auto_annotate recibe la ruta a tus imágenes, además de 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.
El uso de modelos preentrenados para la anotación automática reduce significativamente el tiempo y el esfuerzo necesarios para crear conjuntos de datos de segmentación de alta calidad. Esto 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 en la anotación manual.
Visualizar las anotaciones del conjunto de datos#
Antes de entrenar tu modelo, suele ser útil visualizar las anotaciones del conjunto de datos para asegurarte de que sean correctas. Ultralytics ofrece una función de utilidad para ello. 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, lo que 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 en las que el valor de cada píxel es el índice de la 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 formato principal es su propio formato Ultralytics YOLO. Cada imagen de tu conjunto de datos necesita un archivo de texto correspondiente con información de los objetos, segmentados en varias filas (una por objeto), que incluya el índice de clase y las coordenadas normalizadas del polígono.
Convertir anotaciones del formato COCO al formato YOLO es sencillo con las herramientas de Ultralytics. Puedes utilizar 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 entrenar tus modelos YOLO. Para obtener más información, consulta Migrar o convertir formatos de etiquetas.
Para preparar un archivo YAML para entrenar modelos YOLO con Ultralytics, debes definir las rutas del conjunto de datos y los nombres de las clases. Este es 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 mediante un modelo de detección preentrenado. Esto reduce considerablemente la necesidad de etiquetar manualmente. Puedes utilizar 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") # o sam_model="mobile_sam.pt"Esta función automatiza el proceso de anotación, por lo que resulta más rápido y eficiente. Para obtener más información, consulta la referencia de anotación automática.
Comentarios80
Haz una pregunta, comparte tus resultados o ayuda a otra persona.
hp0716
Hello, currently my segmentation task requires multi-channel masking, which means that one pixel may belong to multiple categories. Is there any code that implements this feature? Looking forward to receiving your reply.
1kh-diab
hello i tried to convert coco format to yolo format in segmented images but the generated yolo files are empty
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="groupC/annotations", use_segments=True)
can you tell me
this is example of the original annotation file exported from CVAT to coco format knowing that I used SAM model to do the segmentation
{ "id": 16, "image_id": 10, "category_id": 1, "segmentation": { "counts": [ 2815839, 2, 1817, 5, 1814, 7, 1812, 8, 1810, 10, 1809, 11, 1807, 14, 1805, 15, 1803, 17, 1802, 18, 1801, 18, 1800, 19, 1800, 19, 1800, 19, 1800, 20, 1798, 21, 1798, 21, 1798, 22, 1796, 23, 1796, 23, 1797, 23, 1796, 23, 1796, 23, 1796, 23, 1796, 23, 1797, 23, 1796, 23, 1797, 22, 1797, 23, 1797, 22, 1797, 23, 1797, 22, 1797, 22, 1798, 22, 1798, 21, 1798, 22, 1798, 21, 1798, 22, 1798, 21, 1799, 21, 1798, 21, 1799, 21, 1800, 19, 1801, 18, 1803, 15, 1807, 10, 829643 ], "size": [ 1820, 2048 ] }, "area": 861.0, "bbox": [ 1547.0, 263.0, 46.0, 42.0 ], "iscrowd": 1, "attributes": { "occluded": false } },
1
Glenn JocherUltralytics@kh-diab it seems like the conversion process isn't working as expected. Please ensure that your COCO annotations are correctly formatted and that the
use_segments=Trueparameter is set. Also, make sure you're using the latest version of the Ultralytics package. If the issue persists, try running the conversion with a smaller subset of your data to isolate the problem. For more detailed guidance, you can refer to the Instance Segmentation Datasets Overview.
ratom
I have semantic segmentation data of 6 classes. But the dataset has one folder for images and another folder for segmentation mask. I have color maps for each mask and each class. In this case, I want to create a dataset for YOLO style segmentation. How can I do it.
rohith-aiunika
hi yolo team, can i perform object tracking for my segmentation model using this kind of annotation format ... or do i need x_center, y_center, width, height ... format?
Glenn JocherUltralytics@rohith-aiunika the annotation format
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>is sufficient for segmentation tasks, including object tracking with segmentation models, as long as it aligns with the Ultralytics YOLO format. The additional fields for bounding boxes (e.g.,x_center, y_center, width, height) are not required unless explicitly specified for other tasks. For more details, you can refer to Instance Segmentation Datasets Overview.
mathrank
What should I do if the object has a hole in the center?
Glenn JocherUltralytics(editado)@mathrank each row in a segmentation label file is a single polygon, so a hole cannot be a separate row (it would be read as a second object). Instead, join the outer and inner boundaries into one polygon by connecting them with a thin bridge between their closest points, which is how the COCO converter (
merge_multi_segment) merges multi-part segments. For details on the format, refer to Instance Segmentation Datasets Overview.
johnlockejrr
Finally I ended up with the following code, any opinion?
from ultralytics import YOLO import cv2 import numpy as np from pathlib import Path image_path = "/home/incognito/yolov8/datasets/sam_v1/images/a34e234a-76be-5392-9b39-4abdcd051719.jpg" # Load the YOLOv8 model model = YOLO('/home/incognito/yolov8/runs/segment/train/weights/best.pt') # Perform inference on an image results = model(image_path) img = cv2.imread(image_path) img_name = Path(image_path).stem # Extract bounding boxes, classes, names, and confidences boxes = results[0].boxes.xyxy.tolist() classes = results[0].boxes.cls.tolist() names = results[0].names confidences = results[0].boxes.conf.tolist() bboxes = [] # Iterate through the results for box, cls, conf in zip(boxes, classes, confidences): x1, y1, x2, y2 = box confidence = conf detected_class = cls name = names[int(cls)] bboxes.append(box) #print(f"class: {name}, box: {box}") bboxes.sort(key=lambda x: x[0]) for number, bbox in enumerate(bboxes): print(bbox) x1, y1, x2, y2 = bbox iso_crop = img[int(y1):int(y2), int(x1):int(x2)] cv2.imwrite(f"{img_name}_{number}.jpg", iso_crop)johnlockejrr
90% ok, most of the lines are in the correct position, some are not... I sorted by
x1, was I wrong?
Glenn JocherUltralytics@johnlockejrr sorting by
x1is fine if you want to order the bounding boxes from left to right. Ensure this aligns with your intended use case. If you need further assistance, feel free to ask! For more on dataset formats, visit the Ultralytics documentation.
johnlockejrr(editado)
Yes, you are right, the solution is here https://docs.ultralytics.com/guides/isolating-segmentation-objects/#what-options-are-available-for-saving-the-isolated-objects-after-segmentation. Here is my code that does that (for anyone interested):
from pathlib import Path import cv2 import numpy as np from ultralytics import YOLO m = YOLO("/home/incognito/yolov8/runs/segment/train/weights/best.pt") res = m.predict("/home/incognito/yolov8/datasets/sam_v1/images/a34e234a-76be-5392-9b39-4abdcd051719.jpg") # Iterate detection results for r in res: img = np.copy(r.orig_img) img_name = Path(r.path).stem # Iterate each object contour for ci, c in enumerate(r): label = c.names[c.boxes.cls.tolist().pop()] b_mask = np.zeros(img.shape[:2], np.uint8) # Create contour mask contour = c.masks.xy.pop().astype(np.int32).reshape(-1, 1, 2) _ = cv2.drawContours(b_mask, [contour], -1, (255, 255, 255), cv2.FILLED) # Choose one: # OPTION-1: Isolate object with black background mask3ch = cv2.cvtColor(b_mask, cv2.COLOR_GRAY2BGR) isolated = cv2.bitwise_and(mask3ch, img) # OPTION-2: Isolate object with transparent background (when saved as PNG) #isolated = np.dstack([img, b_mask]) # OPTIONAL: detection crop (from either OPT1 or OPT2) x1, y1, x2, y2 = c.boxes.xyxy.cpu().numpy().squeeze().astype(np.int32) iso_crop = isolated[y1:y2, x1:x2] cv2.imwrite(f"{img_name}_{ci}.jpg", iso_crop)The only problem is that the lines in page are random and not top-down in order. Is there a way to have them in order? As I read the
ultralyticscode the result is sorted by confidence (torch.argsort(scores, descending=True)), this, for segmenting lines of text in a page isn't helping, I should be able to sort it by masks location, from top down and left to right or right to left.
Glenn JocherUltralytics@johnlockejrr to sort the results by mask location, you can modify your code to sort based on the bounding box coordinates. Extract the y-coordinate of the bounding boxes and sort the results accordingly. This will help you achieve a top-down order. If you need further assistance, feel free to ask!
johnlockejrr
Yes, I got it, but that I'm not sure how to do it, didn't find anything in the docs
Glenn JocherUltralyticsTo sort the segmented objects by their location, you can modify your code to sort based on the y-coordinate of the bounding boxes. This will help you achieve a top-down order. If you need further assistance, feel free to ask!
johnlockejrr
@glenn-jocher, thank you for your help! I trained the model already and works pretty well, right now trying to figure out how to predict with it, I mean how to get back polygons so I forward them to a line recognition HTR (like PyLaia) for text recognition. I need to use the segmentation so I can cut the lines of text from the segmented image.
My script:
from ultralytics import YOLO # https://docs.ultralytics.com/modes/predict/#inference-arguments # Load a model model = YOLO("/home/incognito/yolov8/runs/segment/train4/weights/best.pt") # pretrained YOLOv8n model # Run batched inference on a list of images results = model("29.jpg") # return a list of Results objects # Process results list for result in results: boxes = result.boxes # Boxes object for bounding box outputs masks = result.masks # Masks object for segmentation masks outputs keypoints = result.keypoints # Keypoints object for pose outputs probs = result.probs # Probs object for classification outputs obb = result.obb # Oriented boxes object for OBB outputs result.show() # display to screen result.save(filename="result.jpg") # save to diskMy
result.jpg
Glenn JocherUltralytics@johnlockejrr to extract polygons for line recognition, you can access the
masksattribute in your results. This will give you the segmentation masks, which you can then process to obtain the polygon coordinates needed for your HTR system. If you need further details, please refer to the documentation on segmentation results processing.
johnlockejrr
Thank you @glenn-jocher, I converted my data with
page2darknetto darknet format then I converted it to YOLO OBB.johnlockejrr(editado)
I'm new to YOLO. I would like to convert my datasets for training a YOLOv8 model. My datasets are mainly in ALTO XML and PAGE XML formats (image/xml), the xml file contains polygons, any idea how to convert to YOLO format? Thank you!
Example:
<TextLine ID="eSc_line_48be6c40" TAGREFS="LT46" BASELINE="627 397 964 397 1713 373 2473 373" HPOS="625" VPOS="338" WIDTH="1848" HEIGHT="87"> <Shape><Polygon POINTS="2470 351 2454 351 2438 349 2422 349 2407 348 2391 348 2375 346 2359 346 2344 345 2328 345 2312 343 2296 343 2281 343 2274 342 2254 345 2184 338 2183 338 2181 338 2158 349 2156 349 2139 349 1986 342 1984 342 1983 342 1959 349 1868 338 1855 340 1839 340 1823 340 1808 342 1792 342 1776 342 1775 342 1700 346 1655 345 1650 346 1634 346 1618 346 1603 346 1587 348 1571 348 1555 348 1540 349 1524 349 1508 349 1492 351 1477 351 1461 351 1445 351 1429 353 1414 353 1398 353 1382 354 1366 354 1350 354 1335 356 1319 356 1303 356 1287 356 1272 357 1256 357 1240 357 1224 359 1209 359 1193 359 1179 359 1179 360 1161 365 966 365 956 367 941 367 925 367 909 368 893 368 878 368 862 370 846 370 830 370 815 370 799 368 788 365 646 365 641 368 625 370 627 397 627 425 734 423 736 423 780 412 846 420 848 420 1111 419 1112 417 1295 403 1377 409 1379 409 1380 409 1410 400 1741 397 1820 397 1842 406 1844 406 1845 406 1847 406 1886 406 2128 397 2148 401 2159 403 2161 403 2162 403 2167 401 2184 392 2470 395 2473 373 2471 351 2470 351"/></Shape> <String CONTENT="את הארון ואת בדיו ואת הכפרת ואת פרכת המסך" HPOS="625" VPOS="338" WIDTH="1848" HEIGHT="87"></String> </TextLine>EDIT: I think this should do it:
https://github.com/mittagessen/page2darknet
Glenn JocherUltralytics@johnlockejrr to convert your ALTO XML and PAGE XML datasets to the YOLO format, you'll need to extract the polygon coordinates and class indices, then format them as
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>. You might find thepage2darknettool helpful for this conversion. Once converted, ensure your dataset follows the YOLO format with a corresponding YAML file for training. For more details, you can refer to the Ultralytics documentation on dataset formats.1
