SKU-110k Dataset
De SKU-110k dataset is een verzameling van dicht op elkaar gepakte afbeeldingen van winkelschappen, ontworpen ter ondersteuning van onderzoek naar objectdetectietaken. De dataset is ontwikkeld door Eran Goldman et al. en bevat meer dan 110.000 unieke categorieën van winkelunits (SKU's) met dicht op elkaar geplaatste objecten die er vaak hetzelfde of zelfs identiek uitzien.
Belangrijkste kenmerken
- SKU-110k bevat afbeeldingen van winkelschappen van over de hele wereld, met dicht op elkaar gepakte objecten die een uitdaging vormen voor geavanceerde objectdetectoren.
- De dataset bevat meer dan 110.000 unieke SKU-categorieën, die een divers scala aan objectverschijningen bieden.
- Annotaties omvatten begrenzingskaders voor objecten en SKU-categorielabels.
Structuur dataset
De SKU-110k dataset is onderverdeeld in drie subsets:
- Trainingsset: Deze subset bevat afbeeldingen en annotaties die worden gebruikt voor het trainen van objectdetectiemodellen.
- Validatieset: Deze subset bestaat uit afbeeldingen en annotaties die tijdens de training zijn gebruikt voor modelvalidatie.
- Testset: Deze subset is ontworpen voor de eindevaluatie van getrainde objectdetectiemodellen.
Toepassingen
De SKU-110k dataset wordt veel gebruikt voor het trainen en evalueren van deep learning modellen in objectdetectietaken, vooral in dicht opeengepakte scènes zoals winkelschappen. Door de diverse SKU-categorieën en de dicht opeengepakte objecten is de dataset een waardevolle bron voor onderzoekers en praktijkmensen op het gebied van computervisie.
Dataset YAML
Een YAML (Yet Another Markup Language) bestand wordt gebruikt om de configuratie van de dataset te definiëren. Het bevat informatie over de paden, klassen en andere relevante informatie van de dataset. In het geval van de SKU-110K dataset is het SKU-110K.yaml
bestand wordt onderhouden op 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
Gebruik
Om een YOLOv8n model te trainen op de SKU-110K dataset voor 100 epochs met een afbeeldingsgrootte van 640, kun je de volgende codefragmenten gebruiken. Raadpleeg de pagina Model Training voor een uitgebreide lijst met beschikbare argumenten.
Voorbeeld trein
Voorbeeldgegevens en annotaties
De SKU-110k dataset bevat een diverse set afbeeldingen van winkelschappen met dicht op elkaar gepakte objecten, die een rijke context bieden voor objectdetectietaken. Hier zijn enkele voorbeelden van gegevens uit de dataset, samen met de bijbehorende annotaties:
- Afbeelding van dicht opeengepakt winkelschap: Deze afbeelding toont een voorbeeld van dicht opeengepakte objecten in een winkelschap. De objecten zijn gemarkeerd met bounding boxes en SKU-categorielabels.
Het voorbeeld laat de verscheidenheid en complexiteit van de gegevens in de SKU-110k dataset zien en benadrukt het belang van gegevens van hoge kwaliteit voor objectdetectietaken.
Citaten en erkenningen
Als je de SKU-110k dataset gebruikt in je onderzoek of ontwikkeling, citeer dan het volgende document:
We willen Eran Goldman et al. bedanken voor het maken en onderhouden van de SKU-110k dataset als een waardevolle bron voor de computer vision onderzoeksgemeenschap. Bezoek voor meer informatie over de SKU-110k dataset en de makers ervan de SKU-110k dataset GitHub repository.