Sécurité prête pour l'entreprise : Conforme ISO 27001 + SOC 2 Type I.

Link to this sectionJeu de données SKU-110K#

Le jeu de données SKU-110K est un jeu de données de détection d'objets à classe unique composé de 11 743 images d'étagères de vente au détail densément remplies, réparties en 8 219 images d'entraînement, 588 de validation et 2 936 de test. Chaque produit est annoté avec une boîte englobante sous une seule classe, object — le nom fait référence aux plus de 110 000 unités de gestion des stocks (SKU) uniques photographiées à travers les scènes, et non à 110 000 classes de détection. Créé par Eran Goldman et al. pour l'article de la CVPR 2019 Precise Detection in Densely Packed Scenes, il contient plus de 1,7 million de produits annotés — une moyenne d'environ 147 par image — ce qui en fait un benchmark exigeant pour les modèles de vision par ordinateur dans des environnements de vente au détail encombrés.



Watch: How to Train YOLOv10 on SKU-110k Dataset using Ultralytics | Retail Dataset

Détection de rayons de magasin densément remplis avec le jeu de données SKU-110K

Link to this sectionFonctionnalités clés#

  • Détection à classe unique : Chaque produit est étiqueté avec une boîte englobante sous une seule classe, object (names: {0: object}) — les annotations ne contiennent pas d'étiquettes de catégorie par SKU.
  • Densité d'objets extrême : Les images d'étagères de magasins du monde entier contiennent en moyenne environ 147 produits densément regroupés, avec des objets souvent similaires ou même identiques positionnés à proximité immédiate.
  • Grande échelle : Plus de 110 000 SKU uniques et plus de 1,7 million de boîtes englobantes annotées sur 11 743 images mettent au défi les détecteurs d'objets de pointe.

Link to this sectionStructure du jeu de données#

Le jeu de données SKU-110K est divisé en trois sous-ensembles, partageant tous la classe unique object :

SplitImagesDescription
Entraîner (Train)8 219Images et annotations pour l'entraînement du modèle
Validation588Images réservées pour l'évaluation pendant l'entraînement
Test2 936Images pour l'évaluation finale du modèle entraîné

Link to this sectionApplications#

Le jeu de données SKU-110K est largement utilisé pour l'entraînement et l'évaluation de modèles de deep learning dans des tâches de détection d'objets, en particulier dans des scènes densément remplies comme les présentoirs d'étagères de vente au détail. Ses applications incluent :

  • Gestion et automatisation des stocks de détail
  • Reconnaissance de produits sur les plateformes de commerce électronique
  • Vérification de la conformité du planogramme
  • Systèmes de paiement en libre-service dans les magasins
  • Prélèvement et tri robotisés dans les entrepôts

Pour annoter tes propres images d'étagères, entraîner et gérer des jeux de données de détection de vente au détail dans ton navigateur, exécute le flux de travail complet avec Ultralytics Platform.

Link to this sectionYAML du jeu de données#

Le fichier SKU-110K.yaml définit la configuration du jeu de données — les chemins du jeu de données, les noms de classe et d'autres métadonnées. Il est maintenu dans le dépôt Ultralytics à l'adresse 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

Link to this sectionUtilisation#

Téléchargement de 13,6 Go

SKU-110K se télécharge automatiquement la première fois que tu lances un entraînement et nécessite environ 13,6 Go d'espace disque libre pour ses 11 743 images. Le script de téléchargement récupère également les annotations originales et les convertit au format YOLO, ce qui peut prendre quelques minutes.

Pour entraîner un modèle YOLO26n sur le jeu de données SKU-110K pendant 100 époques avec une taille d'image de 640, tu peux utiliser les extraits de code suivants. Pour une liste complète des arguments disponibles, consulte la page Entraînement du modèle.

Exemple d'entraînement
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)

Link to this sectionExemples de données et d'annotations#

Les images SKU-110K capturent des produits densément regroupés sur de vraies étagères de magasin, où des dizaines d'articles presque identiques sont placés côte à côte. Voici un exemple d'image avec ses annotations :

Détection de produits de détail sur des rayons de magasin avec SKU-110K

  • Image d'étagère de vente au détail densément remplie : Cette image montre un exemple d'objets densément regroupés dans un contexte d'étagère de vente au détail. Les objets sont annotés avec des boîtes englobantes sous la classe unique object.

La disposition dense des produits rend SKU-110K particulièrement précieux pour développer des solutions robustes de vision par ordinateur axées sur la vente au détail, car le nombre élevé d'objets par image pousse les détecteurs bien au-delà des benchmarks habituels.

Link to this sectionCitations et remerciements#

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

Citation
@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 en tant que ressource précieuse pour la communauté de recherche 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.

Link to this sectionFAQ#

Link to this sectionÀ quoi sert le jeu de données SKU-110K ?#

Le jeu de données SKU-110K est un jeu de données de détection d'objets à classe unique composé de 11 743 images d'étagères de vente au détail densément remplies, créé par Eran Goldman et al. pour leur article de la CVPR 2019. Chaque produit est étiqueté avec une boîte englobante object, et l'imagerie couvre plus de 110 000 unités de gestion des stocks (SKU) uniques, ce qui en fait un benchmark solide pour la détection d'objets dans des scènes encombrées et pour la construction de systèmes de vision par ordinateur pour la vente au détail.

Link to this sectionLe jeu de données SKU-110K comporte-t-il 110 000 classes ?#

Non. SKU-110K est à classe unique : chaque produit est annoté avec une boîte englobante sous la classe object (names: {0: object}). Le "110K" dans le nom fait référence au nombre d'unités de gestion des stocks (SKU) uniques photographiées à travers les images, et non au nombre de classes de détection.

Link to this sectionCombien d'images et de classes contient le jeu de données SKU-110K ?#

Le jeu de données SKU-110K contient 11 743 images — 8 219 pour l'entraînement, 588 pour la validation et 2 936 pour le test — et une seule classe de détection, object. Consulte la section Dataset Structure et la configuration SKU-110K.yaml pour plus de détails.

Link to this sectionQuelle est la taille du téléchargement du jeu de données SKU-110K ?#

SKU-110K pèse environ 13,6 Go et se télécharge automatiquement la première fois que tu lances un entraînement avec data="SKU-110K.yaml" — aucun téléchargement manuel n'est requis. Pour parcourir d'autres options plus légères, consulte l'aperçu des jeux de données de détection.

Link to this sectionComment entraîner un modèle YOLO26 en utilisant le jeu de données SKU-110K ?#

L'entraînement d'un modèle YOLO26 sur le jeu de données SKU-110K est simple. Voici un exemple pour entraîner un modèle YOLO26n pendant 100 époques avec une taille d'image de 640 :

Exemple d'entraînement
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)

Pour une liste complète des arguments disponibles, réfère-toi à la page Entraînement du modèle et aux conseils d'entraînement de modèle.

Commentaires