YOLO Vision 2026:

SKU-110K Dataset#

Der SKU-110K-Datensatz ist ein Objekterkennungs-Datensatz mit nur einer Klasse, bestehend aus 11.743 dicht gepackten Regalfotos, aufgeteilt in 8.219 Trainings-, 588 Validierungs- und 2.936 Testbilder. Jedes Produkt ist mit einem Begrenzungsrahmen unter einer einzigen Klasse (object) annotiert – der Name bezieht sich auf die über 110.000 abgebildeten, unterschiedlichen Lagerhaltungseinheiten (SKUs) in den Szenen und nicht auf 110.000 Erkennungsklassen. Er wurde von Eran Goldman et al. für das CVPR-2019-Paper Precise Detection in Densely Packed Scenes erstellt und enthält über 1,7 Millionen annotierte Produkte – durchschnittlich etwa 147 pro Bild – was ihn zu einem anspruchsvollen Benchmark für Computer Vision-Modelle in überfüllten Einzelhandelsumgebungen macht.



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

SKU-110K dataset densely packed retail shelf detection

Hauptfunktionen#

  • Einklassen-Erkennung: Jedes Produkt ist mit einem Begrenzungsrahmen unter einer einzigen Klasse (object (names: {0: object})) beschriftet – die Annotationen enthalten keine kategoriebezogenen Labels pro SKU.
  • Extreme Objektdichte: Bilder von Verkaufsregalen aus der ganzen Welt enthalten durchschnittlich etwa 147 eng gepackte Produkte, wobei Objekte oft ähnlich oder sogar identisch aussehen und in unmittelbarer Nähe zueinander positioniert sind.
  • Großer Umfang: Mehr als 110.000 einzigartige SKUs und über 1,7 Millionen annotierte Begrenzungsrahmen in 11.743 Bildern fordern moderne Objektdetektoren heraus.

Datensatzstruktur#

Der SKU-110K-Datensatz ist in drei Teilmengen unterteilt, die alle dieselbe Klasse object gemeinsam nutzen:

SplitBilderBeschreibung
Trainieren8,219Bilder und Annotationen für das Modelltraining
Validation588Zurückgehaltene Bilder für die Auswertung während des Trainings
Test2,936Bilder 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 bei Objekterkennungsaufgaben verwendet, insbesondere in dicht gepackten Szenen wie Regaldisplays im Einzelhandel. Zu seinen Anwendungen gehören:

  • Bestandsverwaltung und Automatisierung im Einzelhandel
  • Produkterkennung auf E-Commerce-Plattformen
  • Überprüfung der Einhaltung von Planogrammen
  • Self-Checkout-Systeme in Geschäften
  • Robotisches Kommissionieren und Sortieren in Lagerhäusern

Um deine eigenen Regalbilder zu annotieren, Einzelhandels-Erkennungsdatensätze zu trainieren und im Browser zu verwalten, führe den vollständigen Arbeitsablauf mit Ultralytics Platform aus.

Datensatz-YAML#

Die Datei SKU-110K.yaml definiert die Datensatzkonfiguration – die Datensatzpfade, Klassennamen und andere Metadaten. Sie wird im Ultralytics-Repository unter https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml gepflegt.

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

Verwendung#

13,6 GB Download

SKU-110K wird beim ersten Training automatisch heruntergeladen und benötigt etwa 13,6 GB freien Speicherplatz für die 11.743 Bilder. Das Download-Skript ruft auch die ursprünglichen Annotationen ab und konvertiert sie in das YOLO-Format, was einige Minuten dauern kann.

Um ein YOLO26n-Modell auf dem SKU-110K-Datensatz für 100 Epochen mit einer Bildgröße von 640 zu trainieren, kannst du die folgenden Codeausschnitte verwenden. Eine umfassende Liste der verfügbaren Argumente findest du auf der Modellseite Training.

Trainingsbeispiel
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#

SKU-110K-Bilder erfassen dicht gepackte Produkte in echten Verkaufsregalen, wo Dutzende nahezu identischer Artikel nebeneinander stehen. Hier ist ein Beispielbild mit seinen Annotationen:

SKU-110K retail product detection on store shelves

  • Bild eines dicht gepackten Einzelhandelsregals: Dieses Bild zeigt ein Beispiel für dicht gepackte Objekte in einer Einzelhandelsumgebung. Objekte sind mit Begrenzungsrahmen unter der einzigen Klasse object annotiert.

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 weit über typische Benchmarks hinaus fordert.

Zitate und Danksagungen#

Wenn du das SKU-110K-Dataset in deiner Forschung oder Entwicklungsarbeit verwendest, zitiere bitte das folgende Paper:

Zitat
@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. dafür danken, dass sie den SKU-110K-Datensatz als wertvolle Ressource für die Computer-Vision-Forschungsgemeinschaft erstellt und gepflegt haben. Weitere Informationen über den SKU-110K-Datensatz und seine Ersteller findest du im GitHub-Repository des SKU-110K-Datensatzes.

FAQ#

  • Der SKU-110K-Datensatz ist ein Objekterkennungsdatensatz mit einer einzigen Klasse aus 11.743 dicht gepackten Regalfotos, erstellt von Eran Goldman et al. für ihr CVPR-2019-Paper. Jedes Produkt ist mit einem object-Begrenzungsrahmen beschriftet, und die Bilder umfassen mehr als 110.000 eindeutige Lagerhaltungseinheiten (SKUs), was ihn zu einem starken Benchmark für die Erkennung von Objekten in überfüllten Szenen und für den Aufbau von Computer Vision-Systemen im Einzelhandel macht.

  • Nein. SKU-110K hat nur eine Klasse: Jedes Produkt ist mit einem Begrenzungsrahmen unter der Klasse object (names: {0: object}) annotiert. Die „110K“ im Namen bezieht sich auf die Anzahl der eindeutigen Lagerhaltungseinheiten (SKUs), die auf den Bildern abgebildet sind, und nicht auf die Anzahl der Erkennungsklassen.

  • Der SKU-110K-Datensatz enthält 11.743 Bilder – 8.219 für das Training, 588 für die Validierung und 2.936 für das Testen – sowie eine einzige Erkennungsklasse, object. Details findest du im Abschnitt Datensatzstruktur und in der Konfiguration SKU-110K.yaml.

  • SKU-110K ist etwa 13,6 GB groß und wird beim ersten Training mit data="SKU-110K.yaml" automatisch heruntergeladen – kein manueller Download erforderlich. Um kleinere Optionen zu durchstöbern, siehe die Übersicht über Erkennungsdatensätze.

  • Das Training eines YOLO26-Modells auf dem SKU-110K-Dataset ist unkompliziert. Hier ist ein Beispiel, um ein YOLO26n-Modell für 100 Epochen mit einer Bildgröße von 640 zu trainieren:

    Trainingsbeispiel
    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)

    Eine umfassende Liste der verfügbaren Argumente findest du auf der Modellseite Training und in den Modell-Trainingstipps.

Kommentare