Перейти к содержанию

Обзор наборов данных для сегментации экземпляров

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

Поддерживаемые форматы наборов данных

Формат 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> являются координатами ограничивающей рамки маски сегментации объекта. Координаты разделены пробелами.

Вот пример формата набора данных 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, используемого для определения набора данных сегментации:

# 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("yolo11n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640

Поддерживаемые наборы данных

Ultralytics YOLO поддерживает различные наборы данных для задач сегментации экземпляров. Вот список наиболее часто используемых:

  • COCO: исчерпывающий набор данных для обнаружения объектов, сегментации и создания подписей, содержащий более 200 тысяч размеченных изображений в широком диапазоне категорий.
  • COCO8-seg: Компактный набор из 8 изображений COCO, предназначенный для быстрой проверки обучения модели сегментации, идеально подходит для проверок CI и валидации рабочего процесса в ultralytics репозитории.
  • COCO128-seg: небольшой набор данных для задач сегментации экземпляров, содержащий подмножество из 128 изображений COCO с аннотациями сегментации.
  • Carparts-seg: специализированный набор данных, ориентированный на сегментацию автомобильных деталей, идеально подходит для автомобильных приложений. Он включает в себя различные транспортные средства с подробными аннотациями отдельных автомобильных компонентов.
  • Crack-seg: набор данных, предназначенный для сегментации трещин на различных поверхностях. Имеет важное значение для обслуживания инфраструктуры и контроля качества, он предоставляет подробные изображения для обучения моделей выявлению структурных недостатков.
  • Package-seg: Набор данных, предназначенный для сегментации различных типов упаковочных материалов и форм. Он особенно полезен для логистики и автоматизации складов, помогая в разработке систем для обработки и сортировки упаковок.

Добавление собственного набора данных

Если у вас есть собственный набор данных и вы хотите использовать его для обучения моделей сегментации с форматом Ultralytics YOLO, убедитесь, что он соответствует формату, указанному выше в разделе «Формат Ultralytics YOLO». Преобразуйте свои аннотации в требуемый формат и укажите пути, количество классов и имена классов в файле конфигурации YAML.

Перенос или преобразование форматов меток

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

# 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="yolo11x.pt", sam_model="sam_b.pt")  # or sam_model="mobile_sam.pt"

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



📅 Создано 1 год назад ✏️ Обновлено 17 дней назад

Комментарии