SKU-110K 데이터셋#
SKU-110K 데이터셋은 11,743개의 조밀하게 채워진 소매 진열대 이미지로 구성된 단일 클래스 object detection 데이터셋이며, 8,219개의 훈련, 588개의 검증, 2,936개의 테스트 이미지로 분할되어 있습니다. 모든 제품은 단일 클래스인 object 아래에 하나의 BBox로 주석이 달려 있습니다. 이 이름은 110,000개의 detection 클래스가 아니라 전체 장면에 걸쳐 촬영된 110,000개 이상의 고유한 재고 관리 단위(SKU)를 의미합니다. Eran Goldman 외 연구진이 CVPR 2019 논문 Precise Detection in Densely Packed Scenes을 위해 제작했으며, 170만 개 이상의 주석이 달린 제품(이미지당 평균 약 147개)을 포함하고 있어 혼잡한 소매 환경에서 computer vision 모델을 위한 까다로운 벤치마크가 됩니다.
Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

주요 특징#
- 단일 클래스 detection: 모든 제품은 단일 클래스
object(names: {0: object}) 아래에 하나의 BBox로 라벨링되어 있으며, 주석에는 SKU별 카테고리 라벨이 없습니다. - 극도의 객체 밀도: 전 세계의 소매점 선반 이미지들은 평균적으로 147개의 밀집된 제품을 포함하고 있으며, 종종 비슷하거나 동일해 보이는 객체들이 아주 가까운 위치에 배치되어 있습니다.
- 대규모: 11,743개의 이미지에 걸쳐 110,000개 이상의 고유 SKU와 170만 개 이상의 주석 처리된 바운딩 박스가 포함되어 있어 최첨단 객체 탐지 모델에 도전 과제를 제시합니다.
데이터셋 구조#
SKU-110K 데이터셋은 모두 단일 object 클래스를 공유하는 세 개의 하위 집합으로 분할됩니다.
| Split | 이미지 | 설명 |
|---|---|---|
| 학습(Train) | 8,219 | 모델 학습을 위한 이미지 및 주석 |
| 검증 | 588 | 훈련 중 evaluation을 위해 분리된 이미지 |
| 테스트 | 2,936 | 학습된 모델의 최종 평가를 위한 이미지 |
응용 분야#
SKU-110K 데이터셋은 object detection 태스크, 특히 소매 진열대 디스플레이와 같이 조밀하게 채워진 장면에서 deep learning 모델을 훈련하고 평가하는 데 널리 사용됩니다. 주요 응용 분야는 다음과 같습니다.
- 소매 재고 관리 및 자동화
- 전자상거래 플랫폼에서의 제품 인식
- 매장 진열 계획(Planogram) 준수 확인
- 매장 내 셀프 체크아웃 시스템
- 창고 내 로봇 피킹 및 분류
나만의 진열대 이미지에 주석을 달고, 소매 detection 데이터셋을 훈련 및 관리하려면 브라우저에서 Ultralytics Platform을 사용하여 전체 워크플로를 실행하세요.
데이터셋 YAML#
SKU-110K.yaml 파일은 데이터셋 경로, 클래스 이름 및 기타 메타데이터를 포함하는 데이터셋 설정을 정의합니다. 이 파일은 https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml의 Ultralytics 저장소에서 유지관리됩니다.
# 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 label사용법#
SKU-110K는 처음 학습을 시작할 때 자동으로 다운로드되며, 11,743개의 이미지를 저장하기 위해 약 13.6 GB의 여유 디스크 공간이 필요합니다. 다운로드 스크립트는 원본 주석을 가져와 YOLO 형식으로 변환하며, 이 과정은 몇 분 정도 소요될 수 있습니다.
이미지 크기 640으로 SKU-110K 데이터셋에서 100 epochs 동안 YOLO26n 모델을 훈련하려면 다음 코드 조각을 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 Training 페이지를 참조하세요.
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)샘플 데이터 및 주석#
SKU-110K 이미지는 수십 개의 거의 동일한 항목이 나란히 놓여 있는 실제 매장 선반의 밀집된 제품들을 포착합니다. 다음은 주석이 포함된 예시 이미지입니다.

- 조밀하게 채워진 소매 진열대 이미지: 이 이미지는 소매 진열대 환경에서 조밀하게 채워진 객체의 예를 보여줍니다. 객체는 단일
object클래스 아래에 BBox로 주석이 달려 있습니다.
제품들이 밀집되어 배열된 SKU-110K는 이미지당 높은 객체 수로 인해 탐지기 성능을 일반적인 벤치마크 이상으로 끌어올리기 때문에, 강력한 소매점 전용 컴퓨터 비전 솔루션을 개발하는 데 매우 가치가 있습니다.
인용 및 감사의 글#
연구나 개발 작업에 SKU-110K 데이터셋을 사용하는 경우 다음 논문을 인용해 주십시오:
@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}
}컴퓨터 비전 연구 커뮤니티를 위한 귀중한 리소스로서 SKU-110K 데이터셋을 만들고 유지관리해 준 Eran Goldman 외 연구진에게 감사를 표합니다. SKU-110K 데이터셋과 제작자에 대한 자세한 내용은 SKU-110K dataset GitHub repository를 방문하세요.
FAQ#
SKU-110K 데이터셋은 Eran Goldman 외 연구진이 CVPR 2019 논문을 위해 제작한 11,743개의 조밀하게 채워진 소매 진열대 이미지로 구성된 단일 클래스 object detection 데이터셋입니다. 모든 제품에는 하나의
objectBBox가 라벨링되어 있으며, 이미지는 110,000개 이상의 고유한 재고 관리 단위(SKU)에 걸쳐 있으므로 혼잡한 장면에서 객체를 감지하고 소매 computer vision 시스템을 구축하기 위한 강력한 벤치마크가 됩니다.아니요. SKU-110K는 단일 클래스입니다. 모든 제품은
object(names: {0: object}) 클래스 아래에 하나의 BBox로 주석이 달려 있습니다. 이름의 "110K"는 detection 클래스의 수가 아니라 이미지 전체에 걸쳐 촬영된 고유한 재고 관리 단위(SKU)의 수를 나타냅니다.SKU-110K 데이터셋은 11,743개의 이미지(훈련용 8,219개, 검증용 588개, 테스트용 2,936개)와 단일 detection 클래스인
object을 포함합니다. 자세한 내용은 Dataset Structure 섹션과SKU-110K.yaml설정을 참조하세요.SKU-110K의 용량은 약 13.6 GB이며
data="SKU-110K.yaml"을 사용하여 처음 훈련할 때 자동으로 다운로드되므로 수동으로 다운로드할 필요가 없습니다. 더 작은 옵션을 살펴보려면 detection datasets overview를 참조하세요.SKU-110K 데이터셋에서 YOLO26 모델을 학습하는 방법은 간단합니다. 다음은 이미지 크기 640으로 100 에포크 동안 YOLO26n 모델을 학습하는 예시입니다:
훈련 예제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)사용 가능한 인수의 전체 목록은 모델 Training 페이지와 model training tips을 참조하세요.



