Salta para o conteúdo

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.

Imagem de amostra do conjunto de dados

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:

  1. Conjunto de treino: Este subconjunto contém imagens e anotações utilizadas para treinar modelos de deteção de objectos.
  2. Conjunto de validação: Este subconjunto é constituído por imagens e anotações utilizadas para validação do modelo durante o treino.
  3. 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

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data='SKU-110K.yaml', epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=SKU-110K.yaml model=yolov8n.pt epochs=100 imgsz=640

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 amostra do conjunto de dados

  • 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:

@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. 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.



Criado em 2023-11-12, Atualizado em 2023-11-22
Autores: glenn-jocher (3), Laughing-q (1)

Comentários