Conjunto de dados SKU-110k
O conjunto de dados SKU-110k é uma coleção de imagens de prateleiras de retalho densamente embaladas, concebidas para apoiar a investigação em tarefas de deteção de objectos. Desenvolvido por Eran Goldman et al., o conjunto de dados contém mais de 110.000 categorias únicas de unidades de manutenção de loja (SKU) com objectos densamente embalados, muitas vezes com aspeto semelhante ou mesmo idêntico, posicionados nas proximidades.
Características principais
- O SKU-110k contém imagens de prateleiras de lojas de todo o mundo, com objectos densamente embalados que representam desafios para os detectores de objectos mais avançados.
- O conjunto de dados inclui mais de 110.000 categorias SKU únicas, fornecendo uma gama diversificada de aparências de objectos.
- As anotações incluem caixas delimitadoras para objectos e etiquetas de categorias SKU.
Estrutura do conjunto de dados
O conjunto de dados SKU-110k está organizado em três subconjuntos principais:
- Conjunto de treino: Este subconjunto contém imagens e anotações utilizadas para treinar modelos de deteção de objectos.
- Conjunto de validação: Este subconjunto é constituído por imagens e anotações utilizadas para validação do modelo durante o treino.
- Conjunto de teste: Este subconjunto foi concebido para a avaliação final dos modelos de deteção de objectos treinados.
Aplicações
O conjunto de dados SKU-110k é amplamente utilizado para treinar e avaliar modelos de aprendizagem profunda em tarefas de deteção de objectos, especialmente em cenas densamente compactadas, como os expositores de prateleiras de retalho. O conjunto de dados diversificado de categorias SKU e arranjos de objectos densamente embalados tornam-no um recurso valioso para investigadores e profissionais no campo da visão computacional.
Conjunto de dados YAML
Um ficheiro YAML (Yet Another Markup Language) é utilizado para definir a configuração do conjunto de dados. Contém informações sobre os caminhos do conjunto de dados, classes e outras informações relevantes. Para o caso do conjunto de dados SKU-110K, o ficheiro SKU-110K.yaml
é mantido em https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml.
ultralytics/cfg/datasets/SKU-110K.yaml
# Ultralytics YOLO 🚀, AGPL-3.0 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: ../datasets/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 pandas as pd
from tqdm 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 = pd.read_csv(dir / 'annotations' / d, names=names).values # annotations
images, unique_images = x[:, 0], np.unique(x[:, 0])
with open((dir / d).with_suffix('.txt').__str__().replace('annotations_', ''), 'w') 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') 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
Utilização
Para treinar um modelo YOLOv8n no conjunto de dados SKU-110K para 100 épocas com um tamanho de imagem de 640, podes utilizar os seguintes snippets de código. Para obter uma lista abrangente dos argumentos disponíveis, consulta a página Treinamento do modelo.
Exemplo de comboio
Dados de amostra e anotações
O conjunto de dados SKU-110k contém um conjunto diversificado de imagens de prateleiras de retalho com objectos densamente embalados, fornecendo um contexto rico para tarefas de deteção de objectos. Aqui estão alguns exemplos de dados do conjunto de dados, juntamente com as anotações correspondentes:
- Imagem de uma prateleira de retalho densamente embalada: Esta imagem demonstra um exemplo de objectos densamente embalados numa prateleira de retalho. Os objectos são anotados com caixas delimitadoras e etiquetas de categorias SKU.
O exemplo mostra a variedade e complexidade dos dados no conjunto de dados SKU-110k e realça a importância de dados de alta qualidade para tarefas de deteção de objectos.
Citações e agradecimentos
Se utilizares o conjunto de dados SKU-110k no teu trabalho de investigação ou desenvolvimento, cita o seguinte documento:
Gostaríamos de agradecer a Eran Goldman et al. por criar e manter o conjunto de dados SKU-110k como um recurso valioso para a comunidade de pesquisa em visão computacional. Para 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.