Ultralytics YOLO27:

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 🛒

Rilevamento di prodotti densamente disposti sugli scaffali nel dataset 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:

SuddivisioneImmaginiDescrizione
Addestramento8,219Immagini e annotazioni per l'addestramento del modello
Convalida588Immagini messe da parte per la valutazione durante l'addestramento
Test2,936Immagini 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/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

Utilizzo#

Download di 13,6 GB

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.

Esempio di addestramento
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:

Rilevamento di prodotti SKU-110K sugli scaffali dei negozi

  • 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:

Citazione
@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 object e 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 configurazione SKU-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 addestramento
    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)

    Per un elenco completo degli argomenti disponibili, consulta la pagina Training del modello e i suggerimenti per l'addestramento dei modelli.

Commenti