Ultralytics YOLO27:

مجموعة بيانات SKU-110K#

مجموعة بيانات SKU-110K هي مجموعة بيانات أحادية الفئة لـاكتشاف الأجسام، وتتكون من 11,743 صورة لرفوف متاجر مكتظة بالمنتجات، ومقسمة إلى 8,219 صورة للتدريب، و588 صورة للتحقق، و2,936 صورة للاختبار. تم وسم كل منتج بمربع إحاطة واحد ضمن فئة واحدة، object — ويشير الاسم إلى أكثر من 110,000 وحدة حفظ مخزون فريدة (SKUs) ظاهرة عبر المشاهد، وليس إلى 110,000 فئة لاكتشاف الأجسام. أنشأها Eran Goldman وآخرون لورقة CVPR 2019 بعنوان Precise Detection in Densely Packed Scenes، وتضم أكثر من 1.7 مليون منتج موسوم — بمتوسط يقارب 147 منتجًا لكل صورة — مما يجعلها معيارًا صعبًا لنماذج الرؤية الحاسوبية في بيئات البيع بالتجزئة المزدحمة.



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

اكتشاف المنتجات في رفوف متاجر مكتظة باستخدام مجموعة بيانات SKU-110K

الميزات الرئيسية#

  • اكتشاف أحادي الفئة: تم وسم كل منتج بمربع إحاطة واحد ضمن فئة واحدة، object (names: {0: object}) — ولا تتضمن التعليقات التوضيحية تسميات فئات خاصة بكل وحدة حفظ مخزون.
  • كثافة الأجسام العالية للغاية: يبلغ متوسط صور رفوف المتاجر من مختلف أنحاء العالم نحو 147 منتجًا متراصًا بإحكام في كل صورة، مع أجسام تبدو غالبًا متشابهة أو متطابقة تقريبًا وموضوعة على مسافات متقاربة.
  • النطاق الكبير: يمثل أكثر من 110,000 وحدة حفظ مخزون فريدة وأكثر من 1.7 مليون مربع إحاطة موسوم موزعة على 11,743 صورة تحديًا لكاشفات الأجسام المتقدمة.

بنية مجموعة البيانات#

تنقسم مجموعة بيانات SKU-110K إلى ثلاث مجموعات فرعية، تشترك جميعها في الفئة الوحيدة object:

التقسيمالصورالوصف
التدريب8,219الصور والتعليقات التوضيحية لتدريب النموذج
التحقق588الصور المحجوزة لـالتقييم أثناء التدريب
الاختبار2,936الصور المستخدمة للتقييم النهائي للنموذج المدرَّب

التطبيقات#

تُستخدم مجموعة بيانات SKU-110K على نطاق واسع لتدريب نماذج التعلم العميق وتقييمها في مهام اكتشاف الأجسام، ولا سيما في المشاهد المكتظة بالمنتجات مثل عروض رفوف المتاجر. وتشمل تطبيقاتها:

  • إدارة مخزون التجزئة وأتمتتها
  • التعرف على المنتجات في منصات التجارة الإلكترونية
  • التحقق من مطابقة مخطط عرض المنتجات
  • أنظمة الدفع الذاتي في المتاجر
  • الالتقاط والفرز الآليان في المستودعات

لوضع تعليقات توضيحية على صور الرفوف الخاصة بك، وتدريب مجموعات بيانات اكتشاف منتجات التجزئة وإدارتها في متصفحك، شغّل سير العمل الكامل باستخدام Ultralytics Platform.

YAML مجموعة البيانات#

يعرّف الملف SKU-110K.yaml إعدادات مجموعة البيانات — مسارات مجموعة البيانات، وأسماء الفئات، وبيانات التعريف الأخرى. ويُصان في مستودع Ultralytics على الرابط 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

الاستخدام#

تنزيل بحجم 13.6 GB

يتم تنزيل SKU-110K تلقائيًا عند التدريب لأول مرة، ويتطلب نحو 13.6 GB من مساحة القرص الحرة لصورها البالغ عددها 11,743 صورة. كما يجلب نص التنزيل التعليقات التوضيحية الأصلية ويحوّلها إلى تنسيق YOLO، وقد تستغرق هذه العملية بضع دقائق.

لتدريب نموذج YOLO26n على مجموعة بيانات SKU-110K لمدة 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)

بيانات العينة والتعليقات التوضيحية#

تلتقط صور 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}
}

نود أن نعرب عن تقديرنا لـ Eran Goldman وآخرين لإنشائهم مجموعة بيانات SKU-110K وصيانتها بوصفها موردًا قيّمًا لمجتمع أبحاث الرؤية الحاسوبية. لمزيد من المعلومات حول مجموعة بيانات SKU-110K ومنشئيها، تفضل بزيارة مستودع مجموعة بيانات SKU-110K على GitHub.

الأسئلة الشائعة#

  • مجموعة بيانات SKU-110K هي مجموعة بيانات أحادية الفئة لاكتشاف الأجسام، وتتكون من 11,743 صورة لرفوف متاجر مكتظة بالمنتجات، وقد أنشأها Eran Goldman وآخرون لورقتهم المقدمة في CVPR 2019. تم وسم كل منتج بمربع إحاطة واحد من الفئة object، وتمتد الصور عبر أكثر من 110,000 وحدة حفظ مخزون فريدة (SKUs)، مما يجعلها معيارًا قويًا لاكتشاف الأجسام في المشاهد المزدحمة وبناء أنظمة الرؤية الحاسوبية لقطاع التجزئة.

  • لا. إن SKU-110K أحادية الفئة؛ فقد وُسِم كل منتج بمربع إحاطة واحد ضمن الفئة object (names: {0: object}). ويشير الرقم "110K" في الاسم إلى عدد وحدات حفظ المخزون الفريدة (SKUs) الظاهرة عبر الصور، وليس إلى عدد فئات اكتشاف الأجسام.

  • تحتوي مجموعة بيانات SKU-110K على 11,743 صورة — 8,219 للتدريب، و588 للتحقق، و2,936 للاختبار — وفئة واحدة لاكتشاف الأجسام، object. راجع قسم بنية مجموعة البيانات وإعداد SKU-110K.yaml لمزيد من التفاصيل.

  • يبلغ حجم SKU-110K نحو 13.6 GB، ويتم تنزيلها تلقائيًا عند التدريب لأول مرة باستخدام data="SKU-110K.yaml" — ولا يلزم تنزيلها يدويًا. لاستعراض خيارات أصغر، راجع نظرة عامة على مجموعات بيانات الاكتشاف.

  • يُعد تدريب نموذج YOLO26 على مجموعة بيانات 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)

    للحصول على قائمة شاملة بالوسائط المتاحة، راجع صفحة تدريب النموذج ونصائح تدريب النموذج.

التعليقات