Ultralytics YOLO27:

Tập dữ liệu SKU-110K#

Tập dữ liệu SKU-110K là một tập dữ liệu phát hiện đối tượng đơn lớp gồm 11.743 ảnh kệ hàng bán lẻ được xếp dày đặc, được chia thành 8.219 ảnh huấn luyện, 588 ảnh validation và 2.936 ảnh kiểm thử. Mỗi sản phẩm được gán một bounding box thuộc một lớp duy nhất, object — tên gọi này đề cập đến hơn 110.000 đơn vị lưu kho (SKUs) duy nhất xuất hiện trong các cảnh, không phải 110.000 lớp phát hiện. Được Eran Goldman và cộng sự tạo ra cho bài báo CVPR 2019 Precise Detection in Densely Packed Scenes, tập dữ liệu này có hơn 1,7 triệu sản phẩm được gán nhãn — trung bình khoảng 147 sản phẩm mỗi ảnh — khiến nó trở thành một benchmark đầy thách thức cho các model thị giác máy tính trong môi trường bán lẻ đông đúc.



Watch: How to Train Ultralytics YOLO26 to Detect Every Product on a Retail Shelf | SKU-110K 🛒

Phát hiện kệ hàng bán lẻ xếp dày đặc trong tập dữ liệu SKU-110K

Tính năng chính#

  • Phát hiện đơn lớp: Mỗi sản phẩm được gán một bounding box thuộc một lớp duy nhất, object (names: {0: object}) — các annotation không chứa nhãn danh mục theo từng SKU.
  • Mật độ đối tượng cực cao: Ảnh kệ hàng từ khắp nơi trên thế giới có trung bình khoảng 147 sản phẩm được xếp sát nhau, trong đó các đối tượng thường trông tương tự hoặc thậm chí giống hệt nhau và nằm gần nhau.
  • Quy mô lớn: Hơn 110.000 SKU duy nhất và hơn 1,7 triệu bounding box được gán nhãn trong 11.743 ảnh tạo ra thách thức cho các object detector hiện đại nhất.

Cấu trúc bộ dữ liệu#

Tập dữ liệu SKU-110K được chia thành ba tập con, tất cả đều sử dụng lớp duy nhất object:

SplitẢnhMô tả
Huấn luyện8,219Ảnh và annotation dùng để huấn luyện model
Validation588Ảnh được giữ lại để đánh giá trong quá trình huấn luyện
Test2,936Ảnh dùng để đánh giá cuối cùng model đã huấn luyện

Ứng dụng#

Tập dữ liệu SKU-110K được sử dụng rộng rãi để huấn luyện và đánh giá các model deep learning trong các tác vụ phát hiện đối tượng, đặc biệt là trong những cảnh có mật độ đối tượng cao như khu vực trưng bày trên kệ bán lẻ. Các ứng dụng bao gồm:

  • Quản lý và tự động hóa hàng tồn kho bán lẻ
  • Nhận diện sản phẩm trên các nền tảng thương mại điện tử
  • Xác minh mức độ tuân thủ planogram
  • Hệ thống tự thanh toán trong cửa hàng
  • Robot gắp và phân loại trong kho

Để gán nhãn ảnh kệ hàng của riêng bạn, huấn luyện và quản lý các tập dữ liệu phát hiện đối tượng bán lẻ ngay trong trình duyệt, hãy thực hiện toàn bộ workflow với Ultralytics Platform.

YAML của bộ dữ liệu#

Tệp SKU-110K.yaml định nghĩa cấu hình tập dữ liệu — các đường dẫn tập dữ liệu, tên lớp và metadata khác. Tệp này được duy trì trong repository Ultralytics tại 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

Cách sử dụng#

Tải xuống 13,6 GB

SKU-110K được tự động tải xuống vào lần đầu tiên bạn huấn luyện và cần khoảng 13,6 GB dung lượng đĩa trống cho 11.743 ảnh. Script tải xuống cũng lấy các annotation gốc và chuyển đổi chúng sang format YOLO, quá trình này có thể mất vài phút.

Để huấn luyện model YOLO26n trên tập dữ liệu SKU-110K trong 100 epoch với kích thước ảnh là 640, bạn có thể sử dụng các đoạn code sau. Để xem danh sách đầy đủ các argument hiện có, hãy tham khảo trang Training của model.

Ví dụ huấn luyện
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)

Dữ liệu mẫu và Annotation#

Ảnh SKU-110K ghi lại các sản phẩm được xếp dày đặc trên những kệ hàng thực tế, nơi hàng chục mặt hàng gần như giống hệt nhau nằm cạnh nhau. Dưới đây là một ảnh ví dụ cùng các annotation của ảnh:

Phát hiện sản phẩm SKU-110K trên kệ hàng bán lẻ

  • Ảnh kệ hàng bán lẻ xếp dày đặc: Ảnh này minh họa một ví dụ về các đối tượng được xếp dày đặc trong bối cảnh kệ hàng bán lẻ. Các đối tượng được gán annotation bằng bounding box thuộc lớp duy nhất object.

Cách sắp xếp sản phẩm dày đặc khiến SKU-110K đặc biệt có giá trị trong việc phát triển các giải pháp thị giác máy tính tập trung vào bán lẻ có độ robust cao, vì số lượng đối tượng lớn trong mỗi ảnh đẩy các detector vượt xa những benchmark thông thường.

Trích dẫn và ghi nhận đóng góp#

Nếu sử dụng tập dữ liệu SKU-110K trong công trình nghiên cứu hoặc phát triển của mình, vui lòng trích dẫn bài báo sau:

Trích dẫn
@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}
}

Chúng tôi xin ghi nhận Eran Goldman và cộng sự đã tạo và duy trì tập dữ liệu SKU-110K như một tài nguyên có giá trị cho cộng đồng nghiên cứu thị giác máy tính. Để biết thêm thông tin về tập dữ liệu SKU-110K và các tác giả, hãy truy cập repository GitHub của tập dữ liệu SKU-110K.

FAQ#

  • Tập dữ liệu SKU-110K là một tập dữ liệu phát hiện đối tượng đơn lớp gồm 11.743 ảnh kệ hàng bán lẻ được xếp dày đặc, do Eran Goldman và cộng sự tạo ra cho bài báo CVPR 2019 của họ. Mỗi sản phẩm được gán một bounding box object, và hình ảnh bao quát hơn 110.000 đơn vị lưu kho (SKUs) duy nhất, khiến đây trở thành một benchmark mạnh để phát hiện đối tượng trong các cảnh đông đúc và xây dựng các hệ thống thị giác máy tính cho bán lẻ.

  • Không. SKU-110K là tập dữ liệu đơn lớp: mỗi sản phẩm được gán một bounding box thuộc lớp object (names: {0: object}). "110K" trong tên gọi đề cập đến số lượng đơn vị lưu kho (SKUs) duy nhất xuất hiện trong các ảnh, không phải số lượng lớp phát hiện.

  • Tập dữ liệu SKU-110K chứa 11.743 ảnh — 8.219 ảnh huấn luyện, 588 ảnh validation và 2.936 ảnh kiểm thử — cùng một lớp phát hiện duy nhất, object. Xem phần Cấu trúc tập dữ liệu và cấu hình SKU-110K.yaml để biết thêm chi tiết.

  • SKU-110K có dung lượng khoảng 13,6 GB và được tự động tải xuống vào lần đầu tiên bạn huấn luyện với data="SKU-110K.yaml" — không cần tải xuống thủ công. Để xem các tùy chọn nhỏ hơn, hãy tham khảo tổng quan về các tập dữ liệu phát hiện.

  • Huấn luyện model YOLO26 trên tập dữ liệu SKU-110K rất đơn giản. Dưới đây là ví dụ huấn luyện model YOLO26n trong 100 epoch với kích thước ảnh là 640:

    Ví dụ huấn luyện
    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)

    Để xem danh sách đầy đủ các argument hiện có, hãy tham khảo trang Training của model và mẹo huấn luyện model.

Bình luận