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