Ultralytics YOLO27:
Get Started

Dataset SKU-110K#

Il dataset SKU-110K è un dataset a classe singola per il rilevamento di oggetti, composto da 11.743 immagini di scaffali di negozi con prodotti disposti in modo fitto, suddivise in 8.219 immagini di training, 588 di convalida e 2.936 di test. Ogni prodotto è annotato con un riquadro delimitatore appartenente a un'unica classe, object: il nome si riferisce agli oltre 110.000 codici articolo univoci (SKUs) raffigurati 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 — in media circa 147 per immagine — e rappresenta quindi un benchmark impegnativo per i modelli di computer vision in ambienti di vendita al dettaglio affollati.



Guarda: Come addestrare Ultralytics YOLO26 per rilevare ogni prodotto su uno scaffale di un negozio | SKU-110K 🛒

Rilevamento di prodotti sugli scaffali affollati del dataset SKU-110K

Funzionalità principali#

  • Rilevamento a classe singola: ogni prodotto è contrassegnato con un riquadro delimitatore appartenente a un'unica classe, object (names: {0: object}): le annotazioni non includono etichette di categoria per ogni SKU.
  • Densità estrema degli oggetti: le immagini degli scaffali di negozi di tutto il mondo contengono in media circa 147 prodotti ravvicinati ciascuna; spesso gli oggetti sono simili o persino identici e si trovano molto vicini tra loro.
  • Ampia scala: oltre 110.000 SKU univoci e più di 1,7 milioni di riquadri delimitatori annotati distribuiti su 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, tutti con la stessa classe object:

SubsetImmaginiDescrizione
Addestra8,219Immagini e annotazioni per l'addestramento del modello
Validazione588Immagini messe da parte per la valutazione durante il training
Test2,936Immagini per la valutazione finale del modello addestrato

Applicazioni#

Il dataset SKU-110K è ampiamente usato per addestrare e valutare modelli di deep learning nelle attività di rilevamento di oggetti, soprattutto in scene affollate come gli espositori sugli scaffali dei negozi. Tra le applicazioni ci sono:

  • Gestione e automazione delle scorte al dettaglio
  • Riconoscimento dei prodotti nelle piattaforme di e-commerce
  • Verifica della conformità dei planogrammi
  • Sistemi di pagamento automatico nei negozi
  • Prelievo e smistamento robotizzati nei magazzini

Per annotare le tue immagini di scaffali e addestrare e gestire dataset di rilevamento per il commercio al dettaglio direttamente dal browser, esegui l'intero flusso di lavoro con Ultralytics Platform.

YAML del dataset#

Il file SKU-110K.yaml definisce la configurazione del dataset: percorsi, nomi delle classi e altri metadati. È gestito 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 al primo training 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 di 640, puoi usare 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

# Carica un modello
model = YOLO("yolo26n.pt")  # carica un modello preaddestrato (consigliato per l'addestramento)

# Addestra il modello
results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)

Dati di esempio e annotazioni#

Le immagini di SKU-110K ritraggono prodotti disposti in modo fitto sugli scaffali di veri negozi, dove decine di articoli quasi identici si trovano uno accanto all'altro. Ecco un'immagine di esempio con le relative annotazioni:

Rilevamento dei prodotti sugli scaffali dei negozi nel dataset SKU-110K

  • Immagine di uno scaffale affollato: questa immagine mostra un esempio di oggetti disposti in modo fitto su uno scaffale di un negozio. Gli oggetti sono annotati con riquadri delimitatori appartenenti all'unica classe object.

La disposizione fitta dei prodotti rende SKU-110K particolarmente utile per sviluppare soluzioni di computer vision robuste per il commercio al dettaglio, poiché l'elevato numero di oggetti per immagine mette i rilevatori alla prova ben oltre i benchmark tipici.

Citazioni e ringraziamenti#

Se usi il dataset SKU-110K per 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 gli altri autori per aver creato e mantenuto il dataset SKU-110K, una 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.

Domande frequenti#

  • Il dataset SKU-110K è un dataset a classe singola per il rilevamento di oggetti, composto da 11.743 immagini di scaffali di negozi con prodotti disposti in modo fitto, creato da Eran Goldman e altri per il loro articolo CVPR 2019. Ogni prodotto è contrassegnato con un riquadro delimitatore della classe object; le immagini rappresentano oltre 110.000 codici articolo univoci (SKUs), rendendolo un benchmark efficace per rilevare oggetti in scene affollate e sviluppare sistemi di computer vision per il commercio al dettaglio.

  • No. SKU-110K ha una sola classe: ogni prodotto è annotato con un riquadro delimitatore appartenente alla classe object (names: {0: object}). «110K» nel nome si riferisce al numero di codici articolo univoci (SKUs) raffigurati nelle immagini, non al numero di classi di rilevamento.

  • Il dataset SKU-110K contiene 11.743 immagini — 8.219 per il training, 588 per la convalida e 2.936 per il test — e una sola 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 il training con data="SKU-110K.yaml": non serve scaricarlo manualmente. Per esplorare opzioni più leggere, 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 di 640:

    Esempio di addestramento
    from ultralytics import YOLO
    
    # Carica un modello
    model = YOLO("yolo26n.pt")  # carica un modello preaddestrato (consigliato per l'addestramento)
    
    # Addestra il modello
    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 consigli per l'addestramento dei modelli.

Commenti