Ultralytics YOLO27:
Get Started

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

Tập dữ liệu SKU-110K là tập dữ liệu phát hiện đối tượng một class gồm 11.743 ảnh kệ bán lẻ có mật độ sản phẩm dày đặc, được chia thành 8.219 ảnh huấn luyện, 588 ảnh validation và 2.936 ảnh test. Mỗi sản phẩm được gán một bounding box thuộc class duy nhất, object — tên gọi này chỉ hơn 110.000 mã hàng lưu kho duy nhất (SKU) xuất hiện trong các cảnh, chứ không phải 110.000 class phát hiện. Tập dữ liệu do Eran Goldman và cộng sự tạo cho bài báo CVPR 2019 Phát hiện chính xác trong các cảnh có mật độ dày đặc, 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 đây trở thành 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.



Xem: Cách huấn luyện Ultralytics YOLO26 để phát hiện mọi sản phẩm trên kệ bán lẻ | SKU-110K 🛒

Phát hiện sản phẩm trên kệ bán lẻ có mật độ dày đặc trong tập dữ liệu SKU-110K

Tính năng chính#

  • Phát hiện một class: Mỗi sản phẩm được gán một bounding box thuộc class duy nhất, object (names: {0: object}) — các chú giải không có nhãn danh mục riêng cho 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 xếp sát nhau; các đối tượng thường trông tương tự hoặc thậm chí giống hệt nhau và được đặt 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 trên 11.743 ảnh đặt ra thách thức cho các bộ phát hiện đối tượng tiên tiến nhất.

Cấu trúc dataset#

Tập dữ liệu SKU-110K được chia thành ba tập con, tất cả đều dùng chung class duy nhất object:

Tập dữ liệuHình ảnhMô tả
Huấn luyện8,219Ảnh và chú giải dùng để huấn luyện model
Validation588Ảnh giữ lại để đánh giá trong quá trình huấn luyện
Kiểm thử2,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 tác vụ phát hiện đối tượng, đặc biệt trong các cảnh có mật độ dày đặc như quầy 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 dạng 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ủ sơ đồ trưng bày hàng hóa
  • Hệ thống tự thanh toán tại cửa hàng
  • Robot lấy hàng 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ý tập dữ liệu phát hiện sản phẩm bán lẻ ngay trên trình duyệt, hãy thực hiện toàn bộ quy trình bằng Ultralytics Platform.

YAML của dataset#

Tệp SKU-110K.yaml định nghĩa cấu hình tập dữ liệu — đường dẫn tập dữ liệu, tên class và metadata khác. Tệp đượ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ải xuống tự động trong lần đầu 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 chú giải gốc và chuyển đổi chúng sang định dạng 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 640, bạn có thể dùng các đoạn mã sau. Để xem danh sách đầy đủ các tham số hiện có, hãy tham khảo trang Huấn luyện model.

Ví dụ huấn luyện
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)

# Huấn luyện 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 xếp dày đặc trên 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 chú giải:

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

  • Ảnh kệ bán lẻ có mật độ dày đặc: Ảnh này minh họa ví dụ về các đối tượng có mật độ dày đặc trong bối cảnh kệ hàng bán lẻ. Các đối tượng được chú giải bằng bounding box thuộc class duy nhất object.

Cách sắp xếp sản phẩm dày đặc khiến SKU-110K đặc biệt hữu ích cho 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ó độ bền vững cao, vì số lượng đối tượng lớn trong mỗi ảnh khiến các bộ phát hiện phải vượt xa những benchmark thông thường.

Trích dẫn và lời cảm ơn#

Nếu sử dụng tập dữ liệu SKU-110K trong nghiên cứu hoặc công việc phát triển, 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à những người tạo ra tập dữ liệu, hãy truy cập repository GitHub của tập dữ liệu SKU-110K.

Câu hỏi thường gặp#

  • Tập dữ liệu SKU-110K là tập dữ liệu phát hiện đối tượng một class gồm 11.743 ảnh kệ bán lẻ có mật độ sản phẩm dày đặc, do Eran Goldman và cộng sự tạo 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 gồm hơn 110.000 mã hàng lưu kho duy nhất (SKU), khiến tập dữ liệu này trở thành benchmark mạnh để phát hiện đối tượng trong 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 chỉ có một class: mỗi sản phẩm được gán một bounding box thuộc class object (names: {0: object}). “110K” trong tên gọi chỉ số mã hàng lưu kho duy nhất (SKU) xuất hiện trong các ảnh, chứ không phải số lượng class phát hiện.

  • Tập dữ liệu SKU-110K có 11.743 ảnh — 8.219 ảnh huấn luyện, 588 ảnh validation và 2.936 ảnh test — cùng một class 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 chi tiết.

  • SKU-110K có dung lượng khoảng 13.6 GB và được tải xuống tự động trong lần đầu huấn luyện bằng 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ề tập dữ liệu phát hiện.

  • Việc 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 640:

    Ví dụ huấn luyện
    from ultralytics import YOLO
    
    # Tải model
    model = YOLO("yolo26n.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
    
    # Huấn luyện model
    results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)

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

Bình luận