تخطي إلى المحتوى

مجموعة بيانات VOC

إن مجموعة بيانات PASCAL VOC (فئات الكائنات المرئية) هي مجموعة بيانات معروفة للكشف عن الكائنات وتجزئتها وتصنيفها. وهي مصممة لتشجيع البحث في مجموعة واسعة من فئات الكائنات وتستخدم عادةً لقياس نماذج الرؤية الحاسوبية. إنها مجموعة بيانات أساسية للباحثين والمطورين الذين يعملون على مهام اكتشاف الكائنات وتجزئتها وتصنيفها.

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

  • تتضمن مجموعة بيانات VOC تحديين رئيسيين: VOC2007 و VOC2012.
  • تتضمن مجموعة البيانات 20 فئة من الكائنات، بما في ذلك الكائنات الشائعة مثل السيارات والدراجات والحيوانات، بالإضافة إلى فئات أكثر تحديدًا مثل القوارب والأرائك وطاولات الطعام.
  • تتضمن التعليقات التوضيحية مربعات إحاطة الكائنات وتصنيفات الفئات لمهام الكشف عن الكائنات وتصنيفها، وأقنعة التجزئة لمهام التجزئة.
  • توفر مجموعة بيانات VOC مقاييس تقييم موحدة مثل متوسط الدقة (mAP) للكشف عن الأجسام وتصنيفها، مما يجعلها مناسبة لمقارنة أداء النماذج.

هيكل مجموعة البيانات

تنقسم مجموعة بيانات VOC إلى ثلاث مجموعات فرعية:

  1. Train: تحتوي هذه المجموعة الفرعية على صور لتدريب نماذج الكشف عن الكائنات وتقسيمها وتصنيفها.
  2. التحقق: تحتوي هذه المجموعة الفرعية على صور تُستخدم لأغراض التحقق أثناء تدريب النموذج.
  3. Test: تتكون هذه المجموعة الفرعية من صور تستخدم لاختبار وتقييم النماذج المدربة. الشروح الأرضية الحقيقية لهذه المجموعة الفرعية غير متاحة للعامة، ويتم إرسال النتائج إلى خادم تقييم PASCAL VOC لتقييم الأداء.

التطبيقات

تُستخدم مجموعة بيانات VOC على نطاق واسع لتدريب وتقييم نماذج التعلم العميق في الكشف عن الكائنات (مثل Ultralytics YOLO و Faster R-CNN و SSD)، و تقسيم المثيلات (مثل Mask R-CNN)، و تصنيف الصور. إن المجموعة المتنوعة من فئات الكائنات في مجموعة البيانات، والعدد الكبير من الصور المشروحة، ومقاييس التقييم الموحدة تجعلها موردًا أساسيًا لباحثي رؤية الكمبيوتر والممارسين.

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

يستخدم ملف YAML (وهي لغة ترميز أخرى) لتحديد تكوين مجموعة البيانات. يحتوي على معلومات حول مسارات مجموعة البيانات وفئاتها ومعلومات أخرى ذات صلة. في حالة مجموعة بيانات VOC، فإن VOC.yaml يتم الاحتفاظ بالملف في https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.

VOCyaml

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC by University of Oxford
# Documentation: # Documentation: https://docs.ultralytics.com/datasets/detect/voc/
# Example usage: yolo train data=VOC.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── VOC ← downloads here (2.8 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: VOC
train: # train images (relative to 'path') 16551 images
  - images/train2012
  - images/train2007
  - images/val2012
  - images/val2007
val: # val images (relative to 'path') 4952 images
  - images/test2007
test: # test images (optional)
  - images/test2007

# Classes
names:
  0: aeroplane
  1: bicycle
  2: bird
  3: boat
  4: bottle
  5: bus
  6: car
  7: cat
  8: chair
  9: cow
  10: diningtable
  11: dog
  12: horse
  13: motorbike
  14: person
  15: pottedplant
  16: sheep
  17: sofa
  18: train
  19: tvmonitor

# Download script/URL (optional) ---------------------------------------------------------------------------------------
download: |
  import xml.etree.ElementTree as ET
  from pathlib import Path

  from ultralytics.utils.downloads import download
  from ultralytics.utils import ASSETS_URL, TQDM

  def convert_label(path, lb_path, year, image_id):
      """Converts XML annotations from VOC format to YOLO format by extracting bounding boxes and class IDs."""

      def convert_box(size, box):
          dw, dh = 1.0 / size[0], 1.0 / size[1]
          x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2]
          return x * dw, y * dh, w * dw, h * dh

      in_file = open(path / f"VOC{year}/Annotations/{image_id}.xml")
      out_file = open(lb_path, "w")
      tree = ET.parse(in_file)
      root = tree.getroot()
      size = root.find("size")
      w = int(size.find("width").text)
      h = int(size.find("height").text)

      names = list(yaml["names"].values())  # names list
      for obj in root.iter("object"):
          cls = obj.find("name").text
          if cls in names and int(obj.find("difficult").text) != 1:
              xmlbox = obj.find("bndbox")
              bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ("xmin", "xmax", "ymin", "ymax")])
              cls_id = names.index(cls)  # class id
              out_file.write(" ".join(str(a) for a in (cls_id, *bb)) + "\n")


  # Download
  dir = Path(yaml["path"])  # dataset root dir
  urls = [
      f"{ASSETS_URL}/VOCtrainval_06-Nov-2007.zip",  # 446MB, 5012 images
      f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip",  # 438MB, 4953 images
      f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip",  # 1.95GB, 17126 images
  ]
  download(urls, dir=dir / "images", threads=3, exist_ok=True)  # download and unzip over existing (required)

  # Convert
  path = dir / "images/VOCdevkit"
  for year, image_set in ("2012", "train"), ("2012", "val"), ("2007", "train"), ("2007", "val"), ("2007", "test"):
      imgs_path = dir / "images" / f"{image_set}{year}"
      lbs_path = dir / "labels" / f"{image_set}{year}"
      imgs_path.mkdir(exist_ok=True, parents=True)
      lbs_path.mkdir(exist_ok=True, parents=True)

      with open(path / f"VOC{year}/ImageSets/Main/{image_set}.txt") as f:
          image_ids = f.read().strip().split()
      for id in TQDM(image_ids, desc=f"{image_set}{year}"):
          f = path / f"VOC{year}/JPEGImages/{id}.jpg"  # old img path
          lb_path = (lbs_path / f.name).with_suffix(".txt")  # new label path
          f.rename(imgs_path / f.name)  # move image
          convert_label(path, lb_path, year, id)  # convert labels to YOLO format

الاستخدام

لتدريب نموذج YOLO11n على مجموعة بيانات VOC لعدد 100 حقبة (epoch) بحجم صورة 640، يمكنك استخدام مقتطفات التعليمات البرمجية التالية. للحصول على قائمة شاملة بالحجج المتاحة، ارجع إلى صفحة تدريب النموذج.

مثال على التدريب

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VOC.yaml model=yolo11n.pt epochs=100 imgsz=640

عينات من الصور والشروحات التوضيحية

تحتوي مجموعة بيانات VOC على مجموعة متنوعة من الصور مع فئات كائنات مختلفة ومشاهد معقدة. فيما يلي بعض الأمثلة على الصور من مجموعة البيانات، جنبًا إلى جنب مع التعليقات التوضيحية المقابلة لها:

نموذج صورة من مجموعة البيانات

  • صورة مجمعة: توضح هذه الصورة دفعة تدريبية تتكون من صور مجموعة بيانات مجمعة. التجميع هو أسلوب يستخدم أثناء التدريب يجمع بين صور متعددة في صورة واحدة لزيادة تنوع الكائنات والمشاهد داخل كل دفعة تدريبية. يساعد هذا في تحسين قدرة النموذج على التعميم على أحجام الكائنات ونسب العرض إلى الارتفاع والسياقات المختلفة.

يعرض المثال تنوع وتعقيد الصور في مجموعة بيانات VOC وفوائد استخدام الفسيفساء أثناء عملية التدريب.

الاقتباسات والإقرارات

إذا كنت تستخدم مجموعة بيانات VOC في بحثك أو عملك التطويري، فيرجى الاستشهاد بالورقة التالية:

@misc{everingham2010pascal,
      title={The PASCAL Visual Object Classes (VOC) Challenge},
      author={Mark Everingham and Luc Van Gool and Christopher K. I. Williams and John Winn and Andrew Zisserman},
      year={2010},
      eprint={0909.5206},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

نود أن نتقدم بالشكر إلى PASCAL VOC Consortium لإنشاء هذا المورد القيم والحفاظ عليه لمجتمع رؤية الكمبيوتر. لمزيد من المعلومات حول مجموعة بيانات VOC ومنشئيها، تفضل بزيارة موقع مجموعة بيانات PASCAL VOC.

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

ما هي مجموعة بيانات PASCAL VOC ولماذا هي مهمة لمهام رؤية الحاسوب؟

تُعد مجموعة بيانات PASCAL VOC (فئات الكائنات المرئية) معيارًا مشهورًا لاكتشاف الكائنات وتجزئتها وتصنيفها في مجال الرؤية الحاسوبية. وهي تتضمن شروحًا شاملة مثل المربعات المحيطة، وتسميات الفئات، وأقنعة التجزئة عبر 20 فئة مختلفة من فئات الكائنات. يستخدمه الباحثون على نطاق واسع لتقييم أداء النماذج مثل Faster R-CNN و YOLO و Mask R-CNN نظرًا لمقاييس التقييم الموحدة مثل متوسط متوسط الدقةmAP).

كيف يمكنني تدريب نموذج YOLO11 باستخدام مجموعة بيانات VOC؟

لتدريب نموذج YOLO11 مع مجموعة بيانات VOC، أنت بحاجة إلى تكوين مجموعة البيانات في ملف YAML. إليك مثال لبدء تدريب نموذج YOLO11n لعدد 100 حقبة (epoch) بحجم صورة 640:

مثال على التدريب

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VOC.yaml model=yolo11n.pt epochs=100 imgsz=640

ما هي التحديات الأساسية المتضمنة في مجموعة بيانات VOC؟

تتضمن مجموعة بيانات VOC تحديين رئيسيين: VOC2007 و VOC2012. تختبر هذه التحديات الكشف عن الكائنات وتقسيمها وتصنيفها عبر 20 فئة كائنات متنوعة. يتم شرح كل صورة بدقة باستخدام مربعات إحاطة وتسميات الفئات وأقنعة التقسيم. توفر التحديات مقاييس موحدة مثل mAP، مما يسهل مقارنة وقياس نماذج رؤية الكمبيوتر المختلفة.

كيف يعزز مجموعة بيانات PASCAL VOC عملية قياس وتقييم النماذج؟

تعزز مجموعة بيانات PASCAL VOC عملية القياس والتقييم المعياري للنماذج من خلال الشروحات التفصيلية والمقاييس الموحدة مثل متوسط الدقة Precision (mAP). تعتبر هذه المقاييس ضرورية لتقييم أداء نماذج الكشف عن الأجسام وتصنيفها. تضمن الصور المتنوعة والمعقدة في مجموعة البيانات تقييمًا شاملاً للنموذج عبر سيناريوهات واقعية مختلفة.

كيف يمكنني استخدام مجموعة بيانات VOC لـ semantic segmentation في نماذج YOLO؟

لاستخدام مجموعة بيانات VOC لمهام التقسيم الدلالي مع نماذج YOLO، تحتاج إلى تكوين مجموعة البيانات بشكل صحيح في ملف YAML. يحدد ملف YAML المسارات والفئات اللازمة لتدريب نماذج التقسيم. تحقق من ملف تكوين YAML لمجموعة بيانات VOC في VOC.yaml لإعدادات مفصلة. لمهام التقسيم، يمكنك استخدام نموذج خاص بالتقسيم مثل yolo11n-seg.pt بدلاً من نموذج الكشف.



📅 تم الإنشاء منذ سنتين ✏️ تم التحديث منذ 8 أشهر
glenn-jocherUltralyticsAssistantMatthewNoyceRizwanMunawar

تعليقات