Обзор наборов данных для сегментации экземпляров#
Сегментация экземпляров — это задача компьютерного зрения, в которой нужно обнаруживать и выделять отдельные объекты на изображении. В этом руководстве представлен обзор форматов наборов данных, поддерживаемых Ultralytics YOLO для задач сегментации экземпляров, а также инструкции по подготовке, преобразованию и использованию таких наборов данных для обучения моделей.
Поддерживаемые форматы датасетов#
Формат Ultralytics YOLO#
Формат меток набора данных для обучения моделей сегментации YOLO выглядит следующим образом:
- Один текстовый файл на изображение: каждому изображению в наборе данных соответствует текстовый файл с таким же именем и расширением ".txt".
- Одна строка на объект: каждая строка текстового файла соответствует одному экземпляру объекта на изображении.
- Информация об объекте в каждой строке: каждая строка содержит следующие сведения об экземпляре объекта:
- Индекс класса объекта: целое число, обозначающее класс объекта (например, 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 🚀 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 удобен, если нужно обучаться на подмножестве каталога, пропускать изображения без меток или объединять изображения из нескольких источников в одну выборку.
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: personnames — это словарь имен классов. Порядок имен должен соответствовать порядку индексов классов объектов в файлах набора данных 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")| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
data | str | обязательно | Путь к каталогу с изображениями, которые нужно аннотировать или сегментировать. |
det_model | str | 'yolo26x.pt' | Путь к модели обнаружения YOLO для первоначального обнаружения объектов. |
sam_model | str | 'sam_b.pt' | Путь к модели SAM для сегментации (поддерживаются веса SAM, SAM 2, MobileSAM и SAM 3). |
device | str | '' | Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства). |
conf | float | 0.25 | Порог уверенности модели обнаружения YOLO для фильтрации слабых детекций. |
iou | float | 0.45 | Порог IoU для подавления немаксимумов, чтобы отфильтровать перекрывающиеся рамки. |
imgsz | int | 640 | Размер входных изображений (при необходимости округляется вверх до ближайшего числа, кратного 32). |
max_det | int | 300 | Максимальное число детекций на изображение для экономии памяти. |
classes | list[int] | None | Список индексов классов для обнаружения (например, [0, 1] для человека и велосипеда). |
output_dir | str | None | Каталог для сохранения аннотаций (по умолчанию: соседний каталог <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"Эта функция автоматизирует процесс разметки, делая его быстрее и эффективнее. Подробнее см. в справочнике по автоматической разметке.