انتقل إلى المحتوى

مجموعة بيانات المركبات العضوية المتطايرة

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

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

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

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

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

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

التطبيقات

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

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

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

ultralytics/cfg/datasets/VOC.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 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: ../datasets/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 tqdm import tqdm
  from ultralytics.utils.downloads import download
  from pathlib import Path

  def convert_label(path, lb_path, year, image_id):
      def convert_box(size, box):
          dw, dh = 1. / size[0], 1. / 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
  url = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/'
  urls = [f'{url}VOCtrainval_06-Nov-2007.zip',  # 446MB, 5012 images
          f'{url}VOCtest_06-Nov-2007.zip',  # 438MB, 4953 images
          f'{url}VOCtrainval_11-May-2012.zip']  # 1.95GB, 17126 images
  download(urls, dir=dir / 'images', curl=True, threads=3, exist_ok=True)  # download and unzip over existing paths (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

استخدام

لتدريب أ YOLOv8n نموذج على مجموعة بيانات المركبات العضوية المتطايرة ل 100 حقبة بحجم صورة 640 ، يمكنك استخدام مقتطفات التعليمات البرمجية التالية. للحصول على قائمة شاملة بالوسيطات المتاحة، ارجع إلى صفحة نموذج التدريب .

مثال القطار

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.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=yolov8n.pt epochs=100 imgsz=640

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

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

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

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

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

الاستشهادات والشكر

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

@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 لإنشاء وصيانة هذا المورد القيم لمجتمع رؤية الكمبيوتر. لمزيد من المعلومات حول مجموعة بيانات المركبات العضوية المتطايرة ومنشئيها ، قم بزيارة موقع مجموعة بيانات PASCAL VOC.



تم إنشاؤه في 2023-11-12, اخر تحديث 2024-01-14
المؤلفون: جلين جوشر (4) ، يضحك س (1)

التعليقات