Dataset SKU-110K#
El dataset SKU-110K es un dataset de detección de objetos de una sola clase, compuesto por 11.743 imágenes de estanterías de tiendas con productos densamente agrupados, dividido en 8.219 imágenes de entrenamiento, 588 de validación y 2.936 de prueba. Cada producto está anotado con una única caja delimitadora bajo una sola clase, object — el nombre hace referencia a las más de 110.000 unidades de mantenimiento de existencias (SKUs) únicas representadas en las escenas, no a 110.000 clases de detección. Creado por Eran Goldman et al. para el artículo de CVPR 2019 Precise Detection in Densely Packed Scenes, contiene más de 1,7 millones de productos anotados — una media aproximada de 147 por imagen —, lo que lo convierte en un benchmark exigente para modelos de visión artificial en entornos comerciales con mucha afluencia.
Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

Características principales#
- Detección de una sola clase: Cada producto está etiquetado con una única caja delimitadora bajo una sola clase,
object(names: {0: object}) — las anotaciones no incluyen etiquetas de categoría por SKU. - Densidad extrema de objetos: Las imágenes de estanterías de tiendas de todo el mundo contienen una media aproximada de 147 productos muy juntos, con objetos que a menudo parecen similares o incluso idénticos y están situados muy cerca unos de otros.
- Gran escala: Más de 110.000 SKUs únicos y más de 1,7 millones de cajas delimitadoras anotadas en 11.743 imágenes ponen a prueba los detectores de objetos más avanzados.
Estructura del dataset#
El dataset SKU-110K se divide en tres subconjuntos, todos ellos con la clase única object:
| Subconjunto | Imágenes | Descripción |
|---|---|---|
| Entrenar | 8,219 | Imágenes y anotaciones para entrenar el modelo |
| Validación | 588 | Imágenes reservadas para la evaluación durante el entrenamiento |
| Prueba | 2,936 | Imágenes para la evaluación final del modelo entrenado |
Aplicaciones#
El dataset SKU-110K se utiliza ampliamente para entrenar y evaluar modelos de aprendizaje profundo en tareas de detección de objetos, especialmente en escenas densamente agrupadas, como las exposiciones de productos en estanterías comerciales. Entre sus aplicaciones se incluyen:
- Gestión y automatización del inventario comercial
- Reconocimiento de productos en plataformas de comercio electrónico
- Verificación del cumplimiento del planograma
- Sistemas de autopago en tiendas
- Recogida y clasificación robóticas en almacenes
Para anotar tus propias imágenes de estanterías, entrenar y gestionar datasets de detección comercial desde el navegador, ejecuta el flujo de trabajo completo con Ultralytics Platform.
YAML del dataset#
El archivo SKU-110K.yaml define la configuración del dataset — las rutas del dataset, los nombres de las clases y otros metadatos. Se mantiene en el repositorio de Ultralytics, en 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 labelUso#
SKU-110K se descarga automáticamente la primera vez que entrenas y requiere unos 13,6 GB de espacio libre en disco para sus 11.743 imágenes. El script de descarga también obtiene las anotaciones originales y las convierte al formato YOLO, lo que puede tardar unos minutos.
Para entrenar un modelo YOLO26n con el dataset SKU-110K durante 100 épocas y con un tamaño de imagen de 640, puedes utilizar los siguientes fragmentos de código. Para consultar una lista completa de los argumentos disponibles, visita la página de entrenamiento del modelo.
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)Datos de ejemplo y anotaciones#
Las imágenes de SKU-110K capturan productos densamente agrupados en estanterías de tiendas reales, donde docenas de artículos casi idénticos están colocados uno junto a otro. Aquí tienes un ejemplo de imagen con sus anotaciones:

- Imagen de una estantería comercial con productos densamente agrupados: Esta imagen muestra un ejemplo de objetos densamente agrupados en una estantería comercial. Los objetos están anotados con cajas delimitadoras bajo la clase única
object.
La disposición densa de los productos hace que SKU-110K sea especialmente valioso para desarrollar soluciones sólidas de visión artificial orientadas al comercio minorista, ya que el elevado número de objetos por imagen lleva a los detectores mucho más allá de los benchmarks habituales.
Citas y agradecimientos#
Si utilizas el dataset SKU-110K en tu trabajo de investigación o desarrollo, cita el siguiente artículo:
@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}
}Queremos agradecer a Eran Goldman et al. la creación y el mantenimiento del dataset SKU-110K como recurso valioso para la comunidad investigadora de visión artificial. Para obtener más información sobre el dataset SKU-110K y sus creadores, visita el repositorio de SKU-110K en GitHub.
Preguntas frecuentes#
El dataset SKU-110K es un dataset de detección de objetos de una sola clase compuesto por 11.743 imágenes de estanterías comerciales con productos densamente agrupados, creado por Eran Goldman et al. para su artículo de CVPR 2019. Cada producto está etiquetado con una caja delimitadora
object, y las imágenes abarcan más de 110.000 unidades de mantenimiento de existencias (SKUs) únicas, lo que lo convierte en un benchmark sólido para detectar objetos en escenas abarrotadas y crear sistemas de visión artificial para el comercio minorista.No. SKU-110K tiene una sola clase: cada producto está anotado con una caja delimitadora bajo la clase
object(names: {0: object}). La cifra «110K» del nombre hace referencia al número de unidades de mantenimiento de existencias (SKUs) únicas representadas en las imágenes, no al número de clases de detección.El dataset SKU-110K contiene 11.743 imágenes — 8.219 para entrenamiento, 588 para validación y 2.936 para pruebas — y una sola clase de detección,
object. Consulta la sección Estructura del dataset y la configuraciónSKU-110K.yamlpara obtener más información.SKU-110K ocupa unos 13,6 GB y se descarga automáticamente la primera vez que entrenas con
data="SKU-110K.yaml"— no es necesario descargarlo manualmente. Para consultar opciones más pequeñas, visita la vista general de datasets de detección.Entrenar un modelo YOLO26 con el dataset SKU-110K es sencillo. Este es un ejemplo para entrenar un modelo YOLO26n durante 100 épocas con un tamaño de imagen de 640:
Ejemplo de entrenamientofrom 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)Para consultar una lista completa de los argumentos disponibles, visita la página de entrenamiento del modelo y los consejos para entrenar modelos.



