YOLO Vision 2026:

SKU-110K 数据集#

SKU-110K 数据集是一个单类对象检测数据集,包含 11,743 张密集排列的零售货架图像,分为 8,219 张训练集、588 张验证集和 2,936 张测试集。每个商品都在单一类别 object 下标注了一个边界框——该名称指的是画面中拍摄的超过 110,000 种独特的库存单位 (SKU),而不是 110,000 个检测类别。该数据集由 Eran Goldman 等人为 CVPR 2019 论文密集团簇场景中的精确检测而创建,包含超过 170 万个标注商品(每张图像平均约 147 个),这使其成为拥挤零售环境中计算机视觉模型的一个严苛基准。



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

SKU-110K dataset densely packed retail shelf detection

主要特性#

  • 单类检测:每个商品都在单一类别 object (names: {0: object}) 下用一个边界框进行标记——这些标注不包含每个 SKU 的类别标签。
  • 极高目标密度:来自世界各地的零售货架图像平均每张包含约 147 个紧密排列的产品,这些物体通常外观相似甚至相同,且位置非常接近。
  • 大规模:超过 110,000 个独特的 SKU 和 11,743 张图像中超过 170 万个标注边界框,对最先进的目标检测器构成了挑战。

数据集结构#

SKU-110K 数据集分为三个子集,它们都共享同一个 object 类别:

拆分图像描述
训练8,219用于模型训练的图像和标注
验证588在训练期间用于评估的保留图像
测试2,936用于最终模型评估的图像

应用#

SKU-110K 数据集广泛用于在对象检测任务中训练和评估深度学习模型,尤其是在零售货架陈列等密集团簇场景中。其应用包括:

  • 零售库存管理与自动化
  • 电子商务平台中的产品识别
  • 货架图 (Planogram) 合规性验证
  • 门店自助结账系统
  • 仓库中的机器人拣选与分拣

要标注你自己的货架图像、训练和在浏览器中管理零售检测数据集,请使用 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 GB 下载量

SKU-110K 在你首次训练时会自动下载,其 11,743 张图像需要约 13.6 GB 的可用磁盘空间。下载脚本还会获取原始标注并将其转换为 YOLO 格式,这可能需要几分钟。

要在 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)

示例数据与标注#

SKU-110K 图像捕捉了真实零售货架上密集排列的产品,数十个近乎相同的物品并排摆放。以下是一个带有标注的图像示例:

SKU-110K retail product detection on store shelves

  • 密集排列的零售货架图像:此图像展示了零售货架环境中密集排列对象的一个示例。对象在单一 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 dataset GitHub repository

常见问题解答#

  • SKU-110K 数据集是一个单类对象检测数据集,包含 11,743 张密集排列的零售货架图像,由 Eran Goldman 等人为其 CVPR 2019 论文创建。每个商品都标有一个 object 边界框,图像涵盖超过 110,000 种独特的库存单位 (SKU),使其成为在拥挤场景中检测对象以及构建零售计算机视觉系统的强力基准。

  • 不是。SKU-110K 是单类的:每个商品都在类别 object (names: {0: object}) 下用一个边界框进行标注。名称中的“110K”指的是图像中拍摄的独特库存单位 (SKU) 的数量,而不是检测类别的数量。

  • SKU-110K 数据集包含 11,743 张图像——8,219 张用于训练,588 张用于验证,2,936 张用于测试——以及一个检测类别 object。有关详细信息,请参阅数据集结构部分和 SKU-110K.yaml 配置。

  • SKU-110K 大约为 13.6 GB,在你首次使用 data="SKU-110K.yaml" 进行训练时会自动下载——无需手动下载。要浏览更小的选项,请参阅检测数据集概览

  • 在 SKU-110K 数据集上训练 YOLO26 模型非常直接。以下是一个训练 YOLO26n 模型 100 个 epoch、图像大小为 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)

    有关可用参数的完整列表,请参考模型训练页面和模型训练技巧

评论