Ultralytics YOLO27:

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

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



شاهد: كيفية تدريب Ultralytics YOLO26 لاكتشاف كل منتج على رف متجر | SKU-110K 🛒

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

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

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

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

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

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

التطبيقات#

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

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

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

ملف 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

# ⁨تحميل نموذج⁩
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}
}

نود أن نعرب عن تقديرنا لـ 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
    
    # ⁨تحميل نموذج⁩
    model = YOLO("yolo26n.pt")  # ⁨تحميل نموذج مدرّب مسبقًا (موصى به للتدريب)⁩
    
    # ⁨تدريب النموذج⁩
    results = model.train(data="SKU-110K.yaml", epochs=100, imgsz=640)

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

التعليقات