Ultralytics YOLO27 :

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 de rayons de magasins bondés, réparties entre 8 219 images d’entraînement, 588 images de validation et 2 936 images de test. Chaque produit est annoté avec une seule boîte englobante appartenant à une classe unique, object — ce nom fait référence aux plus de 110 000 unités de gestion des stocks (SKU) uniques représentées dans les scènes, et non à 110 000 classes de détection. Créé par Eran Goldman et ses collaborateurs pour l’article CVPR 2019 Precise Detection in Densely Packed Scenes, il contient plus de 1,7 million de produits annotés — environ 147 par image en moyenne — ce qui en fait un benchmark exigeant pour les modèles de vision par ordinateur dans les environnements de vente au détail très fréquentés.



Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

Détection sur des rayons de magasins bondés avec le jeu de données SKU-110K

Fonctionnalités clés#

  • Détection à classe unique : chaque produit est annoté avec une seule boîte englobante appartenant à une classe unique, object (names: {0: object}) — les annotations ne contiennent aucune catégorie par SKU.
  • Densité d’objets extrême : les images de rayons de magasins du monde entier contiennent en moyenne environ 147 produits étroitement regroupés, avec des objets souvent similaires, voire identiques, placés à proximité les uns des autres.
  • Grande échelle : plus de 110 000 SKU uniques et plus de 1,7 million de boîtes englobantes annotées réparties sur 11 743 images mettent les détecteurs d’objets de pointe à l’épreuve.

Structure du jeu de données#

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

Sous-ensembleImagesDescription
Entraîner8,219Images et annotations pour l’entraînement du modèle
Validation588Images mises de côté pour l’évaluation pendant l’entraînement
Test2,936Images pour l’évaluation finale du modèle entraîné

Applications#

Le jeu de données SKU-110K est largement utilisé pour entraîner et évaluer des modèles d’apprentissage profond dans le cadre de tâches de détection d’objets, en particulier dans des scènes très denses comme les présentoirs de rayons de magasins. Ses applications comprennent :

  • Gestion et automatisation des stocks dans le commerce de détail
  • Reconnaissance des produits sur les plateformes de commerce électronique
  • Vérification de la conformité aux planogrammes
  • 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 de rayons, entraîner et gérer des jeux de données de détection dans le commerce de détail depuis ton navigateur, exécute l’ensemble du workflow avec Ultralytics Platform.

YAML du jeu de données#

Le fichier SKU-110K.yaml définit la configuration du jeu de données — les chemins des données, les noms des classes et d’autres métadonnées. Il est conservé 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

Utilisation#

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 disponible pour ses 11 743 images. Le script de téléchargement récupère également les annotations d’origine 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 obtenir la 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)

Données et annotations d'exemple#

Les images SKU-110K montrent des produits densément regroupés sur de vrais rayons de magasins, où des dizaines d’articles presque identiques sont côte à côte. Voici un exemple d’image avec ses annotations :

Détection de produits SKU-110K dans des rayons de magasins

  • Image d’un rayon de magasin densément rempli : cette image montre un exemple d’objets densément regroupés dans un rayon de magasin. Les objets sont annotés avec des boîtes englobantes appartenant à la classe unique object.

La disposition dense des produits rend SKU-110K particulièrement utile pour développer des solutions de vision par ordinateur robustes dédiées au commerce de détail, car le nombre élevé d’objets par image pousse les détecteurs bien au-delà des benchmarks habituels.

Citations 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 remercions Eran Goldman et ses collaborateurs d’avoir créé et maintenu le 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, consulte le dépôt GitHub du jeu de données SKU-110K.

FAQ#

  • 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 de rayons de magasins densément remplis, créé par Eran Goldman et ses collaborateurs pour leur article CVPR 2019. Chaque produit est annoté avec une boîte englobante object, et les images représentent plus de 110 000 unités de gestion des stocks (SKU) uniques, ce qui en fait un benchmark performant pour détecter des objets dans des scènes encombrées et créer des systèmes de vision par ordinateur pour le commerce de détail.

  • Non. SKU-110K comporte une seule classe : chaque produit est annoté avec une boîte englobante appartenant à la classe object (names: {0: object}). Le « 110K » du nom fait référence au nombre d’unités de gestion des stocks (SKU) uniques représentées dans les images, et non au nombre de classes de détection.

  • 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 — ainsi qu’une seule classe de détection, object. Consulte la section Structure du jeu de données et la configuration SKU-110K.yaml pour plus de détails.

  • SKU-110K occupe 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 nécessaire. Pour découvrir des options plus petites, consulte la présentation des jeux de données de détection.

  • 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 obtenir la liste complète des arguments disponibles, consulte la page Entraînement du modèle ainsi que les conseils pour l’entraînement des modèles.

Commentaires