Ultralytics YOLO27:
Get Started

SKU-110K-Datensatz#

Der SKU-110K-Datensatz ist ein Datensatz mit einer Klasse zur Objekterkennung. Er umfasst 11.743 Bilder dicht bestückter Verkaufsregale, aufgeteilt in 8.219 Trainings-, 588 Validierungs- und 2.936 Testbilder. Jedes Produkt ist mit einer einzelnen Bounding Box und einer einzigen Klasse annotiert: object – der Name bezieht sich auf die mehr als 110.000 einzigartigen gelagerten Artikel (SKUs), die auf den Bildern zu sehen sind, und nicht auf 110.000 Erkennungsklassen. Eran Goldman et al. erstellten den Datensatz für die CVPR-Arbeit von 2019 Precise Detection in Densely Packed Scenes. Er enthält mehr als 1,7 Millionen annotierte Produkte – durchschnittlich etwa 147 pro Bild – und ist damit ein anspruchsvoller Benchmark für Computer Vision-Modelle in belebten Einzelhandelsumgebungen.



Ansehen: So trainierst du Ultralytics YOLO26, damit alle Produkte in einem Verkaufsregal erkannt werden | SKU-110K 🛒

Erkennung dicht gepackter Produkte in Verkaufsregalen im SKU-110K-Datensatz

Wichtige Funktionen#

  • Erkennung mit einer Klasse: Jedes Produkt wird mit einer Bounding Box einer einzigen Klasse zugeordnet, object (names: {0: object}) – die Annotationen enthalten keine SKU-spezifischen Kategorien.
  • Extrem hohe Objektdichte: Die Bilder von Verkaufsregalen aus aller Welt zeigen durchschnittlich etwa 147 dicht gepackte Produkte, wobei die Objekte oft ähnlich oder sogar identisch aussehen und dicht beieinanderliegen.
  • Großer Umfang: Mehr als 110.000 einzigartige SKUs und über 1,7 Millionen annotierte Bounding Boxes auf 11.743 Bildern stellen hochmoderne Objektdetektoren auf die Probe.

Datensatzstruktur#

Der SKU-110K-Datensatz ist in drei Teilmengen aufgeteilt, die alle dieselbe Klasse object verwenden:

AufteilungBilderBeschreibung
Trainieren8,219Bilder und Annotationen zum Trainieren des Modells
Validierung588Zurückgehaltene Bilder zur Auswertung während des Trainings
Test2,936Bilder zur abschließenden Auswertung des trainierten Modells

Anwendungsfälle#

Der SKU-110K-Datensatz wird häufig zum Trainieren und Auswerten von Deep-Learning-Modellen für Aufgaben der Objekterkennung verwendet, insbesondere in dicht gepackten Szenen wie Verkaufsregalen. Zu den Anwendungsbereichen gehören:

  • Verwaltung und Automatisierung von Einzelhandelsbeständen
  • Produkterkennung auf E-Commerce-Plattformen
  • Überprüfung der Planogrammkonformität
  • Selbstbedienungskassen in Geschäften
  • Robotergestütztes Kommissionieren und Sortieren in Lagern

Um eigene Regalbilder zu annotieren, Modelle zu trainieren und Datensätze zur Einzelhandelserkennung im Browser zu verwalten, kannst du den gesamten Arbeitsablauf mit der Ultralytics Platform ausführen.

YAML-Datei des Datensatzes#

Die Datei SKU-110K.yaml legt die Datensatzkonfiguration fest – 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/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

Der SKU-110K-Datensatz wird beim ersten Training automatisch heruntergeladen und benötigt für seine 11.743 Bilder etwa 13.6 GB freien Speicherplatz. Das Downloadskript lädt auch die Originalannotationen herunter und konvertiert sie ins YOLO-Format. Dieser Vorgang kann einige Minuten dauern.

Um ein YOLO26n-Modell 100 Epochen lang mit dem SKU-110K-Datensatz und einer Bildgröße von 640 zu trainieren, kannst du die folgenden Codebeispiele verwenden. Eine vollständige Liste der verfügbaren Argumente findest du auf der Seite zum Training des Modells.

Trainingsbeispiel
from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n.pt")  # ein vortrainiertes Modell laden (für das Training empfohlen)

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

Beispieldaten und Annotationen#

Die Bilder des SKU-110K-Datensatzes zeigen dicht gepackte Produkte in echten Verkaufsregalen, in denen Dutzende nahezu identischer Artikel nebeneinanderstehen. Hier siehst du ein Beispielbild mit seinen Annotationen:

Erkennung von Einzelhandelsprodukten in Verkaufsregalen im SKU-110K-Datensatz

  • Bild eines dicht bestückten Verkaufsregals: Das Bild zeigt beispielhaft dicht gepackte Objekte in einem Verkaufsregal. Die Objekte sind mit Bounding Boxes der einzigen Klasse object annotiert.

Die dichte Anordnung der Produkte macht den SKU-110K-Datensatz besonders wertvoll für die Entwicklung robuster Computer-Vision-Lösungen für den Einzelhandel, denn die hohe Objektzahl pro Bild stellt Detektoren vor deutlich größere Herausforderungen als typische Benchmarks.

Zitate und Danksagungen#

Wenn du den SKU-110K-Datensatz in deiner Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte die folgende Arbeit:

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 haben und pflegen. Weitere Informationen zum SKU-110K-Datensatz und seinen Erstellern findest du im GitHub-Repository des SKU-110K-Datensatzes.

Häufig gestellte Fragen#

  • Der SKU-110K-Datensatz ist ein Datensatz mit einer Klasse zur Objekterkennung. Er umfasst 11.743 Bilder dicht bestückter Verkaufsregale und wurde von Eran Goldman et al. für ihre CVPR-Arbeit von 2019 erstellt. Jedes Produkt ist mit einer Bounding Box der Klasse object gekennzeichnet. Die Bilder zeigen mehr als 110.000 einzigartige gelagerte Artikel (SKUs), wodurch der Datensatz ein aussagekräftiger Benchmark für die Objekterkennung in belebten Szenen und die Entwicklung von Computer-Vision-Systemen für den Einzelhandel ist.

  • Nein. SKU-110K hat nur eine Klasse: Jedes Produkt ist mit einer Bounding Box der Klasse object (names: {0: object}) annotiert. „110K“ im Namen bezieht sich auf die Anzahl der einzigartigen gelagerten Artikel (SKUs) auf den Bildern und nicht auf die Anzahl der Erkennungsklassen.

  • Der SKU-110K-Datensatz umfasst 11.743 Bilder – 8.219 Trainings-, 588 Validierungs- und 2.936 Testbilder – sowie eine einzige Erkennungsklasse: object. Einzelheiten findest du im Abschnitt Datensatzstruktur und in der Konfiguration SKU-110K.yaml.

  • Der SKU-110K-Datensatz 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 Alternativen findest du in der Übersicht der Erkennungsdatensätze.

  • Ein YOLO26-Modell mit dem SKU-110K-Datensatz zu trainieren, ist unkompliziert. Hier ein Beispiel, wie du ein YOLO26n-Modell 100 Epochen lang mit einer Bildgröße von 640 trainierst:

    Trainingsbeispiel
    from ultralytics import YOLO
    
    # Ein Modell laden
    model = YOLO("yolo26n.pt")  # ein vortrainiertes Modell laden (für das Training empfohlen)
    
    # Das Modell trainieren
    results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)

    Eine vollständige Liste der verfügbaren Argumente findest du auf der Seite zum Training des Modells und unter Tipps zum Modelltraining.

Kommentare