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

Обзор наборов данных для обнаружения объектов

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

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

Формат Ultralytics YOLO

Формат Ultralytics YOLO — это формат конфигурации набора данных, который позволяет определить корневой каталог набора данных, относительные пути к каталогам изображений для обучения/проверки/тестирования или *.txt файлы, содержащие пути к изображениям, и словарь названий классов. Вот пример:

ultralytics/cfg/datasets/coco8.yaml

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO8 dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco8/
# Example usage: yolo train data=coco8.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8 ← 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 # 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.zip

Метки для этого формата должны быть экспортированы в формат YOLO с одним *.txt файлом на изображение. Если в изображении нет объектов, то *.txt файл не требуется. В *.txt файле должна быть отформатирована одна строка на объект в class x_center y_center width height формате. Координаты ограничивающего прямоугольника должны быть в нормализованном xywh формате (от 0 до 1). Если ваши ограничивающие прямоугольники указаны в пикселях, вам следует разделить x_center и width по ширине изображения, и y_center и height по высоте изображения. Номера классов должны начинаться с нуля (индексация с 0).

Пример размеченного изображения

Файл с метками, соответствующий изображению выше, содержит 2 человек (класс 0) и галстук (класс 27):

Пример файла меток

При использовании формата Ultralytics YOLO организуйте свои обучающие и проверочные изображения и метки, как показано в примере набора данных COCO8 ниже.

Пример структуры каталога набора данных

Пример использования

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

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

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

Формат Ultralytics NDJSON

Формат NDJSON (JSON с разделителями-переводами строк) предоставляет альтернативный способ определения наборов данных для моделей Ultralytics YOLO11. В этом формате метаданные и аннотации набора данных хранятся в одном файле, где каждая строка содержит отдельный объект JSON.

Файл набора данных NDJSON содержит:

  1. Запись набора данных (первая строка): Содержит метаданные набора данных, включая тип задачи, названия классов и общую информацию.
  2. Записи изображений (последующие строки): Содержит данные отдельных изображений, включая размеры, аннотации и пути к файлам.

Пример NDJSON

{
    "type": "dataset",
    "task": "detect",
    "name": "Example",
    "description": "COCO NDJSON example dataset",
    "url": "https://app.ultralytics.com/user/datasets/example",
    "class_names": { "0": "person", "1": "bicycle", "2": "car" },
    "bytes": 426342,
    "version": 0,
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2025-01-01T00:00:00Z"
}
{
    "type": "image",
    "file": "image1.jpg",
    "url": "https://www.url.com/path/to/image1.jpg",
    "width": 640,
    "height": 480,
    "split": "train",
    "annotations": {
        "boxes": [
            [0, 0.52481, 0.37629, 0.28394, 0.41832],
            [1, 0.73526, 0.29847, 0.19275, 0.33691]
        ]
    }
}

Форматы аннотаций по задачам:

  • Обнаружение: "annotations": {"boxes": [[class_id, x_center, y_center, width, height], ...]}
  • Сегментация: "annotations": {"segments": [[class_id, x1, y1, x2, y2, ...], ...]}
  • Поза: "annotations": {"pose": [[class_id, x1, y1, v1, x2, y2, v2, ...], ...]}
  • OBB: "annotations": {"obb": [[class_id, x_center, y_center, width, height, angle], ...]}
  • Классификация: "annotations": {"classification": [class_id]}

Пример использования

Чтобы использовать набор данных NDJSON с YOLO11, просто укажите путь к .ndjson файл:

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")

# Train using NDJSON dataset
results = model.train(data="path/to/dataset.ndjson", epochs=100, imgsz=640)
# Start training with NDJSON dataset
yolo detect train data=path/to/dataset.ndjson model=yolo11n.pt epochs=100 imgsz=640

Преимущества формата NDJSON

  • Единый файл: Вся информация о наборе данных содержится в одном файле
  • Потоковая передача: Может обрабатывать большие наборы данных построчно, не загружая все в память
  • Интеграция с облаком: Поддерживает удаленные URL-адреса изображений для обучения на основе облака
  • Расширяемость: Легко добавлять пользовательские поля метаданных
  • Контроль версий: Формат одного файла хорошо работает с git и системами контроля версий

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

Ниже представлен список поддерживаемых наборов данных и краткое описание для каждого из них:

  • Argoverse: Набор данных, содержащий данные 3D-трекинга и прогнозирования движения из городских сред с богатой аннотацией.
  • COCO: Common Objects in Context (COCO) — это масштабный набор данных для обнаружения объектов, сегментации и создания подписей с 80 категориями объектов.
  • LVIS: Масштабный набор данных для обнаружения объектов, сегментации и создания подписей с 1203 категориями объектов.
  • COCO8: Уменьшенный набор, состоящий из первых 4 изображений из COCO train и COCO val, подходит для быстрой проверки.
  • COCO8-Grayscale: Оттенки серого версия COCO8, созданная путем преобразования RGB в оттенки серого, полезна для оценки одноканальных моделей.
  • COCO8-Multispectral: 10-канальная мультиспектральная версия COCO8, созданная путем интерполяции длин волн RGB, полезна для оценки моделей, учитывающих спектральные характеристики.
  • COCO128: Уменьшенный набор, состоящий из первых 128 изображений из COCO train и COCO val, подходит для тестов.
  • Global Wheat 2020: Набор данных, содержащий изображения колосьев пшеницы для Global Wheat Challenge 2020.
  • Objects365: Высококачественный, масштабный набор данных для обнаружения объектов с 365 категориями объектов и более 600 тыс. аннотированных изображений.
  • OpenImagesV7: Обширный набор данных от Google с 1,7 млн обучающих изображений и 42 тыс. изображений для проверки.
  • SKU-110K: Набор данных, содержащий плотное обнаружение объектов в розничной торговле, с более чем 11 тысячами изображений и 1,7 миллиона ограничивающих рамок.
  • HomeObjects-3K New 🚀: Набор данных предметов домашнего обихода в помещении, включающий кровати, стулья, телевизоры и многое другое — идеально подходит для приложений в области автоматизации умного дома, робототехники, дополненной реальности и анализа планировки помещений.
  • VisDrone: Набор данных, содержащий данные об обнаружении объектов и отслеживании нескольких объектов, полученные с помощью изображений, снятых с дронов, с более чем 10 тыс. изображений и видеопоследовательностей.
  • VOC: Набор данных Pascal Visual Object Classes (VOC) для обнаружения и сегментации объектов с 20 классами объектов и более 11 тыс. изображений.
  • xView: Набор данных для обнаружения объектов на изображениях сверху с 60 категориями объектов и более 1 миллиона аннотированных объектов.
  • Roboflow 100: Разнообразный эталон для обнаружения объектов со 100 наборами данных, охватывающими семь областей изображений для всесторонней оценки модели.
  • Brain-tumor: Набор данных для обнаружения опухолей головного мозга включает изображения МРТ или КТ с подробной информацией о наличии, местоположении и характеристиках опухоли.
  • African-wildlife: Набор данных с изображениями африканской дикой природы, включая буйволов, слонов, носорогов и зебр.
  • Signature: Набор данных с изображениями различных документов с аннотированными подписями, поддерживающий проверку документов и исследования по обнаружению мошенничества.
  • Medical-pills: набор данных, содержащий изображения медицинских таблеток, аннотированные для таких применений, как обеспечение качества фармацевтической продукции, сортировка таблеток и соблюдение нормативных требований.

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

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

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

Преобразование формата набора данных COCO в формат YOLO

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

Пример

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/")

Этот инструмент преобразования можно использовать для преобразования набора данных COCO или любого набора данных в формате COCO в формат Ultralytics YOLO. Процесс преобразует аннотации COCO на основе JSON в более простой текстовый формат YOLO, делая его совместимым с моделями Ultralytics YOLO.

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

Часто задаваемые вопросы

Что такое формат набора данных Ultralytics YOLO и как его структурировать?

Формат Ultralytics YOLO представляет собой структурированную конфигурацию для определения наборов данных в ваших проектах обучения. Он включает в себя установку путей к вашим изображениям для обучения, проверки и тестирования, а также к соответствующим меткам. Например:

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO8 dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco8/
# Example usage: yolo train data=coco8.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8 ← 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 # 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.zip

Метки сохраняются в *.txt файлах, по одному файлу на изображение, в формате class x_center y_center width height с нормализованными координатами. Подробное руководство см. в примере набора данных COCO8.

Как преобразовать набор данных COCO в формат YOLO?

Вы можете преобразовать набор данных COCO в формат YOLO с помощью инструментов преобразования Ultralytics. Вот быстрый способ:

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/")

Этот код преобразует ваши аннотации COCO в формат YOLO, обеспечивая бесшовную интеграцию с моделями Ultralytics YOLO. Для получения дополнительной информации посетите раздел Port or Convert Label Formats.

Какие наборы данных поддерживаются Ultralytics YOLO для обнаружения объектов?

Ultralytics YOLO поддерживает широкий спектр наборов данных, включая:

На каждой странице набора данных представлена подробная информация о структуре и использовании, адаптированная для эффективного обучения YOLO11. Ознакомьтесь с полным списком в разделе Supported Datasets.

Как начать обучение модели YOLO11 с использованием моего набора данных?

Чтобы начать обучение модели YOLO11, убедитесь, что ваш набор данных отформатирован правильно и пути определены в YAML-файле. Используйте следующий скрипт, чтобы начать обучение:

Пример

from ultralytics import YOLO

model = YOLO("yolo11n.pt")  # Load a pretrained model
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)
yolo detect train data=path/to/your_dataset.yaml model=yolo11n.pt epochs=100 imgsz=640

Обратитесь к разделу Usage для получения более подробной информации об использовании различных режимов, включая команды CLI.

Где я могу найти практические примеры использования Ultralytics YOLO для обнаружения объектов?

Ultralytics предоставляет многочисленные примеры и практические руководства по использованию YOLO11 в различных приложениях. Для получения всестороннего обзора посетите Ultralytics Blog, где вы можете найти тематические исследования, подробные руководства и истории сообщества, демонстрирующие обнаружение объектов, сегментацию и многое другое с помощью YOLO11. Для конкретных примеров ознакомьтесь с разделом Usage в документации.



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

Комментарии