Skip to content

Ensemble de données SKU-110k

L'ensemble de données SKU-110k est une collection d'images d'étagères de vente au détail densément emballées, conçue pour soutenir la recherche dans les tâches de détection d'objets. Développé par Eran Goldman et al, cet ensemble de données contient plus de 110 000 catégories uniques d'unités de gestion de magasin (UGS) avec des objets densément emballés, souvent similaires ou même identiques, placés à proximité les uns des autres.

Image de l'échantillon du jeu de données

Caractéristiques principales

  • SKU-110k contient des images d'étagères de magasins du monde entier, avec des objets densément emballés qui posent des défis aux détecteurs d'objets de pointe.
  • L'ensemble de données comprend plus de 110 000 catégories d'UGS uniques, offrant ainsi une gamme diversifiée d'apparences d'objets.
  • Les annotations comprennent des boîtes de délimitation pour les objets et des étiquettes de catégorie d'UGS.

Structure de l'ensemble de données

L'ensemble de données SKU-110k est organisé en trois sous-ensembles principaux :

  1. Ensemble d'entraînement: Ce sous-ensemble contient des images et des annotations utilisées pour l'entraînement des modèles de détection d'objets.
  2. Ensemble de validation: Ce sous-ensemble se compose d'images et d'annotations utilisées pour la validation du modèle pendant la formation.
  3. Jeu de test: Ce sous-ensemble est conçu pour l'évaluation finale des modèles de détection d'objets entraînés.

Applications

L'ensemble de données SKU-110k est largement utilisé pour former et évaluer les modèles d'apprentissage profond dans les tâches de détection d'objets, en particulier dans les scènes densément emballées telles que les étalages des magasins de détail. L'ensemble diversifié de catégories d'UGS et d'arrangements d'objets densément emballés de l'ensemble de données en fait une ressource précieuse pour les chercheurs et les praticiens dans le domaine de la vision par ordinateur.

Jeu de données YAML

Un fichier YAML (Yet Another Markup Language) est utilisé pour définir la configuration du jeu de données. Il contient des informations sur les chemins d'accès au jeu de données, les classes et d'autres informations pertinentes. Dans le cas du jeu de données SKU-110K, le fichier YAML est un fichier de configuration. SKU-110K.yaml est maintenu à 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

Utilisation

Pour entraîner un modèle YOLOv8n sur l'ensemble de données SKU-110K pendant 100 époques avec une taille d'image de 640, tu peux utiliser les extraits de code suivants. Pour obtenir une liste complète des arguments disponibles, reporte-toi à la page Formation du modèle.

Exemple de train

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

Exemples de données et d'annotations

L'ensemble de données SKU-110k contient un ensemble varié d'images d'étagères de vente au détail avec des objets densément emballés, fournissant un contexte riche pour les tâches de détection d'objets. Voici quelques exemples de données issues de l'ensemble de données, ainsi que les annotations correspondantes :

Image de l'échantillon du jeu de données

  • Image d'une étagère de vente au détail densément emballée : Cette image montre un exemple d'objets densément emballés dans un rayon de vente au détail. Les objets sont annotés avec des boîtes de délimitation et des étiquettes de catégorie SKU.

Cet exemple montre la variété et la complexité des données de l'ensemble de données SKU-110k et souligne l'importance des données de haute qualité pour les tâches de détection d'objets.

Citations et remerciements

Si tu utilises le jeu de données SKU-110k dans tes travaux de recherche ou de développement, cite l'article suivant :

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

Nous tenons à remercier Eran Goldman et al. pour la création et la maintenance du jeu de données SKU-110k, qui constitue une ressource précieuse pour la communauté des chercheurs en vision par ordinateur. Pour plus d'informations sur le jeu de données SKU-110k et ses créateurs, visite le dépôt GitHub du jeu de données SKU-110k.



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (5), Laughing-q (1)

Commentaires