Ultralytics YOLO27:
Get Started

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

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

Поддерживаемые форматы датасетов#

Формат Ultralytics YOLO#

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

  1. Один текстовый файл на изображение: каждому изображению в наборе данных соответствует текстовый файл с таким же именем и расширением ".txt".
  2. Одна строка на объект: каждая строка текстового файла соответствует одному экземпляру объекта на изображении.
  3. Информация об объекте в каждой строке: каждая строка содержит следующие сведения об экземпляре объекта:
    • Индекс класса объекта: целое число, обозначающее класс объекта (например, 0 — человек, 1 — автомобиль и т. д.).
    • Координаты полигона объекта: точки (x, y), очерчивающие маску объекта и нормализованные в диапазоне от 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>
  • Для каждого объекта нужен полигон. Строки в формате детекции (<class-index> <x_center> <y_center> <width> <height>) не содержат полигонов, а набор данных для сегментации, в котором число ограничивающих рамок не совпадает с числом полигонов, отклоняется с ошибкой ValueError при загрузке меток.

Формат 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

# Загрузить модель
model = YOLO("yolo26n-seg.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)

# Обучить модель
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

Поддерживаемые датасеты#

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

  • 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 для подавления немаксимумов, чтобы отфильтровать перекрывающиеся рамки.
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 есть вспомогательная функция. Она считывает только метки ограничивающих рамок в формате детекции (<class-index> <x_center> <y_center> <width> <height>), поэтому не может обработать файлы меток с полигонами сегментации:

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Определи карту меток со всеми размеченными классами.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Путь к входному изображению.
    "path/to/annotations.txt",  # Путь к файлу аннотаций изображения.
    label_map,
)

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

Преобразование масок сегментации в формат YOLO#

Если у тебя есть изображения масок в оттенках серого, где значение каждого пикселя соответствует индексу класса + 1 (0 — фон), их можно преобразовать в формат сегментации YOLO с помощью:

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# Для наборов данных, таких как COCO, с 80 классами
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

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

Часто задаваемые вопросы#

  • 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

    Укажи пути и имена классов в соответствии со своим набором данных. Подробнее см. в разделе Формат 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"

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

Комментарии