Обзор наборов данных сегментации экземпляров
Сегментация экземпляров - это задача компьютерного зрения, которая заключается в идентификации и выделении отдельных объектов на изображении. В этом руководстве представлен обзор форматов наборов данных, поддерживаемых Ultralytics YOLO для задач сегментации экземпляров, а также инструкции по подготовке, конвертации и использованию этих наборов данных для обучения ваших моделей.
Поддерживаемые форматы наборов данных
Ultralytics YOLO формат
Формат меток датасета, используемый для обучения моделей сегментации YOLO , выглядит следующим образом:
- Один текстовый файл на изображение: Каждое изображение в наборе данных имеет соответствующий текстовый файл с тем же именем, что и файл изображения, и расширением ".txt".
- По одной строке на объект: Каждая строка в текстовом файле соответствует одному объекту на изображении.
- Информация об объекте в каждой строке: Каждая строка содержит следующую информацию об экземпляре объекта:
- Индекс класса объекта: Целое число, представляющее класс объекта (например, 0 для человека, 1 для автомобиля и т.д.).
- Граничные координаты объекта: Граничные координаты вокруг области маски, нормированные на значения от 0 до 1.
Формат одной строки в файле набора данных сегментации выглядит следующим образом:
В этом формате, <class-index>
индекс класса для объекта, и <x1> <y1> <x2> <y2> ... <xn> <yn>
это граничные координаты маски сегментации объекта. Координаты разделены пробелами.
Вот пример формата набора данных 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 точки xy:
<class-index> <x1> <y1> <x2> <y2> <x3> <y3>
Набор данных в формате YAML
Фреймворк Ultralytics использует формат файла YAML для определения набора данных и конфигурации модели для обучения моделей обнаружения. Ниже приведен пример формата YAML, используемого для определения набора данных обнаружения:
# 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: ../datasets/coco8-seg # dataset root dir (absolute or relative; if relative, it's relative to default datasets_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 (80 COCO classes)
names:
0: person
1: bicycle
2: car
# ...
77: teddy bear
78: hair drier
79: toothbrush
Сайт train
и val
поля указывают пути к каталогам, содержащим обучающие и проверочные изображения соответственно.
names
представляет собой словарь имен классов. Порядок имен должен соответствовать порядку индексов классов объектов в файлах набора данных YOLO .
Использование
Пример
Поддерживаемые наборы данных
Ultralytics YOLO поддерживает различные наборы данных для задач сегментации экземпляров. Вот список наиболее часто используемых:
- COCO: всеобъемлющий набор данных для обнаружения, сегментации и создания надписей к объектам, включающий более 200 тысяч помеченных изображений по широкому спектру категорий.
- COCO8-seg: Компактное подмножество COCO из 8 изображений, предназначенное для быстрого тестирования обучения модели сегментации, идеально подходит для проверки CI и валидации рабочего процесса в
ultralytics
хранилище. - COCO128-seg: меньший набор данных для задач сегментации экземпляров, содержащий подмножество из 128 изображений COCO с аннотациями к сегментации.
- Carparts-seg: специализированный набор данных, ориентированный на сегментацию деталей автомобиля, идеально подходящий для автомобильных приложений. Он включает в себя различные автомобили с подробными аннотациями отдельных автомобильных компонентов.
- Crack-seg: набор данных, предназначенный для сегментации трещин на различных поверхностях. Он необходим для обслуживания и контроля качества инфраструктуры и позволяет получать детальные изображения для обучения моделей, позволяющих выявлять слабые места в структуре.
- Package-seg: набор данных, предназначенный для сегментации различных типов упаковочных материалов и форм. Он особенно полезен для логистики и автоматизации складов, помогая разрабатывать системы для обработки и сортировки упаковки.
Добавление собственного набора данных
Если у вас есть собственный набор данных и вы хотите использовать его для обучения моделей сегментации с форматом Ultralytics YOLO , убедитесь, что он соответствует формату, указанному выше в разделе "ФорматUltralytics YOLO ". Преобразуйте аннотации в нужный формат и укажите пути, количество классов и имена классов в конфигурационном файле YAML.
Перенос или преобразование форматов этикеток
Формат набора данных COCO в формат YOLO
Вы можете легко конвертировать метки из популярного формата наборов данных COCO в формат YOLO с помощью следующего фрагмента кода:
Пример
Этот инструмент конвертирования можно использовать для преобразования набора данных COCO или любого другого набора данных в формате COCO в формат Ultralytics YOLO .
Не забудьте перепроверить, совместим ли набор данных, который вы хотите использовать, с вашей моделью и соблюдает ли он необходимые соглашения о формате. Правильно отформатированные наборы данных очень важны для обучения успешных моделей обнаружения объектов.
Автоматическая аннотация
Автоаннотирование - важная функция, позволяющая генерировать набор данных сегментации с помощью предварительно обученной модели обнаружения. Она позволяет быстро и точно аннотировать большое количество изображений, не прибегая к ручной маркировке, что экономит время и силы.
Создание набора данных для сегментации с использованием модели обнаружения
Для автоаннотирования набора данных с помощью фреймворка Ultralytics вы можете использовать auto_annotate
как показано ниже:
Пример
Аргумент | Тип | По умолчанию | Описание |
---|---|---|---|
data |
str |
требуется | Путь к каталогу, содержащему целевые изображения для аннотации или сегментации. |
det_model |
str |
'yolo11x.pt' |
YOLO траектория модели обнаружения для первоначального обнаружения объекта. |
sam_model |
str |
'sam_b.pt' |
Путь модели SAM для сегментации (поддерживает модели SAM, SAM2 и mobile_sam). |
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 |
Каталог сохранения аннотаций (по умолчанию './labels' относительно пути к данным). |
Сайт auto_annotate
Функция принимает путь к вашим изображениям, а также дополнительные аргументы для задания предварительно обученных моделей обнаружения, т.е. YOLO11, YOLOv8 или другой модели и модели сегментации, т.е, SAM, SAM2 или MobileSAMустройство, на котором будут запускаться модели, и выходной каталог для сохранения аннотированных результатов.
Используя возможности предварительно обученных моделей, автоаннотирование позволяет значительно сократить время и усилия, необходимые для создания высококачественных наборов данных сегментации. Эта функция особенно полезна для исследователей и разработчиков, работающих с большими коллекциями изображений, поскольку позволяет им сосредоточиться на разработке и оценке моделей, а не на ручном аннотировании.
Визуализация аннотаций к набору данных
Перед обучением модели часто бывает полезно визуализировать аннотации к набору данных, чтобы убедиться в их правильности. В 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 поддерживает несколько форматов наборов данных для сегментации экземпляров, при этом основным форматом является собственный формат Ultralytics YOLO . Каждое изображение в наборе данных должно содержать соответствующий текстовый файл с информацией об объекте, сегментированной на несколько строк (по одной строке на объект), с указанием индекса класса и нормализованных граничных координат. Более подробные инструкции по формату набора данных YOLO можно найти в разделе Обзор наборов данных сегментации объектов.
Как преобразовать аннотации наборов данных COCO в формат 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-файл для обучения моделей Ultralytics YOLO ?
Чтобы подготовить YAML-файл для обучения моделей YOLO с помощью Ultralytics, необходимо определить пути к набору данных и имена классов. Вот пример конфигурации YAML:
path: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
names:
0: person
1: bicycle
2: car
# ...
Убедитесь, что вы обновили пути и имена классов в соответствии с вашим набором данных. Для получения дополнительной информации ознакомьтесь с разделом Формат YAML набора данных.
Что такое функция автоаннотирования в Ultralytics YOLO ?
Автоматическая аннотация в Ultralytics YOLO позволяет генерировать аннотации сегментации для вашего набора данных с помощью предварительно обученной модели обнаружения. Это значительно сокращает необходимость в ручном маркировании. Вы можете использовать auto_annotate
функционируют следующим образом:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt") # or sam_model="mobile_sam.pt"
Эта функция автоматизирует процесс аннотирования, делая его более быстрым и эффективным. Для получения более подробной информации изучите справочник по автоаннотированию.