Dataset SKU-110K#
Il dataset SKU-110K è un dataset di rilevamento degli oggetti a classe singola composto da 11.743 immagini di scaffali di negozi con prodotti densamente disposti, suddivise in 8.219 immagini per l'addestramento, 588 per la validazione e 2.936 per il test. Ogni prodotto è annotato con un riquadro di delimitazione appartenente a un'unica classe, object — il nome si riferisce alle oltre 110.000 unità di stoccaggio (SKUs) uniche raffigurate nelle scene, non a 110.000 classi di rilevamento. Creato da Eran Goldman e altri per l'articolo CVPR 2019 Precise Detection in Densely Packed Scenes, contiene oltre 1,7 milioni di prodotti annotati — una media di circa 147 per immagine — e rappresenta quindi un benchmark impegnativo per i modelli di computer vision in ambienti di vendita al dettaglio affollati.
Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

Funzionalità principali#
- Rilevamento a classe singola: ogni prodotto è etichettato con un riquadro di delimitazione appartenente a un'unica classe,
object(names: {0: object}) — le annotazioni non contengono categorie specifiche per ogni SKU. - Densità estrema degli oggetti: le immagini di scaffali di negozi di tutto il mondo contengono in media circa 147 prodotti ravvicinati ciascuna, con oggetti spesso simili o persino identici, posizionati a poca distanza l'uno dall'altro.
- Grande scala: oltre 110.000 SKU unici e più di 1,7 milioni di riquadri di delimitazione annotati in 11.743 immagini mettono alla prova i rilevatori di oggetti allo stato dell'arte.
Struttura del dataset#
Il dataset SKU-110K è suddiviso in tre sottoinsiemi, che condividono tutti la singola classe object:
| Suddivisione | Immagini | Descrizione |
|---|---|---|
| Addestramento | 8,219 | Immagini e annotazioni per l'addestramento del modello |
| Convalida | 588 | Immagini messe da parte per la valutazione durante l'addestramento |
| Test | 2,936 | Immagini per la valutazione finale del modello addestrato |
Applicazioni#
Il dataset SKU-110K è ampiamente utilizzato per addestrare e valutare modelli di deep learning in attività di rilevamento degli oggetti, soprattutto in scene densamente affollate come gli espositori degli scaffali dei negozi. Le applicazioni includono:
- Gestione e automazione dell'inventario al dettaglio
- Riconoscimento dei prodotti nelle piattaforme di e-commerce
- Verifica della conformità al planogramma
- Sistemi di pagamento automatico nei negozi
- Prelievo e smistamento robotizzati nei magazzini
Per annotare le tue immagini di scaffali, addestrare e gestire dataset per il rilevamento nel settore della vendita al dettaglio direttamente dal browser, esegui l'intero workflow con Ultralytics Platform.
YAML del dataset#
Il file SKU-110K.yaml definisce la configurazione del dataset: i percorsi del dataset, i nomi delle classi e altri metadati. È mantenuto nel repository Ultralytics all'indirizzo https://github.com/ultralytics/ultralytics/blob/main/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 labelUtilizzo#
SKU-110K viene scaricato automaticamente la prima volta che esegui l'addestramento e richiede circa 13,6 GB di spazio libero su disco per le sue 11.743 immagini. Lo script di download recupera anche le annotazioni originali e le converte nel formato YOLO; l'operazione può richiedere alcuni minuti.
Per addestrare un modello YOLO26n sul dataset SKU-110K per 100 epoche con una dimensione delle immagini pari a 640, puoi utilizzare i seguenti frammenti di codice. Per un elenco completo degli argomenti disponibili, consulta la pagina Training del modello.
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)Dati ed esempi di annotazioni#
Le immagini SKU-110K mostrano prodotti densamente disposti su veri scaffali di negozi, dove decine di articoli quasi identici sono affiancati. Ecco un'immagine di esempio con le relative annotazioni:

- Immagine di uno scaffale di negozio con prodotti densamente disposti: questa immagine mostra un esempio di oggetti densamente disposti in un ambiente con scaffali di vendita al dettaglio. Gli oggetti sono annotati con riquadri di delimitazione appartenenti alla singola classe
object.
La disposizione densa dei prodotti rende SKU-110K particolarmente utile per sviluppare soluzioni di computer vision robuste e orientate alla vendita al dettaglio, poiché l'elevato numero di oggetti per immagine spinge i rilevatori ben oltre i benchmark tipici.
Citazioni e ringraziamenti#
Se utilizzi il dataset SKU-110K nelle tue attività di ricerca o sviluppo, cita il seguente articolo:
@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}
}Desideriamo ringraziare Eran Goldman e altri per aver creato e mantenuto il dataset SKU-110K come risorsa preziosa per la comunità di ricerca nel campo della computer vision. Per ulteriori informazioni sul dataset SKU-110K e sui suoi creatori, visita il repository GitHub del dataset SKU-110K.
FAQ#
Il dataset SKU-110K è un dataset di rilevamento degli oggetti a classe singola composto da 11.743 immagini di scaffali di negozi con prodotti densamente disposti, creato da Eran Goldman e altri per il loro articolo CVPR 2019. Ogni prodotto è etichettato con un riquadro di delimitazione
objecte le immagini comprendono oltre 110.000 unità di stoccaggio (SKUs) uniche, rendendolo un benchmark efficace per rilevare oggetti in scene affollate e creare sistemi di computer vision per la vendita al dettaglio.No. SKU-110K è a classe singola: ogni prodotto è annotato con un riquadro di delimitazione appartenente alla classe
object(names: {0: object}). La dicitura "110K" nel nome si riferisce al numero di unità di stoccaggio (SKUs) uniche raffigurate nelle immagini, non al numero di classi di rilevamento.Il dataset SKU-110K contiene 11.743 immagini — 8.219 per l'addestramento, 588 per la validazione e 2.936 per il test — e una singola classe di rilevamento,
object. Per i dettagli, consulta la sezione Struttura del dataset e la configurazioneSKU-110K.yaml.SKU-110K occupa circa 13,6 GB e viene scaricato automaticamente la prima volta che esegui l'addestramento con
data="SKU-110K.yaml"— non è richiesto alcun download manuale. Per esplorare opzioni più compatte, consulta la panoramica dei dataset di rilevamento.Addestrare un modello YOLO26 sul dataset SKU-110K è semplice. Ecco un esempio per addestrare un modello YOLO26n per 100 epoche con una dimensione delle immagini pari a 640:
Esempio di addestramentofrom 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)Per un elenco completo degli argomenti disponibili, consulta la pagina Training del modello e i suggerimenti per l'addestramento dei modelli.



