YOLO Vision 2026:

Набор данных SKU-110K#

Датасет SKU-110K представляет собой одноклассовый датасет обнаружения объектов, состоящий из 11 743 плотно заполненных изображений розничных полк, разделенных на 8219 обучающих, 588 валидационных и 2936 тестовых изображений. Каждый товар аннотирован одним ограничивающим прямоугольником (bbox) в рамках одного класса object — название указывает на более чем 110 000 уникальных товарных позиций (SKU), изображенных на кадрах, а не на 110 000 классов обнаружения. Созданный Эраном Голдманом (Eran Goldman) и др. для статьи на CVPR 2019 Precise Detection in Densely Packed Scenes, он содержит более 1,7 миллиона аннотированных продуктов — в среднем около 147 на одно изображение, — что делает его сложным эталонным тестом для моделей computer vision в условиях переполненной розничной среды.



Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

SKU-110K dataset densely packed retail shelf detection

Ключевые особенности#

  • Обнаружение для одного класса: Каждый товар помечен одним ограничивающим прямоугольником (bbox) в рамках единого класса object (names: {0: object}) — аннотации не содержат категорий для отдельных SKU.
  • Экстремальная плотность объектов: Изображения полок магазинов со всего мира содержат в среднем около 147 плотно упакованных товаров каждое, причем объекты часто выглядят похожими или даже идентичными и расположены в непосредственной близости друг от друга.
  • Масштаб: Более 110 000 уникальных SKU и свыше 1,7 миллиона аннотированных ограничивающих рамок на 11 743 изображениях бросают вызов современным детекторам объектов.

Структура набора данных#

Датасет SKU-110K разделен на три подмножества, которые используют единственный класс object:

SplitИзображенияОписание
Обучение8,219Изображения и аннотации для обучения модели
Validation588Изображения, отложенные для оценки в процессе обучения
Тестовый2,936Изображения для финальной оценки обученной модели

Применение#

Датасет SKU-110K широко используется для обучения и оценки моделей deep learning в задачах обнаружения объектов, особенно в условиях плотного размещения, таких как витрины магазинов. Его сценарии применения включают:

  • Управление товарными запасами в ритейле и их автоматизацию
  • Распознавание товаров на платформах электронной коммерции
  • Проверку соответствия планограмме
  • Системы самообслуживания в магазинах
  • Роботизированный сбор и сортировку товаров на складах

Чтобы аннотировать собственные изображения полок, обучать датасеты для розничной торговли и управлять ими прямо в браузере, запусти полный рабочий процесс с помощью Ultralytics Platform.

YAML набора данных#

Файл SKU-110K.yaml определяет конфигурацию датасета: пути к данным, имена классов и другие метаданные. Он поддерживается в репозитории Ultralytics по адресу https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml.

ultralytics/cfg/datasets/SKU-110K.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/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: 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 polars as pl

  from ultralytics.utils 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 = pl.read_csv(dir / "annotations" / d, has_header=False, new_columns=names, infer_schema_length=None).to_numpy()  # annotations
      images, unique_images = x[:, 0], np.unique(x[:, 0])
      with open((dir / d).with_suffix(".txt").__str__().replace("annotations_", ""), "w", encoding="utf-8") 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", encoding="utf-8") 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

Использование#

Загрузка 13,6 ГБ

SKU-110K загружается автоматически при первом запуске обучения и требует около 13,6 ГБ свободного места на диске для своих 11 743 изображений. Скрипт загрузки также получает исходные аннотации и преобразует их в формат YOLO, что может занять несколько минут.

Чтобы обучить модель YOLO26n на датасете SKU-110K в течение 100 эпох с размером изображения 640, ты можешь использовать следующие фрагменты кода. Полный список доступных аргументов см. на странице Training модели.

Пример обучения
from ultralytics import YOLO

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

# Train the model
results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)

Примеры данных и разметки#

Изображения SKU-110K фиксируют плотно расположенные товары на реальных полках магазинов, где десятки почти идентичных предметов стоят бок о бок. Вот пример изображения с его аннотациями:

SKU-110K retail product detection on store shelves

  • Изображение плотно заполненной розничной полки: Это изображение демонстрирует пример плотно расположенных объектов в условиях торговой полки. Объекты аннотированы ограничивающими прямоугольниками (bbox) в рамках единого класса object.

Плотное расположение товаров делает SKU-110K особенно ценным для разработки надежных решений компьютерного зрения для ритейла, так как большое количество объектов на изображение выводит детекторы далеко за пределы типичных эталонов.

Цитирование и благодарности#

Если ты используешь набор данных SKU-110K в своей исследовательской или проектной работе, пожалуйста, сошлися на следующую статью:

Цитата
@inproceedings{goldman2019dense,
  author    = {Eran Goldman and Roei Herzig and Aviv Eisenschtat and Jacob Goldberger and Tal Hassner},
  title     = {Precise Detection in Densely Packed Scenes},
  booktitle = {Proc. Conf. Comput. Vision Pattern Recognition (CVPR)},
  year      = {2019}
}

Мы выражаем признательность Эрану Голдману (Eran Goldman) и его коллегам за создание и поддержку датасета SKU-110K в качестве ценного ресурса для исследовательского сообщества в области компьютерного зрения. Дополнительную информацию о датасете SKU-110K и его авторах можно найти в репозитории датасета SKU-110K на GitHub.

FAQ#

  • Датасет SKU-110K — это одноклассовый датасет обнаружения объектов, содержащий 11 743 плотно заполненных изображения розничных полок, созданный Эраном Голдманом и др. для их статьи на CVPR 2019. Каждый товар помечен одним ограничивающим прямоугольником (bbox) класса object, а изображения охватывают более 110 000 уникальных товарных позиций (SKU), что делает его надежным эталоном для обнаружения объектов в переполненных сценах и создания систем computer vision для ритейла.

  • Нет. SKU-110K является одноклассовым: каждый продукт аннотирован одним ограничивающим прямоугольником (bbox) в рамках класса object (names: {0: object}). Число «110K» в названии относится к количеству уникальных товарных позиций (SKU), изображенных на снимках, а не к количеству классов обнаружения.

  • Датасет SKU-110K содержит 11 743 изображения (8219 для обучения, 588 для валидации и 2936 для тестирования) и один класс обнаружения object. Подробности см. в разделе Dataset Structure и конфигурации SKU-110K.yaml.

  • Размер SKU-110K составляет около 13,6 ГБ, и он загружается автоматически при первом запуске обучения с data="SKU-110K.yaml" — ручная загрузка не требуется. Чтобы ознакомиться с вариантами меньшего размера, см. обзор датасетов для обнаружения.

  • Обучение модели YOLO26 на наборе данных SKU-110K выполняется просто. Вот пример обучения модели YOLO26n на 100 эпохах с размером изображения 640:

    Пример обучения
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)
    
    # Train the model
    results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)

    Полный список доступных аргументов см. на странице Training модели и в разделе советы по обучению моделей.

Комментарии