Meet YOLO26: next-gen vision AI.

Link to this sectionОбзор наборов данных для сегментации объектов#

Сегментация объектов — это задача компьютерного зрения, которая включает в себя идентификацию и выделение отдельных объектов на изображении. В этом руководстве представлен обзор форматов наборов данных, поддерживаемых Ultralytics YOLO для задач сегментации, а также инструкции по подготовке, конвертации и использованию этих данных для обучения твоих моделей.

Link to this sectionПоддерживаемые форматы наборов данных#

Link to this sectionФормат Ultralytics YOLO#

Формат разметки набора данных, используемый для обучения моделей сегментации YOLO, выглядит следующим образом:

  1. Один текстовый файл на изображение: каждое изображение в наборе данных имеет соответствующий текстовый файл с тем же именем, что и файл изображения, и расширением ".txt".
  2. Одна строка на объект: каждая строка в текстовом файле соответствует одному экземпляру объекта на изображении.
  3. Информация об объекте в строке: каждая строка содержит следующую информацию об экземпляре объекта:
    • Индекс класса объекта: целое число, представляющее класс объекта (например, 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/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 указывают пути к каталогам, содержащим изображения для обучения и валидации соответственно.

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: комплексный набор данных для обнаружения объектов, сегментации и описания изображений, включающий более 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")
АргументТипПо умолчаниюОписание
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 для Non-Maximum Suppression для фильтрации перекрывающихся рамок.
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, устройства для запуска моделей и выходного каталога для сохранения аннотированных результатов.

Используя возможности предобученных моделей, автоматическая аннотация может значительно сократить время и усилия, необходимые для создания высококачественных наборов данных для сегментации. Эта функция особенно полезна для исследователей и разработчиков, работающих с большими коллекциями изображений, так как позволяет им сосредоточиться на разработке и оценке моделей, а не на ручной разметке.

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 sectionЧасто задаваемые вопросы (FAQ)#

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. Для получения подробной информации обратись к разделу Перенос или конвертация форматов меток.

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

Убедись, что ты обновил пути и имена классов в соответствии с твоим набором данных. Для получения дополнительной информации ознакомься с разделом Формат YAML набора данных.

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"

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

Комментарии