Ultralytics YOLO27: Join the waitlist.
Get Started

Instance Segmentation Datasets Overview

Instance segmentation is a computer vision task that involves identifying and delineating individual objects within an image. This guide provides an overview of dataset formats supported by Ultralytics YOLO for instance segmentation tasks, along with instructions on how to prepare, convert, and use these datasets for training your models.

Supported Dataset Formats#

Ultralytics YOLO format#

The dataset label format used for training YOLO segmentation models is as follows:

  1. One text file per image: Each image in the dataset has a corresponding text file with the same name as the image file and the ".txt" extension.
  2. One row per object: Each row in the text file corresponds to one object instance in the image.
  3. Object information per row: Each row contains the following information about the object instance:
    • Object class index: An integer representing the class of the object (e.g., 0 for person, 1 for car, etc.).
    • Object polygon coordinates: The (x, y) points outlining the object's mask, normalized to be between 0 and 1.

The format for a single row in the segmentation dataset file is as follows:

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

In this format, <class-index> is the index of the class for the object, and <x1> <y1> <x2> <y2> ... <xn> <yn> are the normalized polygon coordinates of the object's segmentation mask (values are in [0, 1] relative to image width and height). The coordinates are separated by spaces.

Here is an example of the YOLO dataset format for a single image with two objects made up of a 3-point segment and a 5-point segment.

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
Tip
  • The length of each row does not have to be equal.
  • Each segmentation label must have a minimum of 3 (x, y) points: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>
  • Every object needs a polygon. Detect-format rows (<class-index> <x_center> <y_center> <width> <height>) carry none, and a segment dataset whose box and polygon counts differ is rejected with a ValueError when its labels load.

Dataset YAML format#

The Ultralytics framework uses a YAML file format to define the dataset and model configuration for training segmentation models. Here is an example of the YAML format used for defining a segmentation dataset:

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

The train, val, and test fields point to the training, validation, and test images. Each accepts a directory, an image file, a list of directories or image files, or a UTF-8 *.txt file listing one image path per line (paths starting with ./ resolve relative to the *.txt file). A *.txt file is useful to train on a subset of a directory, skip unlabeled images, or combine images from multiple sources into one split.

Image paths as a `*.txt` file
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: person

names is a dictionary of class names. The order of the names should match the order of the object class indices in the YOLO dataset files.

Usage#

Example
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)

Supported Datasets#

Ultralytics YOLO supports various datasets for instance segmentation tasks. Here's a list of the most commonly used ones. Most of these datasets are also hosted on Ultralytics Platform, where you can browse the images and annotations, view dataset statistics, and clone them for cloud training.

  • Carparts-seg: A specialized dataset focused on the segmentation of car parts, ideal for automotive applications. It includes a variety of vehicles with detailed annotations of individual car components.
  • COCO: A comprehensive dataset for object detection, segmentation, and captioning, featuring over 200K labeled images across a wide range of categories.
  • COCO8-seg: A compact, 8-image subset of COCO designed for quick testing of segmentation model training, ideal for CI checks and workflow validation in the ultralytics repository.
  • COCO128-seg: A smaller dataset for instance segmentation tasks, containing a subset of 128 COCO images with segmentation annotations.
  • Crack-seg: A dataset tailored for the segmentation of cracks in various surfaces. Essential for infrastructure maintenance and quality control, it provides detailed imagery for training models to identify structural weaknesses.
  • Package-seg: A dataset dedicated to the segmentation of different types of packaging materials and shapes. It's particularly useful for logistics and warehouse automation, aiding in the development of systems for package handling and sorting.

Adding your own dataset#

If you have your own dataset and would like to use it for training segmentation models with Ultralytics YOLO format, ensure that it follows the format specified above under "Ultralytics YOLO format". Convert your annotations to the required format and specify the paths, number of classes, and class names in the YAML configuration file. Keep images/ and labels/ as separate folders at the same level, with matching subfolder structure; placing label .txt files in the image folder can cause the model to miss labels.

Port or Convert Label Formats#

COCO Dataset Format to YOLO Format#

You can convert labels from the popular COCO dataset format to the YOLO format using the following code snippet:

Example
from ultralytics.data.converter import convert_coco

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

This conversion tool can be used to convert the COCO dataset or any dataset in the COCO format to the Ultralytics YOLO format.

Remember to double-check if the dataset you want to use is compatible with your model and follows the necessary format conventions. Properly formatted datasets are crucial for training successful segmentation models.

Auto-Annotation#

Auto-annotation generates a segmentation dataset from a pretrained detection model, so you can label a large number of images without drawing every mask by hand. To label in the browser instead, Ultralytics Platform offers SAM, YOLO, and class-prompted smart annotation, and the VLM leaderboard compares the prompted models on detection accuracy, cost, and speed.

Generate Segmentation Dataset Using a Detection Model#

To auto-annotate your dataset using the Ultralytics framework, you can use the auto_annotate function as shown below:

Example
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgumentTypeDefaultDescription
datastrrequiredPath to directory containing target images for annotation or segmentation.
det_modelstr'yolo26x.pt'YOLO detection model path for initial object detection.
sam_modelstr'sam_b.pt'SAM model path for segmentation (supports SAM, SAM 2, MobileSAM, and SAM 3 weights).
devicestr''Computation device (e.g., 'cuda:0', 'cpu', or '' for automatic device detection).
conffloat0.25YOLO detection confidence threshold for filtering weak detections.
ioufloat0.45IoU threshold for Non-Maximum Suppression to filter overlapping boxes.
imgszint640Input size for resizing images (rounded up to a multiple of 32 if needed).
max_detint300Maximum number of detections per image for memory efficiency.
classeslist[int]NoneList of class indices to detect (e.g., [0, 1] for person & bicycle).
output_dirstrNoneSave directory for annotations (default: <data>_auto_annotate_labels sibling).

The auto_annotate function takes the path to your images, along with optional arguments for specifying the pretrained detection models, e.g. YOLO26, YOLO11, or other models, and segmentation models, e.g. SAM, SAM 2, MobileSAM, or SAM 3, the device to run the models on, and the output directory for saving the annotated results.

Using pretrained models, auto-annotation significantly reduces the time and effort required to create high-quality segmentation datasets. This is particularly useful for researchers and developers working with large image collections, as it allows them to focus on model development and evaluation rather than manual annotation.

Visualize Dataset Annotations#

Before training your model, it's often helpful to visualize your dataset annotations to ensure they're correct. Ultralytics provides a utility function for this purpose. It reads detection-format box labels (<class-index> <x_center> <y_center> <width> <height>) only, so it cannot parse segmentation polygon label files:

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,
)

This function draws bounding boxes, labels objects with class names, and adjusts text color for better readability, helping you identify and correct any annotation errors before training.

Converting Segmentation Masks to YOLO Format#

If you have grayscale mask images where each pixel value is the class index + 1 (0 is background), you can convert them to the YOLO segmentation format using:

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)

This utility converts the mask images into the YOLO segmentation format and saves them in the specified output directory.

FAQ#

  • Ultralytics YOLO supports several dataset formats for instance segmentation, with the primary format being its own Ultralytics YOLO format. Each image in your dataset needs a corresponding text file with object information segmented into multiple rows (one row per object), listing the class index and normalized polygon coordinates.

  • Converting COCO format annotations to YOLO format is straightforward using Ultralytics tools. You can use the convert_coco function from the ultralytics.data.converter module:

    from ultralytics.data.converter import convert_coco
    
    convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

    This script converts your COCO dataset annotations to the required YOLO format, making it suitable for training your YOLO models. For more details, refer to Port or Convert Label Formats.

  • To prepare a YAML file for training YOLO models with Ultralytics, you need to define the dataset paths and class names. Here's an example YAML configuration:

    # 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

    Ensure you update the paths and class names according to your dataset. For more information, check the Dataset YAML Format section.

  • Auto-annotation in Ultralytics YOLO allows you to generate segmentation annotations for your dataset using a pretrained detection model. This significantly reduces the need for manual labeling. You can use the auto_annotate function as follows:

    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"

    This function automates the annotation process, making it faster and more efficient. For more details, explore the Auto-Annotate Reference.

Comments80

Ask a question, share your results, or help someone else.

  1. hp0716hp0716GitHub

    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.

    1
  2. kh-diabkh-diabGitHub

    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
    1. Glenn JocherGlenn 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=True parameter 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.

  3. ratomratomGitHub

    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.

  4. rohith-aiunikarohith-aiunikaGitHub

    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?

    1. Glenn JocherGlenn 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.

    1. Glenn JocherGlenn JocherUltralytics(edited)

      @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.

  5. johnlockejrrjohnlockejrrGitHub

    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)
    1. johnlockejrrjohnlockejrrGitHub

      90% ok, most of the lines are in the correct position, some are not... I sorted by x1, was I wrong?

    2. Glenn JocherGlenn JocherUltralytics

      @johnlockejrr sorting by x1 is 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.

  6. johnlockejrrjohnlockejrrGitHub(edited)

    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 ultralytics code 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.

    1. Glenn JocherGlenn 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!

    2. Glenn JocherGlenn JocherUltralytics

      To 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!

  7. johnlockejrrjohnlockejrrGitHub

    @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 disk

    My result.jpg

    result

    1. Glenn JocherGlenn JocherUltralytics

      @johnlockejrr to extract polygons for line recognition, you can access the masks attribute 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.

  8. johnlockejrrjohnlockejrrGitHub

    Thank you @glenn-jocher, I converted my data with page2darknet to darknet format then I converted it to YOLO OBB.

  9. johnlockejrrjohnlockejrrGitHub(edited)

    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

    1. Glenn JocherGlenn 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 the page2darknet tool 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