SKU-110K データセット#
SKU-110K データセットは、11,743 枚の高密度な小売店舗の棚の画像で構成される単一クラスのオブジェクト検出データセットであり、トレーニング用に 8,219 枚、検証用に 588 枚、テスト用に 2,936 枚の画像に分割されています。すべての製品には、単一クラス object の下で 1 つのバウンディングボックスがアノテーションされています。この名前は、110,000 種類の検出クラスではなく、シーン全体で撮影された 110,000 種類を超える固有の SKU (ストック・キーピング・ユニット) に由来しています。Eran Goldman 氏らによって CVPR 2019 の論文Precise Detection in Densely Packed Scenesのために作成され、170 万件を超えるアノテーション済み製品(1 画像あたり平均約 147 件)が含まれており、混雑した小売環境におけるcomputer visionモデルにとって難易度の高いベンチマークとなっています。
Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

主な特徴#
- 単一クラス検出: すべての製品には、単一クラス
object(names: {0: object}) の下で 1 つのバウンディングボックスがラベル付けされています。アノテーションには SKU ごとのカテゴリラベルはありません。 - 極めて高い物体密度: 世界中の店舗の棚を撮影した画像には、1画像あたり平均で約147個の密集した製品が写っており、類似または同一の物体が近接して配置されていることがよくあります。
- 大規模: 11,743枚の画像にわたる11万以上のユニークなSKUと170万以上のバウンディングボックスのアノテーションが、最先端の物体検出器にとっての挑戦となります。
データセットの構造#
SKU-110K データセットは 3 つのサブセットに分割されており、すべて単一の object クラスを共有しています。
| 分割 | 画像 | 説明 |
|---|---|---|
| トレーニング | 8,219 | モデルトレーニング用の画像とアノテーション |
| バリデーション | 588 | トレーニング中の評価用のホールドアウト画像 |
| テスト | 2,936 | 学習済みモデルの最終評価用画像 |
アプリケーション#
SKU-110K データセットは、オブジェクト検出タスク、特に小売りの棚のディスプレイのような高密度に詰まったシーンにおいて、deep learningモデルのトレーニングと評価に広く使用されています。その用途には以下が含まれます。
- 小売在庫の管理と自動化
- Eコマースプラットフォームにおける製品認識
- プラノグラム準拠の検証
- 店舗でのセルフレジシステム
- 倉庫内でのロボットによるピッキングと仕分け
独自の棚画像のアノテーション、トレーニング、および小売検出データセットのブラウザでの管理を行うには、Ultralytics Platformを使用して完全なワークフローを実行します。
データセット YAML#
SKU-110K.yaml ファイルは、データセットのパス、クラス名、その他のメタデータといったデータセットの設定を定義します。これは Ultralytics リポジトリの https://github.com/ultralytics/ultralytics/blob/main/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使用方法#
SKU-110K は最初のトレーニング時に自動的にダウンロードされ、11,743枚の画像のために約13.6 GBの空きディスク容量が必要です。ダウンロードスクリプトは元ののアノテーションを取得してYOLO形式に変換するため、数分かかる場合があります。
画像サイズ 640 で SKU-110K データセット上で YOLO26n モデルを 100 epochs トレーニングするには、以下のコードスニペットを使用できます。利用可能な引数の包括的なリストについては、モデルの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 の画像は、実際の店舗の棚に密集して並べられた製品を捉えており、そこでは何十個ものほぼ同一のアイテムが並んでいます。以下は、アノテーションを含む画像の例です。

- 高密度に詰まった小売の棚の画像: この画像は、小売りの棚の環境における高密度に詰まったオブジェクトの例を示しています。オブジェクトには、単一の
objectクラスの下でバウンディングボックスがアノテーションされています。
製品の密集した配置により、SKU-110K は小売に特化した堅牢なコンピュータビジョンソリューションを開発する上で非常に価値があります。1画像あたりの物体数が非常に多いため、検出器は一般的なベンチマークをはるかに超える性能を求められます。
引用と謝辞#
研究や開発業務で 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}
}コンピュータビジョン研究コミュニティにとって貴重なリソースとして SKU-110K データセットを作成および維持してくださった Eran Goldman 氏らに感謝いたします。SKU-110K データセットとその作成者の詳細については、SKU-110K dataset GitHub repository をご覧ください。
よくある質問 (FAQ)#
SKU-110K データセットは、Eran Goldman 氏らによって CVPR 2019 の論文のために作成された、11,743 枚の高密度な小売りの棚の画像からなる単一クラスのオブジェクト検出データセットです。すべての製品には 1 つの
objectバウンディングボックスがラベル付けされており、画像には 110,000 種類を超える固有の SKU (ストック・キーピング・ユニット) が写っているため、混雑したシーンでのオブジェクト検出や小売用computer visionシステムの構築において強力なベンチマークとなります。いいえ。SKU-110K は単一クラスです。すべての製品には、クラス
object(names: {0: object}) の下で 1 つのバウンディングボックスがアノテーションされています。名前の「110K」は、検出クラスの数ではなく、画像全体で撮影された固有の SKU (ストック・キーピング・ユニット) の数を指しています。SKU-110K データセットには 11,743 枚の画像(トレーニング用 8,219 枚、検証用 588 枚、テスト用 2,936 枚)と、単一の検出クラス
objectが含まれています。詳細については、Dataset Structure セクションおよびSKU-110K.yamlの設定を参照してください。SKU-110K は約 13.6 GB であり、
data="SKU-110K.yaml"を使用して初めてトレーニングを行う際に自動的にダウンロードされます。手動でのダウンロードは必要ありません。より小さなオプションを参照するには、detection datasets overview をご覧ください。SKU-110K データセットで YOLO26 モデルをトレーニングするのは簡単です。以下は、画像サイズ640でYOLO26nモデルを100エポックトレーニングする例です。
学習例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ページおよびmodel training tipsを参照してください。



