Ultralytics YOLO27:

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

Сегментация экземпляров — это задача компьютерного зрения, которая включает идентификацию и выделение отдельных объектов на изображении. В этом руководстве представлен обзор форматов наборов данных, поддерживаемых 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

# 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 поддерживает различные датасеты для задач сегментации экземпляров. Вот список наиболее часто используемых. Большинство этих датасетов также размещено на Ultralytics Platform, где ты можешь просматривать изображения и аннотации, изучать статистику датасетов и клонировать их для облачного обучения.

  • 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 предоставляет для этого вспомогательную функцию:

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 и сохраняет их в указанном выходном каталоге.

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

  • 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"

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

Комментарии