Ultralytics YOLO27:
Get Started

SKU-110K 데이터셋#

SKU-110K 데이터셋은 소매점 진열대의 밀집 이미지 11,743개로 구성된 단일 클래스 객체 감지 데이터셋이며, 학습 이미지 8,219개, 검증 이미지 588개, 테스트 이미지 2,936개로 분할되어 있습니다. 모든 제품에는 단일 클래스 object에 속하는 바운딩 박스 하나가 주석으로 지정되어 있습니다. 여기서 이름은 장면에 등장하는 110,000개 이상의 고유 재고 보관 단위(SKU)를 가리키며, 감지 클래스가 110,000개라는 뜻은 아닙니다. CVPR 2019 논문 밀집 장면에서의 정밀 감지를 위해 Eran Goldman 외 연구진이 제작한 이 데이터셋에는 주석이 달린 제품이 170만 개 이상 포함되어 있으며, 이미지당 평균 약 147개에 달합니다. 따라서 혼잡한 소매 환경의 컴퓨터 비전 모델을 위한 까다로운 벤치마크입니다.



시청: 소매점 선반의 모든 제품을 감지하도록 Ultralytics YOLO26을 학습하는 방법 | SKU-110K 🛒

SKU-110K 데이터셋의 밀집된 소매점 진열대 감지

주요 기능#

  • 단일 클래스 감지: 모든 제품에는 단일 클래스 object(names: {0: object}) 아래 바운딩 박스 하나가 지정됩니다. 주석에는 SKU별 카테고리 레이블이 없습니다.
  • 극도로 높은 객체 밀도: 전 세계 매장 진열대 이미지에는 평균 약 147개의 제품이 빽빽하게 들어 있으며, 서로 비슷하거나 똑같아 보이는 객체가 가까이 배치되는 경우가 많습니다.
  • 대규모 데이터: 이미지 11,743개에 걸쳐 110,000개 이상의 고유 SKU와 170만 개 이상의 주석이 달린 바운딩 박스가 포함되어 최첨단 객체 감지기의 성능을 시험합니다.

데이터셋 구조#

SKU-110K 데이터셋은 세 가지 하위 집합으로 나뉘며, 모두 object 단일 클래스를 공유합니다:

분할이미지설명
학습8,219모델 학습에 사용되는 이미지와 주석
검증588학습 중 평가를 위해 분리해 둔 이미지
테스트2,936학습된 모델의 최종 평가에 사용되는 이미지

응용 분야#

SKU-110K 데이터셋은 객체 감지 작업, 특히 소매점 진열대처럼 객체가 밀집된 장면에서 딥러닝 모델을 학습하고 평가하는 데 널리 사용됩니다. 주요 활용 분야는 다음과 같습니다:

  • 소매 재고 관리 및 자동화
  • 전자상거래 플랫폼의 제품 인식
  • 플라노그램 준수 여부 확인
  • 매장의 셀프 계산 시스템
  • 창고의 로봇 피킹 및 분류

자체 진열대 이미지에 주석을 달고, 소매 감지 데이터셋을 학습 및 관리하려면 Ultralytics Platform에서 전체 워크플로를 실행하세요.

데이터셋 YAML#

SKU-110K.yaml 파일은 데이터셋 경로, 클래스 이름, 기타 메타데이터를 포함한 데이터셋 구성을 정의합니다. 이 파일은 https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml의 Ultralytics 저장소에서 관리됩니다.

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 label

사용법#

다운로드 용량 13.6 GB

SKU-110K는 처음 학습할 때 자동으로 다운로드되며, 이미지 11,743개를 저장하려면 디스크 여유 공간이 약 13.6 GB 필요합니다. 다운로드 스크립트는 원본 주석도 가져와 YOLO 형식으로 변환하며, 이 작업에는 몇 분 정도 걸릴 수 있습니다.

SKU-110K 데이터셋에서 이미지 크기 640으로 YOLO26n 모델을 100 에폭 동안 학습하려면 다음 코드 예제를 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 학습 페이지를 참조하세요.

학습 예제
from ultralytics import YOLO

# 모델 로드
model = YOLO("yolo26n.pt")  # 사전 학습된 모델을 불러옵니다(학습에 권장).

# 모델 학습
results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)

샘플 데이터 및 어노테이션#

SKU-110K 이미지는 실제 매장 진열대에 빽빽하게 놓인 제품을 포착하며, 서로 거의 동일한 제품 수십 개가 나란히 배치되어 있습니다. 주석이 포함된 이미지 예시는 다음과 같습니다:

매장 진열대의 SKU-110K 소매 제품 감지

  • 밀집된 소매점 진열대 이미지: 소매점 진열대 환경에 객체가 밀집된 사례를 보여 주는 이미지입니다. 객체에는 단일 object 클래스의 바운딩 박스가 주석으로 지정되어 있습니다.

제품이 밀집해 배치되어 있어 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 데이터셋 GitHub 저장소를 방문하세요.

자주 묻는 질문#

  • SKU-110K 데이터셋은 Eran Goldman 외 연구진이 CVPR 2019 논문을 위해 제작한 단일 클래스 객체 감지 데이터셋으로, 밀집된 소매점 진열대 이미지 11,743개로 구성됩니다. 모든 제품에는 object 바운딩 박스 하나가 지정되어 있으며, 이미지에는 110,000개가 넘는 고유 재고 보관 단위(SKU)가 등장합니다. 따라서 혼잡한 장면의 객체 감지와 소매 분야 컴퓨터 비전 시스템 구축을 위한 우수한 벤치마크입니다.

  • 아니요. SKU-110K는 단일 클래스 데이터셋입니다. 모든 제품에는 object(names: {0: object}) 클래스에 속하는 바운딩 박스 하나가 주석으로 지정됩니다. 이름의 "110K"는 이미지에 등장하는 고유 재고 보관 단위(SKU)의 수를 가리키며, 감지 클래스의 수를 뜻하지 않습니다.

  • SKU-110K 데이터셋에는 이미지 11,743개(학습용 8,219개, 검증용 588개, 테스트용 2,936개)와 단일 감지 클래스 object가 포함되어 있습니다. 자세한 내용은 데이터셋 구조 섹션과 SKU-110K.yaml 구성을 참조하세요.

  • SKU-110K의 용량은 약 13.6 GB이며, data="SKU-110K.yaml"으로 처음 학습할 때 자동으로 다운로드되므로 수동으로 다운로드할 필요가 없습니다. 용량이 더 작은 데이터셋은 객체 감지 데이터셋 개요를 참조하세요.

  • SKU-110K 데이터셋에서 YOLO26 모델을 학습하는 방법은 간단합니다. 이미지 크기 640으로 YOLO26n 모델을 100 에폭 동안 학습하는 예시는 다음과 같습니다:

    학습 예제
    from ultralytics import YOLO
    
    # 모델 로드
    model = YOLO("yolo26n.pt")  # 사전 학습된 모델을 불러옵니다(학습에 권장).
    
    # 모델 학습
    results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)

    사용 가능한 인수의 전체 목록은 모델 학습 페이지와 모델 학습 팁을 참조하세요.

댓글