SKU-110k Datensatz
Der SKU-110k-Datensatz ist eine Sammlung dicht gepackter Bilder von Einzelhandelsregalen, die fĂŒr die Forschung im Bereich der Objekterkennung entwickelt wurde. Der von Eran Goldman et al. entwickelte Datensatz enthĂ€lt ĂŒber 110.000 eindeutige Kategorien von Lagerhaltungseinheiten (SKU) mit dicht gepackten Objekten, die oft Ă€hnlich oder sogar identisch aussehen und in unmittelbarer NĂ€he angeordnet sind.
Hauptmerkmale
- SKU-110k enthĂ€lt Bilder von Ladenregalen aus der ganzen Welt mit dicht gepackten Objekten, die eine Herausforderung fĂŒr moderne Objektdetektoren darstellen.
- Der Datensatz umfasst ĂŒber 110.000 einzigartige SKU-Kategorien, die eine Vielzahl von Objekten darstellen.
- Zu den Anmerkungen gehören Begrenzungsrahmen fĂŒr Objekte und SKU-Kategoriebezeichnungen.
Struktur des Datensatzes
Der SKU-110k-Datensatz ist in drei groĂe Teilmengen unterteilt:
- Trainingsset: Diese Teilmenge enthĂ€lt Bilder und Anmerkungen, die fĂŒr das Training von Objekterkennungsmodellen verwendet werden.
- Validierungssatz: Diese Teilmenge besteht aus Bildern und Anmerkungen, die wÀhrend des Trainings zur Modellvalidierung verwendet werden.
- Testsatz: Diese Teilmenge ist fĂŒr die abschlieĂende Bewertung der trainierten Objekterkennungsmodelle gedacht.
Anwendungen
Der SKU-110k-Datensatz wird hĂ€ufig zum Trainieren und Evaluieren von Deep-Learning-Modellen fĂŒr die Objekterkennung verwendet, insbesondere in dicht gepackten Szenen wie z. B. Einzelhandelsregalen. Die Vielfalt der SKU-Kategorien und die dichte Anordnung der Objekte machen den Datensatz zu einer wertvollen Ressource fĂŒr Forscher/innen und Praktiker/innen auf dem Gebiet der Computer Vision.
Datensatz YAML
Eine YAML-Datei (Yet Another Markup Language) wird verwendet, um die Konfiguration des Datensatzes zu definieren. Sie enthĂ€lt Informationen ĂŒber die Pfade des Datensatzes, Klassen und andere relevante Informationen. Im Fall des SKU-110K-Datensatzes ist die SKU-110K.yaml
Datei wird verwaltet unter https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml.
ultralytics/cfg/datasets/SKU-110K.yaml
# Ultralytics YOLO đ, AGPL-3.0 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: ../datasets/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 pandas as pd
from tqdm 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 = pd.read_csv(dir / 'annotations' / d, names=names).values # annotations
images, unique_images = x[:, 0], np.unique(x[:, 0])
with open((dir / d).with_suffix('.txt').__str__().replace('annotations_', ''), 'w') 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') 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
Um ein YOLOv8n Modell auf dem SKU-110K-Datensatz fĂŒr 100 Epochen mit einer BildgröĂe von 640 zu trainieren, kannst du die folgenden Codeschnipsel verwenden. Eine umfassende Liste der verfĂŒgbaren Argumente findest du auf der Seite Modelltraining.
Beispiel fĂŒr einen Zug
Beispieldaten und Anmerkungen
Der SKU-110k-Datensatz enthĂ€lt eine Vielzahl von Einzelhandelsregalbildern mit dicht gepackten Objekten, die einen reichhaltigen Kontext fĂŒr Objekterkennungsaufgaben bieten. Hier sind einige Beispiele von Daten aus dem Datensatz, zusammen mit den entsprechenden Anmerkungen:
- Dicht gepacktes Einzelhandelsregal: Dieses Bild zeigt ein Beispiel fĂŒr dicht gepackte Objekte in einem Einzelhandelsregal. Die Objekte sind mit Bounding Boxes und SKU-Kategorie-Etiketten beschriftet.
Das Beispiel zeigt die Vielfalt und KomplexitĂ€t der Daten im SKU-110k-Datensatz und verdeutlicht, wie wichtig hochwertige Daten fĂŒr die Objekterkennung sind.
Zitate und Danksagungen
Wenn du den SKU-110k-Datensatz in deiner Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte das folgende Dokument:
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 SKU-110k-Datensatz-GitHub-Repository.