YOLO Vision 2026:

Обзор наборов данных для сегментации экземпляров#

Сегментация экземпляров — это задача компьютерного зрения, которая включает идентификацию и оконтуривание отдельных объектов на изображении. В этом руководстве представлен обзор форматов наборов данных, поддерживаемых Ultralytics YOLO для задач сегментации экземпляров, а также инструкции по подготовке, конвертации и использованию этих данных для обучения твоих моделей.

Поддерживаемые форматы наборов данных#

Формат Ultralytics YOLO#

Формат меток набора данных, используемый для обучения моделей сегментации YOLO, выглядит следующим образом:

  1. Один текстовый файл на изображение: каждое изображение в наборе данных имеет соответствующий текстовый файл с тем же именем, что и файл изображения, и расширением ".txt".
  2. Одна строка на объект: каждая строка в текстовом файле соответствует одному экземпляру объекта на изображении.
  3. Информация об объекте в каждой строке: каждая строка содержит следующую информацию об экземпляре объекта:
    • Индекс класса объекта: целое число, представляющее класс объекта (например, 0 для человека, 1 для автомобиля и т. д.).
    • Координаты ограничивающей рамки объекта: координаты рамки вокруг области маски, нормализованные в диапазоне от 0 до 1.

Формат одной строки в файле набора данных сегментации выглядит так:

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

В этом формате <class-index> — это индекс класса объекта, а <x1> <y1> <x2> <y2> ... <xn> <yn> — нормализованные координаты полигона маски сегментации объекта (значения находятся в диапазоне [0, 1] относительно ширины и высоты изображения). Координаты разделены пробелами.

Вот пример формата набора данных YOLO для одного изображения с двумя объектами, состоящими из 3-точечного и 5-точечного сегментов.

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
Совет
  • Длина каждой строки не обязательно должна быть одинаковой.
  • Каждая метка сегментации должна содержать не менее 3 точек (x, y): <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

Формат YAML для набора данных#

Фреймворк Ultralytics использует формат файла YAML для определения конфигурации набора данных и модели при обучении моделей сегментации. Вот пример YAML-формата, используемого для определения набора данных сегментации:

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

Поля train, val и test указывают на изображения для обучения, валидации и тестирования. Каждое принимает директорию, список директорий или файл *.txt, в котором указан один путь к изображению на строку (пути, начинающиеся с ./, разрешаются относительно файла *.txt). Файл *.txt полезен для обучения на подмножестве директории, пропуском изображений без разметки или объединения изображений из нескольких источников в один сплит.

Пути к изображениям в виде `*.txt` файла
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
  0: person

names — это словарь имен классов. Порядок имен должен соответствовать порядку индексов классов объектов в файлах датасета YOLO.

Использование#

Пример
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)

Поддерживаемые наборы данных#

Ultralytics YOLO поддерживает различные наборы данных для задач сегментации экземпляров. Вот список наиболее часто используемых из них:

  • Carparts-seg: специализированный датасет, ориентированный на сегментацию деталей автомобилей, идеально подходящий для автомобильных приложений. Он включает в себя различные транспортные средства с подробными аннотациями отдельных компонентов автомобиля.
  • COCO: комплексный датасет для обнаружения объектов, сегментации и описания, содержащий более 200 тыс. размеченных изображений в самых разных категориях.
  • COCO8-seg: компактный поднабор COCO из 8 изображений, созданный для быстрого тестирования обучения моделей сегментации, идеально подходят для CI-проверок и валидации рабочих процессов в репозитории ultralytics.
  • COCO128-seg: уменьшенный датасет для задач сегментации экземпляров, содержащий поднабор из 128 изображений COCO с аннотациями сегментации.
  • Crack-seg: датасет, предназначенный для сегментации трещин на различных поверхностях. Он необходим для обслуживания инфраструктуры и контроля качества, предоставляя детальные изображения для обучения моделей определению структурных дефектов.
  • Package-seg: датасет, посвященный сегментации упаковочных материалов и форм различных типов. Он особенно полезен для логистики и автоматизации складов, помогая в разработке систем обработки и сортировки упаковок.

Добавление собственного набора данных#

Если у тебя есть собственный датасет и ты хочешь использовать его для обучения моделей сегментации в формате Ultralytics YOLO, убедись, что он соответствует формату, указанному выше в разделе «Формат Ultralytics YOLO». Преобразуй свои аннотации в требуемый формат и укажи пути, количество классов и имена классов в конфигурационном YAML-файле. Держи images/ и labels/ в виде отдельных папок на одном уровне с согласованной структурой вложенных папок; размещение файлов меток .txt в папке с изображениями может привести к тому, что модель пропустит метки.

Перенос или конвертация форматов разметки#

Формат набора данных COCO в формат YOLO#

Ты можешь легко конвертировать метки из популярного формата набора данных COCO в формат YOLO, используя следующий фрагмент кода:

Пример
from ultralytics.data.converter import convert_coco

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

Этот инструмент конвертации можно использовать для преобразования набора данных COCO или любого другого набора в формате COCO в формат Ultralytics YOLO.

Не забудь дважды проверить, совместим ли набор данных, который ты хочешь использовать, с твоей моделью и соответствует ли он необходимым форматам. Правильно отформатированные наборы данных критически важны для успешного обучения моделей сегментации.

Автоматическая аннотация#

Авторазметка — это важная функция, которая позволяет генерировать датасет сегментации с помощью предобученной модели обнаружения. Она позволяет быстро и точно аннотировать большое количество изображений без необходимости ручной разметки, экономя время и усилия.

Генерация набора данных для сегментации с использованием модели обнаружения#

Чтобы автоматически разметить свой датасет с помощью фреймворка Ultralytics, ты можешь использовать функцию auto_annotate, как показано ниже:

Пример
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
АргументТипПо умолчаниюОписание
datastrобязательноПуть к директории, содержащей целевые изображения для аннотирования или сегментации.
det_modelstr'yolo26x.pt'Путь к модели обнаружения YOLO для начального обнаружения объектов.
sam_modelstr'sam_b.pt'Путь к модели SAM для сегментации (поддерживает веса SAM, SAM 2, MobileSAM и SAM 3).
devicestr''Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства).
conffloat0.25Порог уверенности YOLO для фильтрации слабых обнаружений.
ioufloat0.45Порог IoU для NMS для фильтрации перекрывающихся рамок.
imgszint640Размер входного изображения для изменения размера (должен быть кратен 32).
max_detint300Максимальное количество обнаружений на изображение для экономии памяти.
classeslist[int]NoneСписок индексов классов для обнаружения (например, [0, 1] для человека и велосипеда).
output_dirstrNoneДиректория сохранения аннотаций (по умолчанию: родительская папка <data>_auto_annotate_labels).

Функция auto_annotate принимает путь к твоим изображениям вместе с необязательными аргументами для указания предобученных моделей обнаружения, например YOLO26, YOLO11 или других моделей, и моделей сегментации, например SAM, SAM 2, MobileSAM или SAM 3, устройства для запуска моделей и выходного каталога для сохранения результатов разметки.

Используя мощь предобученных моделей, автоматическая аннотация может значительно сократить время и усилия, необходимые для создания высококачественных наборов данных сегментации. Эта функция особенно полезна для исследователей и разработчиков, работающих с большими коллекциями изображений, так как позволяет им сосредоточиться на разработке и оценке моделей, а не на ручной аннотации.

Визуализация аннотаций набора данных#

Перед обучением модели часто бывает полезно визуализировать аннотации твоего набора данных, чтобы убедиться в их корректности. Ultralytics предоставляет для этого вспомогательную функцию:

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

Эта функция рисует ограничивающие рамки, помечает объекты названиями классов и настраивает цвет текста для лучшей читаемости, помогая тебе выявить и исправить любые ошибки аннотирования перед началом обучения.

Конвертация масок сегментации в формат YOLO#

Если у тебя есть маски сегментации в бинарном формате, ты можешь конвертировать их в формат сегментации YOLO, используя:

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)

Эта утилита конвертирует изображения бинарных масок в формат сегментации YOLO и сохраняет их в указанной выходной директории.

FAQ#

  • Ultralytics YOLO поддерживает несколько форматов датасетов для сегментации экземпляров, причем основным форматом является собственный формат Ultralytics YOLO. Каждое изображение в твоем датасете требует соответствующего текстового файла с информацией об объектах, разбитой на несколько строк (по одной строке на объект), с указанием индекса класса и нормализованных ограничивающих координат. Более подробные инструкции по формату датасета YOLO см. в разделе Обзор датасетов для сегментации экземпляров.

  • Преобразование аннотаций в формате COCO в формат YOLO выполняется просто с помощью инструментов Ultralytics. Ты можешь использовать функцию convert_coco из модуля ultralytics.data.converter:

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

    Этот скрипт преобразует аннотации твоего датасета COCO в требуемый формат YOLO, делая его пригодным для обучения твоих моделей YOLO. Для получения дополнительной информации обратись к разделу Перенос или конвертация форматов меток.

  • Чтобы подготовить YAML-файл для обучения моделей YOLO с помощью Ultralytics, тебе нужно определить пути к набору данных и названия классов. Вот пример конфигурации 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

    Обязательно обнови пути и имена классов в соответствии с твоим датасетом. Для получения дополнительной информации см. раздел Формат Dataset YAML.

  • Авторазметка в Ultralytics YOLO позволяет генерировать аннотации сегментации для твоего датасета с помощью предобученной модели обнаружения. Это значительно снижает потребность в ручной разметке. Ты можешь использовать функцию auto_annotate следующим образом:

    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"

    Эта функция автоматизирует процесс аннотирования, делая его быстрее и эффективнее. Для получения дополнительной информации изучи Справочник по авторазметке.

Комментарии