SKU-110K-Datensatz#
Der SKU-110K-Datensatz ist ein Datensatz zur einklassigen Objekterkennung mit 11.743 dicht gepackten Bildern von Verkaufsregalen, aufgeteilt in 8.219 Trainings-, 588 Validierungs- und 2.936 Testbilder. Jedes Produkt ist unter einer einzigen Klasse mit einer Begrenzungsbox annotiert, object — der Name bezieht sich auf die mehr als 110.000 abgebildeten eindeutigen Lagerhaltungseinheiten (SKUs) in den Szenen, nicht auf 110.000 Erkennungsklassen. Der von Eran Goldman et al. für das CVPR-2019-Paper Precise Detection in Densely Packed Scenes erstellte Datensatz enthält über 1,7 Millionen annotierte Produkte — durchschnittlich etwa 147 pro Bild — und ist damit ein anspruchsvoller Benchmark für Computer-Vision-Modelle in dicht besetzten Einzelhandelsumgebungen.
Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

Wichtige Funktionen#
- Einklassige Erkennung: Jedes Produkt ist unter einer einzigen Klasse mit einer Begrenzungsbox gekennzeichnet,
object(names: {0: object}) — die Annotationen enthalten keine Kategoriebezeichnungen für einzelne SKUs. - Extrem hohe Objektdichte: Die Bilder von Verkaufsregalen aus aller Welt enthalten durchschnittlich jeweils etwa 147 eng gepackte Produkte, wobei die Objekte oft ähnlich oder sogar identisch aussehen und sich in unmittelbarer Nähe zueinander befinden.
- Großer Umfang: Mehr als 110.000 eindeutige SKUs und über 1,7 Millionen annotierte Begrenzungsboxen in 11.743 Bildern stellen hochmoderne Objektdetektoren vor Herausforderungen.
Datensatzstruktur#
Der SKU-110K-Datensatz ist in drei Teilmengen aufgeteilt, die alle dieselbe einzelne Klasse object verwenden:
| Aufteilung | Bilder | Beschreibung |
|---|---|---|
| Trainieren | 8,219 | Bilder und Annotationen für das Modelltraining |
| Validierung | 588 | Zurückgehaltene Bilder für die Evaluierung während des Trainings |
| Test | 2,936 | Bilder für die abschließende Evaluierung des trainierten Modells |
Anwendungen#
Der SKU-110K-Datensatz wird häufig zum Trainieren und Evaluieren von Deep-Learning-Modellen für Aufgaben der Objekterkennung verwendet, insbesondere in dicht gepackten Szenen wie Präsentationen in Verkaufsregalen. Zu den Anwendungen gehören:
- Verwaltung und Automatisierung von Einzelhandelsbeständen
- Produkterkennung auf E-Commerce-Plattformen
- Überprüfung der Planogrammkonformität
- Selbstbedienungskassensysteme in Geschäften
- Robotergestütztes Kommissionieren und Sortieren in Lagern
Um eigene Bilder von Verkaufsregalen zu annotieren, Modelle zu trainieren und Datensätze für die Erkennung im Einzelhandel in deinem Browser zu verwalten, führe den gesamten Arbeitsablauf mit der Ultralytics Platform aus.
Dataset-YAML#
Die Datei SKU-110K.yaml definiert die Datensatzkonfiguration — die Datensatzpfade, Klassennamen und weitere Metadaten. Sie wird im Ultralytics-Repository unter https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml gepflegt.
# 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 labelVerwendung#
SKU-110K wird beim ersten Training automatisch heruntergeladen und benötigt für seine 11.743 Bilder etwa 13,6 GB freien Speicherplatz. Das Download-Skript lädt außerdem die ursprünglichen Annotationen herunter und konvertiert sie in das YOLO-Format, was einige Minuten dauern kann.
Um ein YOLO26n-Modell 100 Epochen lang mit einer Bildgröße von 640 auf dem SKU-110K-Datensatz zu trainieren, kannst du die folgenden Codeausschnitte verwenden. Eine umfassende Liste der verfügbaren Argumente findest du auf der Seite Training des Modells.
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)Beispieldaten und Annotationen#
Die SKU-110K-Bilder zeigen dicht gepackte Produkte auf echten Verkaufsregalen, auf denen Dutzende nahezu identischer Artikel nebeneinander stehen. Hier ist ein Beispielbild mit seinen Annotationen:

- Dicht gepacktes Bild eines Verkaufsregals: Dieses Bild zeigt ein Beispiel für dicht gepackte Objekte in einer Umgebung mit Verkaufsregalen. Die Objekte sind mit Begrenzungsboxen unter der einzigen Klasse
objectannotiert.
Die dichte Anordnung der Produkte macht SKU-110K besonders wertvoll für die Entwicklung robuster, auf den Einzelhandel ausgerichteter Computer-Vision-Lösungen, da die hohe Objektanzahl pro Bild Detektoren deutlich über typische Benchmarks hinaus fordert.
Zitate und Danksagungen#
Wenn du den SKU-110K-Datensatz in deiner Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte das folgende Paper:
@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}
}Wir möchten Eran Goldman et al. für die Erstellung und Pflege des SKU-110K-Datensatzes als wertvolle Ressource für die Computer-Vision-Forschungsgemeinschaft danken. Weitere Informationen zum SKU-110K-Datensatz und seinen Erstellern findest du im GitHub-Repository des SKU-110K-Datensatzes.
FAQ#
Der SKU-110K-Datensatz ist ein Datensatz zur einklassigen Objekterkennung mit 11.743 dicht gepackten Bildern von Verkaufsregalen, der von Eran Goldman et al. für das CVPR-2019-Paper erstellt wurde. Jedes Produkt ist mit einer
object-Begrenzungsbox gekennzeichnet, und die Bilder umfassen mehr als 110.000 eindeutige Lagerhaltungseinheiten (SKUs), wodurch der Datensatz ein leistungsfähiger Benchmark für die Erkennung von Objekten in dicht besetzten Szenen und für die Entwicklung von Einzelhandels-Computer-Vision-Systemen ist.Nein. SKU-110K ist einklassig: Jedes Produkt ist unter der Klasse
object(names: {0: object}) mit einer Begrenzungsbox annotiert. Die „110K“ im Namen bezieht sich auf die Anzahl der eindeutigen Lagerhaltungseinheiten (SKUs), die über die Bilder hinweg abgebildet sind, nicht auf die Anzahl der Erkennungsklassen.Der SKU-110K-Datensatz enthält 11.743 Bilder — 8.219 zum Training, 588 zur Validierung und 2.936 zum Testen — sowie eine einzige Erkennungsklasse,
object. Einzelheiten findest du im Abschnitt Datensatzstruktur und in der KonfigurationSKU-110K.yaml.SKU-110K ist etwa 13,6 GB groß und wird beim ersten Training mit
data="SKU-110K.yaml"automatisch heruntergeladen — ein manueller Download ist nicht erforderlich. Kleinere Optionen findest du in der Übersicht der Erkennungsdatensätze.Das Training eines YOLO26-Modells auf dem SKU-110K-Datensatz ist unkompliziert. Hier ist ein Beispiel zum Trainieren eines YOLO26n-Modells über 100 Epochen mit einer Bildgröße von 640:
Trainingsbeispielfrom 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)Eine umfassende Liste der verfügbaren Argumente findest du auf der Seite Training des Modells sowie in den Tipps zum Modelltraining.



