Set di dati SKU-110k
Il set di dati SKU-110k è una raccolta di immagini di scaffali di vendita al dettaglio densamente impacchettati, progettata per supportare la ricerca sui compiti di rilevamento degli oggetti. Sviluppato da Eran Goldman et al., il set di dati contiene oltre 110.000 categorie uniche di SKU (Store Keeping Unit) con oggetti densamente impacchettati, spesso simili o addirittura identici, posizionati nelle immediate vicinanze.
Caratteristiche principali
- SKU-110k contiene immagini di scaffali di negozi di tutto il mondo, con oggetti densamente impacchettati che rappresentano una sfida per i rilevatori di oggetti all'avanguardia.
- Il set di dati comprende oltre 110.000 categorie di SKU uniche, che forniscono una gamma diversificata di apparenze degli oggetti.
- Le annotazioni includono i riquadri di delimitazione degli oggetti e le etichette delle categorie SKU.
Struttura del set di dati
Il set di dati SKU-110k è organizzato in tre sottoinsiemi principali:
- Set di allenamento: Questo sottoinsieme contiene immagini e annotazioni utilizzate per addestrare i modelli di rilevamento degli oggetti.
- Set di convalida: Questo sottoinsieme è composto da immagini e annotazioni utilizzate per la convalida del modello durante la formazione.
- Set di prova: Questo sottoinsieme è pensato per la valutazione finale dei modelli di rilevamento degli oggetti addestrati.
Applicazioni
Il dataset SKU-110k è ampiamente utilizzato per l'addestramento e la valutazione di modelli di deep learning in compiti di rilevamento di oggetti, in particolare in scene densamente affollate come gli scaffali dei negozi. La varietà di categorie di SKU e la disposizione degli oggetti in un ambiente denso lo rendono una risorsa preziosa per i ricercatori e i professionisti nel campo della computer vision.
Set di dati YAML
Un file YAML (Yet Another Markup Language) viene utilizzato per definire la configurazione del dataset. Contiene informazioni sui percorsi del dataset, sulle classi e altre informazioni rilevanti. Nel caso del dataset SKU-110K, il file SKU-110K.yaml
Il file viene mantenuto all'indirizzo 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
Utilizzo
Per addestrare un modello YOLOv8n sul dataset SKU-110K per 100 epoch con una dimensione dell'immagine di 640, puoi utilizzare i seguenti frammenti di codice. Per un elenco completo degli argomenti disponibili, consulta la pagina di addestramento del modello.
Esempio di treno
Dati di esempio e annotazioni
Il set di dati SKU-110k contiene un insieme eterogeneo di immagini di scaffali di vendita al dettaglio con oggetti densamente impacchettati, che forniscono un contesto ricco per le attività di rilevamento degli oggetti. Ecco alcuni esempi di dati tratti dal dataset, con le relative annotazioni:
- Immagine di scaffale di vendita al dettaglio densamente imballato: Questa immagine mostra un esempio di oggetti densamente impacchettati in uno scaffale di vendita al dettaglio. Gli oggetti sono annotati con caselle di delimitazione ed etichette di categoria SKU.
L'esempio mostra la varietà e la complessità dei dati del set di dati SKU-110k e sottolinea l'importanza di dati di alta qualità per le attività di rilevamento degli oggetti.
Citazioni e ringraziamenti
Se utilizzi il dataset SKU-110k nel tuo lavoro di ricerca o sviluppo, cita il seguente documento:
Desideriamo ringraziare Eran Goldman et al. per aver creato e mantenuto il dataset SKU-110k come risorsa preziosa per la comunità di ricerca sulla computer vision. Per maggiori informazioni sul dataset SKU-110k e sui suoi creatori, visita il repository GitHub del dataset SKU-110k.