Vai al contenuto

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.

Immagine campione del set di dati

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:

  1. Set di allenamento: Questo sottoinsieme contiene immagini e annotazioni utilizzate per addestrare i modelli di rilevamento degli oggetti.
  2. Set di convalida: Questo sottoinsieme è composto da immagini e annotazioni utilizzate per la convalida del modello durante la formazione.
  3. 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

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data='SKU-110K.yaml', epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=SKU-110K.yaml model=yolov8n.pt epochs=100 imgsz=640

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 campione del set di dati

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

@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 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.



Creato 2023-11-12, Aggiornato 2023-11-22
Autori: glenn-jocher (3), Laughing-q (1)

Commenti