مجموعة بيانات VOC
تُعد مجموعة بيانات PASCAL VOC (فئات الكائنات المرئية) مجموعة بيانات معروفة لاكتشاف الكائنات وتقسيمها وتصنيفها. وهي مصممة لتشجيع البحث حول مجموعة واسعة من فئات الكائنات وتستخدم بشكل شائع لتقييم نماذج رؤية الكمبيوتر. وهي مجموعة بيانات أساسية للباحثين والمطورين الذين يعملون على مهام اكتشاف الكائنات وتقسيمها وتصنيفها.
الميزات الرئيسية
- تتضمن مجموعة بيانات VOC تحديين رئيسيين: VOC2007 و VOC2012.
- تتضمن مجموعة البيانات 20 فئة من الكائنات، بما في ذلك الكائنات الشائعة مثل السيارات والدراجات والحيوانات، بالإضافة إلى فئات أكثر تحديدًا مثل القوارب والأرائك وطاولات الطعام.
- تتضمن التعليقات التوضيحية مربعات إحاطة الكائنات وتصنيفات الفئات لمهام الكشف عن الكائنات وتصنيفها، وأقنعة التجزئة لمهام التجزئة.
- توفر VOC مقاييس تقييم موحدة مثل متوسط الدقة المتوسطة (mAP) للكشف عن الكائنات وتصنيفها، مما يجعلها مناسبة لمقارنة أداء النماذج.
هيكل مجموعة البيانات
تنقسم مجموعة بيانات VOC إلى ثلاث مجموعات فرعية:
- Train: تحتوي هذه المجموعة الفرعية على صور لتدريب نماذج الكشف عن الكائنات وتقسيمها وتصنيفها.
- التحقق: تحتوي هذه المجموعة الفرعية على صور تُستخدم لأغراض التحقق أثناء تدريب النموذج.
- اختبار: تتكون هذه المجموعة الفرعية من صور تستخدم لاختبار وتقييم النماذج المدربة. تعليقات الحقيقة الأساسية لهذه المجموعة الفرعية غير متاحة للعامة، ويتم إرسال النتائج إلى خادم تقييم 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.
ultralytics/cfg/datasets/VOC.yaml
# 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 tqdm import tqdm
from ultralytics.utils.downloads import download
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
url = "https://github.com/ultralytics/assets/releases/download/v0.0.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 (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 لإنشاء هذا المورد القيم والحفاظ عليه لمجتمع رؤية الكمبيوتر. لمزيد من المعلومات حول مجموعة بيانات 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 قياس أداء النموذج وتقييمه من خلال الشروح التفصيلية والمقاييس الموحدة مثل متوسط الدقة (mAP). تُعد هذه المقاييس ضرورية لتقييم أداء نماذج اكتشاف الكائنات وتصنيفها. تضمن الصور المتنوعة والمعقدة لمجموعة البيانات تقييمًا شاملاً للنموذج عبر سيناريوهات واقعية مختلفة.
كيف يمكنني استخدام مجموعة بيانات VOC لـ التجزئة الدلالية في نماذج YOLO؟
لاستخدام مجموعة بيانات VOC لمهام التجزئة الدلالية مع نماذج YOLO، تحتاج إلى تكوين مجموعة البيانات بشكل صحيح في ملف YAML. يحدد ملف YAML المسارات والفئات اللازمة لتدريب نماذج التجزئة. تحقق من ملف تكوين YAML لمجموعة بيانات VOC في VOC.yaml لإعدادات مفصلة. لمهام التقسيم، يمكنك استخدام نموذج خاص بالتقسيم مثل yolo11n-seg.pt
بدلاً من نموذج الكشف.