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, divisées en 8 219 images d'entraînement, 588 images de validation et 2 936 images 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 représentées dans 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 comporte plus de 1,7 million de produits annotés — soit une moyenne d'environ 147 par image —, ce qui en fait un banc d'essai exigeant pour les modèles de vision par ordinateur dans des environnements de vente au détail encombrés.
Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

Fonctionnalité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 comportent aucune étiquette 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.
Structure du jeu de données#
Le jeu de données SKU-110K est divisé en trois sous-ensembles, partageant tous la seule classe object :
| Split | Images | Description |
|---|---|---|
| Entraîner (Train) | 8,219 | Images et annotations pour l'entraînement du modèle |
| Validation | 588 | Images mises de côté pour l'évaluation pendant l'entraînement |
| Test | 2,936 | Images pour l'évaluation finale du modèle entraîné |
Applications#
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 telles que les présentoirs d'étagères de vente au détail. Ses applications comprennent :
- 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.
YAML du jeu de données#
Le fichier SKU-110K.yaml définit la configuration du jeu de données — les chemins des jeux de données, les noms des 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 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.
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)Exemples 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 :

- Image d'étagère de vente au détail densément remplie : Cette image illustre un exemple d'objets densément remplis dans le cadre d'une étagère de vente au détail. Les objets sont annotés avec des boîtes englobantes sous la seule classe
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.
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 :
@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.
FAQ#
Le jeu de données SKU-110K est un jeu de données de détection d'objets à classe unique 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 s'étend sur plus de 110 000 unités de gestion des stocks (SKU) uniques, ce qui en fait un banc d'essai 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.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 représentées à travers 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 — et une seule classe de détection,
object. Consulte la section Structure du jeu de données et la configurationSKU-110K.yamlpour plus de détails.SKU-110K pèse environ 13,6 Go et se télécharge automatiquement la première fois que tu t'entraînes avec
data="SKU-110K.yaml"— aucun téléchargement manuel n'est requis. Pour parcourir 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 :
Pour obtenir une liste complète des arguments disponibles, consulte la page Entraînement du modèle et les conseils d'entraînement du modèle.