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 densément garnis, 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 dans une seule classe, object — le nom fait référence aux plus de 110 000 unités de gestion des stocks uniques (SKUs) représentées dans les scènes, et non à 110 000 classes de détection. Créé par Eran Goldman et ses collègues pour l’article CVPR 2019 Precise Detection in Densely Packed Scenes, il compte plus de 1,7 million de produits annotés — environ 147 par image — ce qui en fait un banc d’essai exigeant pour les modèles de vision par ordinateur dans les environnements de vente au détail très encombrés.
Regarder : Comment entraîner Ultralytics YOLO26 pour détecter tous les produits sur une étagère de magasin | SKU-110K 🛒

Fonctionnalités clés#
- Détection à classe unique : Chaque produit est associé à une boîte englobante dans une seule classe,
object(names: {0: object}) — les annotations ne comportent aucune catégorie par SKU. - Densité extrême d’objets : Les images de rayons de magasins du monde entier contiennent en moyenne environ 147 produits très rapprochés, souvent similaires, voire identiques.
- 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 à l’épreuve les détecteurs d’objets de pointe.
Structure du jeu de données#
Le jeu de données SKU-110K est réparti en trois sous-ensembles, qui partagent tous la classe unique object :
| Partition | Images | Description |
|---|---|---|
| Entraînement | 8,219 | Images et annotations destinées à l’entraînement du modèle |
| Validation | 588 | Images mises à part pour l’évaluation pendant l’entraînement |
| Test | 2,936 | Images destinées à 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 des tâches de détection d’objets, notamment dans des scènes densément peuplées comme les rayons de magasins. Ses applications comprennent :
- Gestion et automatisation des stocks de vente au détail
- Reconnaissance de produits sur les plateformes de commerce électronique
- Vérification de la conformité des planogrammes
- Systèmes de caisse en libre-service en magasin
- 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 en vente au détail dans ton navigateur, exécute l’ensemble du flux de travail avec Ultralytics Platform.
Fichier YAML du jeu de données#
Le fichier SKU-110K.yaml définit la configuration du jeu de données — les chemins d’accès, les noms de classes 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 🚀 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 labelUtilisation#
SKU-110K se télécharge automatiquement lors de ton premier 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.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n.pt") # charger un modèle préentraîné (recommandé pour l’entraînement)
# Entraîner le modèle
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 disposé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 :

- Image d’un rayon de magasin densément garni : Cette image illustre un exemple d’objets densément disposés dans un rayon de magasin. Les objets sont annotés par des boîtes englobantes appartenant à la classe unique
object.
La disposition dense des produits rend SKU-110K particulièrement utile au développement de solutions de vision par ordinateur robustes axées sur la vente au détail, car le nombre élevé d’objets par image pousse les détecteurs bien au-delà des bancs d’essai habituels.
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 remercions Eran Goldman et ses collègues d’avoir créé et maintenu le jeu de données SKU-110K, une ressource précieuse pour la communauté de recherche en vision par ordinateur. Pour en savoir plus 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 garnis, créé par Eran Goldman et ses collègues pour leur article CVPR 2019. Chaque produit est associé à une boîte englobante
object, et les images représentent plus de 110 000 unités de gestion des stocks uniques (SKUs), ce qui en fait un excellent banc d’essai pour détecter des objets dans des scènes encombrées et créer des systèmes de vision par ordinateur pour la vente au détail.Non. SKU-110K comporte une seule classe : chaque produit est annoté par une boîte englobante appartenant à la classe
object(names: {0: object}). Le « 110K » du nom désigne le nombre d’unités de gestion des stocks uniques (SKUs) représentées dans les images, et non le 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 — et une seule classe de détection,
object. Consulte la section Structure du jeu de données et la configurationSKU-110K.yamlpour en savoir plus.SKU-110K pèse environ 13,6 Go et se télécharge automatiquement lors de ton premier entraînement avec
data="SKU-110K.yaml"— aucun téléchargement manuel n’est nécessaire. Pour découvrir des jeux de données plus petits, 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 d’entraînement d’un modèle YOLO26n pendant 100 époques avec une taille d’image de 640 :
Exemple d’entraînementfrom ultralytics import YOLO # Charger un modèle model = YOLO("yolo26n.pt") # charger un modèle préentraîné (recommandé pour l’entraînement) # Entraîner le modèle 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 et les conseils d’entraînement des modèles.



