Conjunto de dados SKU-110K#
O conjunto de dados SKU-110K é um conjunto de dados de deteção de objetos de classe única, com 11 743 imagens de prateleiras de lojas com produtos densamente agrupados, dividido em 8 219 imagens de treino, 588 de validação e 2 936 de teste. Cada produto é anotado com uma caixa delimitadora numa única classe, object — o nome refere-se às mais de 110 000 unidades de manutenção de estoque (SKUs) únicas retratadas nas cenas, não a 110 000 classes de deteção. Criado por Eran Goldman et al. para o artigo da CVPR 2019 Precise Detection in Densely Packed Scenes, contém mais de 1,7 milhões de produtos anotados — uma média de cerca de 147 por imagem —, o que o torna uma referência exigente para modelos de visão computacional em ambientes de retalho com grande concentração de produtos.
Assista: Como treinar Ultralytics YOLO26 para detectar todos os produtos em uma prateleira de varejo | SKU-110K 🛒

Principais funcionalidades#
- Deteção de classe única: Cada produto é identificado com uma caixa delimitadora numa única classe,
object(names: {0: object}) — as anotações não incluem rótulos de categoria por SKU. - Densidade extrema de objetos: As imagens de prateleiras de lojas de todo o mundo contêm, em média, cerca de 147 produtos muito próximos uns dos outros, muitas vezes semelhantes ou até idênticos.
- Grande escala: Mais de 110 000 SKUs únicos e mais de 1,7 milhões de caixas delimitadoras anotadas em 11 743 imagens desafiam os detetores de objetos de última geração.
Estrutura do conjunto de dados#
O conjunto de dados SKU-110K está dividido em três subconjuntos, todos com a mesma classe object:
| Divisão | Imagens | Descrição |
|---|---|---|
| Treinar | 8,219 | Imagens e anotações para treino do modelo |
| Validação | 588 | Imagens reservadas para avaliação durante o treino |
| Teste | 2,936 | Imagens para a avaliação final do modelo treinado |
Aplicações#
O conjunto de dados SKU-110K é amplamente utilizado para treinar e avaliar modelos de aprendizagem profunda em tarefas de deteção de objetos, sobretudo em cenas com grande concentração de objetos, como as prateleiras de lojas. Entre as suas aplicações estão:
- Gestão e automatização de inventário no retalho
- Reconhecimento de produtos em plataformas de comércio eletrónico
- Verificação da conformidade com planogramas
- Sistemas de pagamento autónomo em lojas
- Recolha e triagem robóticas em armazéns
Para anotares as tuas próprias imagens de prateleiras, treinares e gerires conjuntos de dados de deteção no retalho no navegador, executa o fluxo de trabalho completo com a Ultralytics Platform.
YAML do conjunto de dados#
O ficheiro SKU-110K.yaml define a configuração do conjunto de dados — os caminhos dos dados, os nomes das classes e outros metadados. É mantido no repositório da Ultralytics em 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#
O SKU-110K é transferido automaticamente na primeira vez que treinas e requer cerca de 13,6 GB de espaço livre em disco para as suas 11 743 imagens. O script de transferência também obtém as anotações originais e converte-as para o formato YOLO, o que pode demorar alguns minutos.
Para treinares um modelo YOLO26n no conjunto de dados SKU-110K durante 100 épocas, com um tamanho de imagem de 640, podes usar os seguintes excertos de código. Para consultares a lista completa de argumentos disponíveis, visita a página de Treino do modelo.
from ultralytics import YOLO
# Carregar um modelo
model = YOLO("yolo26n.pt") # carregue um modelo pré-treinado (recomendado para treinamento)
# Treinar o modelo
results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)Dados de exemplo e anotações#
As imagens do SKU-110K mostram produtos densamente agrupados em prateleiras de lojas reais, onde dezenas de artigos quase idênticos estão lado a lado. Aqui está um exemplo de imagem com as respetivas anotações:

- Imagem de uma prateleira de retalho densamente ocupada: Esta imagem mostra um exemplo de objetos densamente agrupados numa prateleira de retalho. Os objetos estão anotados com caixas delimitadoras da única classe
object.
A disposição densa dos produtos torna o SKU-110K particularmente valioso para desenvolver soluções robustas de visão computacional orientadas para o retalho, uma vez que a elevada quantidade de objetos por imagem coloca os detetores muito além das referências habituais.
Citações e agradecimentos#
Se utilizares o conjunto de dados SKU-110K na tua investigação ou trabalho de desenvolvimento, cita o artigo seguinte:
@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}
}Gostaríamos de agradecer a Eran Goldman et al. pela criação e manutenção do conjunto de dados SKU-110K, um recurso valioso para a comunidade de investigação em visão computacional. Para obteres mais informações sobre o conjunto de dados SKU-110K e os seus criadores, visita o repositório GitHub do conjunto de dados SKU-110K.
Perguntas frequentes#
O conjunto de dados SKU-110K é um conjunto de dados de deteção de objetos de classe única com 11 743 imagens de prateleiras de lojas densamente ocupadas, criado por Eran Goldman et al. para o artigo da CVPR 2019. Cada produto está identificado com uma caixa delimitadora
object, e as imagens incluem mais de 110 000 unidades de manutenção de estoque (SKUs) únicas, o que faz deste conjunto uma referência sólida para detetar objetos em cenas congestionadas e criar sistemas de visão computacional para o retalho.Não. O SKU-110K tem uma única classe: cada produto é anotado com uma caixa delimitadora da classe
object(names: {0: object}). O termo «110K» no nome refere-se ao número de unidades de manutenção de estoque (SKUs) únicas representadas nas imagens, não ao número de classes de deteção.O conjunto de dados SKU-110K contém 11 743 imagens — 8 219 para treino, 588 para validação e 2 936 para teste — e uma única classe de deteção,
object. Consulta a secção Estrutura do conjunto de dados e a configuraçãoSKU-110K.yamlpara obteres mais informações.O SKU-110K ocupa cerca de 13,6 GB e é transferido automaticamente na primeira vez que treinas com
data="SKU-110K.yaml"— não é necessário transferi-lo manualmente. Para explorares opções mais pequenas, consulta a visão geral dos conjuntos de dados de deteção.É simples treinar um modelo YOLO26 com o conjunto de dados SKU-110K. Segue-se um exemplo de treino de um modelo YOLO26n durante 100 épocas, com um tamanho de imagem de 640:
Exemplo de treinofrom ultralytics import YOLO # Carregar um modelo model = YOLO("yolo26n.pt") # carregue um modelo pré-treinado (recomendado para treinamento) # Treinar o modelo results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)Para consultares a lista completa de argumentos disponíveis, visita a página de Treino do modelo e as dicas de treino de modelos.



