エンタープライズ対応のセキュリティ: ISO 27001 + SOC 2 Type I準拠。

Link to this sectionSKU-110K データセット#

SKU-110K データセットは、11,743枚の密集した小売棚の画像からなるシングルクラスの物体検出データセットで、トレーニング用8,219枚、検証用588枚、テスト用2,936枚に分割されています。すべての製品は、objectという単一のクラスのバウンディングボックスでアノテーションされています。この名前は、画像全体で撮影された11万種類以上のユニークなストア・キーピング・ユニット(SKUs)を指しており、11万種類の検出クラスを意味するものではありません。Eran Goldman氏らによってCVPR 2019の論文Precise Detection in Densely Packed Scenesのために作成されたこのデータセットには、170万以上の製品アノテーションが含まれており(1画像あたり平均約147個)、混雑した小売環境におけるコンピュータビジョンモデルにとって極めて難易度の高いベンチマークとなっています。



Watch: How to Train YOLOv10 on SKU-110k Dataset using Ultralytics | Retail Dataset

SKU-110K データセット 高密度小売棚検出

Link to this section主な特徴#

  • シングルクラス検出: すべての製品は、objectnames: {0: object})という単一のクラスでバウンディングボックスが付けられています。アノテーションにはSKUごとのカテゴリラベルは含まれていません。
  • 極めて高い物体密度: 世界中の店舗の棚を撮影した画像には、1画像あたり平均で約147個の密集した製品が写っており、類似または同一の物体が近接して配置されていることがよくあります。
  • 大規模: 11,743枚の画像にわたる11万以上のユニークなSKUと170万以上のバウンディングボックスのアノテーションが、最先端の物体検出器にとっての挑戦となります。

Link to this sectionデータセットの構造#

SKU-110K データセットは、すべて同じobjectクラスを共有する3つのサブセットに分割されています。

分割画像説明
トレーニング8,219モデルトレーニング用の画像とアノテーション
バリデーション588トレーニング中の評価用として切り出された画像
テスト2,936学習済みモデルの最終評価用画像

Link to this sectionアプリケーション#

SKU-110K データセットは、小売棚の陳列のような密集したシーンにおける、物体検出タスク向けのディープラーニングモデルのトレーニングおよび評価に広く使用されています。主な用途は以下の通りです。

  • 小売在庫の管理と自動化
  • Eコマースプラットフォームにおける製品認識
  • プラノグラム準拠の検証
  • 店舗でのセルフレジシステム
  • 倉庫内でのロボットによるピッキングと仕分け

独自の棚画像をアノテーションし、小売検出データセットをブラウザ上でトレーニングおよび管理するには、Ultralytics Platformを使用して完全なワークフローを実行してください。

Link to this sectionデータセット YAML#

SKU-110K.yamlファイルは、データセットのパス、クラス名、その他のメタデータといったデータセット構成を定義します。このファイルは、UltralyticsのGitHubリポジトリ(https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/SKU-110K.yaml)で管理されています。

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

Link to this section使用方法#

13.6 GBのダウンロード

SKU-110K は最初のトレーニング時に自動的にダウンロードされ、11,743枚の画像のために約13.6 GBの空きディスク容量が必要です。ダウンロードスクリプトは元ののアノテーションを取得してYOLO形式に変換するため、数分かかる場合があります。

SKU-110K データセットで YOLO26n モデルを100エポック、画像サイズ640でトレーニングするには、以下のコードスニペットを使用できます。利用可能な引数の詳細なリストについては、モデルのトレーニングページを参照してください。

学習例
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)

Link to this sectionサンプルデータとアノテーション#

SKU-110K の画像は、実際の店舗の棚に密集して並べられた製品を捉えており、そこでは何十個ものほぼ同一のアイテムが並んでいます。以下は、アノテーションを含む画像の例です。

SKU-110K 店舗棚における小売製品の検出

  • 密集した小売棚の画像: この画像は、小売棚の設定における密集した物体の例を示しています。物体には、objectという単一クラスのバウンディングボックスでアノテーションが付けられています。

製品の密集した配置により、SKU-110K は小売に特化した堅牢なコンピュータビジョンソリューションを開発する上で非常に価値があります。1画像あたりの物体数が非常に多いため、検出器は一般的なベンチマークをはるかに超える性能を求められます。

Link to this section引用と謝辞#

研究や開発業務で 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 リポジトリをご覧ください。

Link to this sectionよくある質問 (FAQ)#

Link to this sectionSKU-110K データセットは何に使用されますか?#

SKU-110K データセットは、Eran Goldman氏らがCVPR 2019の論文のために作成した、11,743枚の密集した小売棚の画像からなるシングルクラスの物体検出データセットです。すべての製品には1つのobjectバウンディングボックスが付けられており、画像全体で11万以上のユニークなストア・キーピング・ユニット(SKUs)を網羅しています。これにより、混雑したシーンでの物体検出や小売向けのコンピュータビジョンシステムを構築するための強力なベンチマークとなっています。

Link to this sectionSKU-110K データセットには110,000個のクラスがありますか?#

いいえ。SKU-110K はシングルクラスです。すべての製品はobjectnames: {0: object})クラスの1つのバウンディングボックスでアノテーションされています。名称の「110K」は、画像全体に写っているユニークなストア・キーピング・ユニット(SKUs)の数を指しており、検出クラスの数ではありません。

Link to this sectionSKU-110K データセットには何枚の画像といくつのクラスが含まれていますか?#

SKU-110K データセットには、11,743枚の画像(トレーニング用8,219枚、検証用588枚、テスト用2,936枚)と、1つの検出クラスobjectが含まれています。詳細については、データセット構造セクションとSKU-110K.yaml構成ファイルを参照してください。

Link to this sectionSKU-110K データセットのダウンロードサイズはどれくらいですか?#

SKU-110K は約13.6 GBあり、data="SKU-110K.yaml"を使用して最初にトレーニングを行う際に自動的にダウンロードされます。手動でのダウンロードは不要です。他の小さなデータセットについては、検出データセットの概要をご覧ください。

Link to this sectionSKU-110K データセットを使用して YOLO26 モデルをトレーニングするにはどうすればよいですか?#

SKU-110K データセットで YOLO26 モデルをトレーニングするのは簡単です。以下は、画像サイズ640でYOLO26nモデルを100エポックトレーニングする例です。

学習例
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)

利用可能な引数の詳細なリストについては、モデルのトレーニングページおよびモデルトレーニングのヒントを参照してください。

コメント