Link to this sectionОбзор наборов данных для сегментации экземпляров#
Сегментация экземпляров — это задача компьютерного зрения, которая включает идентификацию и оконтуривание отдельных объектов на изображении. В этом руководстве представлен обзор форматов наборов данных, поддерживаемых Ultralytics YOLO для задач сегментации экземпляров, а также инструкции по подготовке, конвертации и использованию этих данных для обучения твоих моделей.
Link to this sectionПоддерживаемые форматы наборов данных#
Link to this sectionФормат 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>
Link to this sectionФормат 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.
Link to this sectionИспользование#
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)Link to this sectionПоддерживаемые наборы данных#
Ultralytics YOLO поддерживает различные наборы данных для задач сегментации экземпляров. Вот список наиболее часто используемых из них:
- Carparts-seg: Специализированный набор данных, ориентированный на сегментацию автомобильных запчастей, идеально подходит для автомобильной промышленности. Он включает множество транспортных средств с подробными аннотациями отдельных компонентов автомобиля.
- COCO: Обширный набор данных для обнаружения объектов, сегментации и описания изображений (captioning), содержащий более 200 тысяч размеченных изображений в широком спектре категорий.
- COCO8-seg: Компактный набор из 8 изображений, входящий в состав COCO, предназначенный для быстрой проверки обучения моделей сегментации, идеально подходит для CI-тестов и валидации рабочих процессов в репозитории
ultralytics. - COCO128-seg: Меньший набор данных для задач сегментации экземпляров, содержащий подмножество из 128 изображений COCO с аннотациями сегментации.
- Crack-seg: Набор данных, предназначенный для сегментации трещин на различных поверхностях. Он важен для обслуживания инфраструктуры и контроля качества, предоставляя детальные изображения для обучения моделей распознаванию структурных дефектов.
- Package-seg: Набор данных, посвященный сегментации различных типов упаковочных материалов и их форм. Он особенно полезен для логистики и складской автоматизации, помогая в разработке систем для обработки и сортировки посылок.
Link to this sectionДобавление собственного набора данных#
Если у тебя есть собственный набор данных и ты хочешь использовать его для обучения моделей сегментации в формате Ultralytics YOLO, убедись, что он соответствует формату, указанному выше в разделе «Формат Ultralytics YOLO». Конвертируй свои аннотации в требуемый формат и укажи пути, количество классов и названия классов в YAML-файле конфигурации. Храни images/ и labels/ как отдельные папки на одном уровне с одинаковой структурой подпапок; размещение файлов меток .txt внутри папки с изображениями может привести к тому, что модель не распознает метки.
Link to this sectionПеренос или конвертация форматов разметки#
Link to this sectionФормат набора данных 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.
Не забудь дважды проверить, совместим ли набор данных, который ты хочешь использовать, с твоей моделью и соответствует ли он необходимым форматам. Правильно отформатированные наборы данных критически важны для успешного обучения моделей сегментации.
Link to this sectionАвтоматическая аннотация#
Автоматическая аннотация — это важная функция, которая позволяет создавать набор данных для сегментации с помощью предобученной модели обнаружения. Она позволяет быстро и точно разметить большое количество изображений без необходимости ручной маркировки, экономя твое время и усилия.
Link to this sectionГенерация набора данных для сегментации с использованием модели обнаружения#
Чтобы автоматически разметить свой набор данных с помощью фреймворка 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 для NMS для фильтрации перекрывающихся рамок. |
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), устройство для запуска моделей и выходную директорию для сохранения результатов аннотации.
Используя мощь предобученных моделей, автоматическая аннотация может значительно сократить время и усилия, необходимые для создания высококачественных наборов данных сегментации. Эта функция особенно полезна для исследователей и разработчиков, работающих с большими коллекциями изображений, так как позволяет им сосредоточиться на разработке и оценке моделей, а не на ручной аннотации.
Link to this sectionВизуализация аннотаций набора данных#
Перед обучением модели часто бывает полезно визуализировать аннотации твоего набора данных, чтобы убедиться в их корректности. 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,
)Эта функция рисует ограничивающие рамки, помечает объекты названиями классов и настраивает цвет текста для лучшей читаемости, помогая тебе выявить и исправить любые ошибки аннотирования перед началом обучения.
Link to this sectionКонвертация масок сегментации в формат 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 и сохраняет их в указанной выходной директории.
Link to this sectionFAQ#
Link to this sectionКакие форматы наборов данных поддерживает Ultralytics YOLO для сегментации экземпляров?#
Ultralytics YOLO поддерживает несколько форматов наборов данных для сегментации экземпляров, причем основным является собственный формат Ultralytics YOLO. Для каждого изображения в твоем наборе данных требуется соответствующий текстовый файл с информацией об объектах, сегментированной по нескольким строкам (одна строка на объект), где указаны индекс класса и нормализованные координаты рамки. Более подробные инструкции по формату набора данных YOLO см. в разделе Обзор наборов данных для сегментации экземпляров.
Link to this sectionКак я могу конвертировать аннотации набора данных 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. Для получения дополнительной информации обратись к разделу Port or Convert Label Formats.
Link to this sectionКак мне подготовить 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Убедись, что ты обновил пути и названия классов в соответствии с твоим набором данных. Для получения дополнительной информации ознакомься с разделом Dataset YAML Format.
Link to this sectionЧто такое функция автоматической аннотации в 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"Эта функция автоматизирует процесс аннотирования, делая его быстрее и эффективнее. Подробнее читай в Auto-Annotate Reference.