Набор данных SKU-110k
Набор данных SKU-110k - это коллекция плотно упакованных изображений торговых полок, созданная для поддержки исследований в задачах обнаружения объектов. Разработанный Эраном Голдманом и другими, набор содержит более 110 000 уникальных категорий единиц хранения (SKU) с плотно упакованными объектами, часто похожими или даже идентичными, расположенными в непосредственной близости друг от друга.
Основные характеристики
- SKU-110k содержит изображения полок магазинов со всего мира, на которых изображены плотно упакованные предметы, представляющие сложность для современных детекторов объектов.
- Набор данных включает в себя более 110 000 уникальных категорий SKU, обеспечивая разнообразный спектр внешнего вида объектов.
- Аннотации включают ограничительные рамки для объектов и метки категорий SKU.
Структура набора данных
Набор данных SKU-110k разбит на три основных подмножества:
- Обучающий набор: Это подмножество содержит изображения и аннотации, используемые для обучения моделей обнаружения объектов.
- Набор для проверки: Это подмножество состоит из изображений и аннотаций, которые использовались для проверки модели во время обучения.
- Тестовый набор: Это подмножество предназначено для окончательной оценки обученных моделей обнаружения объектов.
Приложения
Набор данных SKU-110k широко используется для обучения и оценки моделей глубокого обучения в задачах обнаружения объектов, особенно в плотно упакованных сценах, таких как витрины розничных магазинов. Разнообразие категорий SKU и плотное расположение объектов в наборе данных делают его ценным ресурсом для исследователей и практиков в области компьютерного зрения.
Набор данных YAML
Для определения конфигурации набора данных используется файл YAML (Yet Another Markup Language). Он содержит информацию о путях к набору данных, классах и другую необходимую информацию. В случае с набором данных SKU-110K файл YAML SKU-110K.yaml
файл хранится по адресу https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml.
ultralytics/cfg/datasets/SKU-110K.yaml
# Ultralytics YOLO 🚀, AGPL-3.0 license
# SKU-110K retail items dataset https://github.com/eg4000/SKU110K_CVPR19 by Trax Retail
# Documentation: https://docs.ultralytics.com/datasets/detect/sku-110k/
# Example usage: yolo train data=SKU-110K.yaml
# parent
# ├── ultralytics
# └── datasets
# └── SKU-110K ← downloads here (13.6 GB)
# 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: ../datasets/SKU-110K # dataset root dir
train: train.txt # train images (relative to 'path') 8219 images
val: val.txt # val images (relative to 'path') 588 images
test: test.txt # test images (optional) 2936 images
# Classes
names:
0: object
# Download script/URL (optional) ---------------------------------------------------------------------------------------
download: |
import shutil
from pathlib import Path
import numpy as np
import pandas as pd
from tqdm import tqdm
from ultralytics.utils.downloads import download
from ultralytics.utils.ops import xyxy2xywh
# Download
dir = Path(yaml['path']) # dataset root dir
parent = Path(dir.parent) # download dir
urls = ['http://trax-geometry.s3.amazonaws.com/cvpr_challenge/SKU110K_fixed.tar.gz']
download(urls, dir=parent)
# Rename directories
if dir.exists():
shutil.rmtree(dir)
(parent / 'SKU110K_fixed').rename(dir) # rename dir
(dir / 'labels').mkdir(parents=True, exist_ok=True) # create labels dir
# Convert labels
names = 'image', 'x1', 'y1', 'x2', 'y2', 'class', 'image_width', 'image_height' # column names
for d in 'annotations_train.csv', 'annotations_val.csv', 'annotations_test.csv':
x = pd.read_csv(dir / 'annotations' / d, names=names).values # annotations
images, unique_images = x[:, 0], np.unique(x[:, 0])
with open((dir / d).with_suffix('.txt').__str__().replace('annotations_', ''), 'w') as f:
f.writelines(f'./images/{s}\n' for s in unique_images)
for im in tqdm(unique_images, desc=f'Converting {dir / d}'):
cls = 0 # single-class dataset
with open((dir / 'labels' / im).with_suffix('.txt'), 'a') as f:
for r in x[images == im]:
w, h = r[6], r[7] # image width, height
xywh = xyxy2xywh(np.array([[r[1] / w, r[2] / h, r[3] / w, r[4] / h]]))[0] # instance
f.write(f"{cls} {xywh[0]:.5f} {xywh[1]:.5f} {xywh[2]:.5f} {xywh[3]:.5f}\n") # write label
Использование
Чтобы обучить модель YOLOv8n на наборе данных SKU-110K в течение 100 эпох при размере изображения 640, ты можешь воспользоваться следующими фрагментами кода. Полный список доступных аргументов ты найдешь на странице обучения модели.
Пример поезда
Образцы данных и аннотации
Набор данных SKU-110k содержит разнообразные изображения торговых полок с плотно упакованными объектами, что обеспечивает богатый контекст для задач обнаружения объектов. Вот несколько примеров данных из этого набора, а также соответствующие аннотации к ним:
- Изображение плотно упакованной полки в розничной торговле: Это изображение демонстрирует пример плотно упакованных объектов на полке в розничной торговле. Объекты аннотированы ограничительными рамками и метками категорий SKU.
Этот пример демонстрирует разнообразие и сложность данных в наборе данных SKU-110k и подчеркивает важность высококачественных данных для задач обнаружения объектов.
Цитаты и благодарности
Если ты используешь набор данных SKU-110k в своих исследованиях или разработках, пожалуйста, ссылайся на следующую статью:
Мы хотели бы выразить благодарность Эрану Голдману и др. за создание и поддержку набора данных SKU-110k как ценного ресурса для сообщества исследователей компьютерного зрения. Чтобы узнать больше о наборе данных SKU-110k и его создателях, посети репозиторий SKU-110k dataset GitHub.