مجموعة بيانات PASCAL VOC#
تُعد مجموعة بيانات PASCAL VOC (فئات الأجسام المرئية) معيارًا كلاسيكيًا لـالكشف عن الأجسام، وتضم 20 فئة من الأجسام اليومية. يجمع إعداد Ultralytics VOC.yaml تقسيمي trainval لـVOC2007 وVOC2012 في مجموعة تدريب من 16,551 صورة، ويُجري التحقق على صور اختبار VOC2007 الأربع 4,952 المشروحة علنًا، وينزّل كل شيء تلقائيًا (2.8 GB) عند الاستخدام الأول.
شاهد: كيفية تدريب Ultralytics YOLO على مجموعة بيانات Pascal VOC | اكتشاف الكائنات | الرؤية الحاسوبية 🚀
أُجريت تحديات PASCAL VOC من 2005 إلى 2012، وأسهمت في تشكيل أساليب تقييم نماذج الكشف عن الأجسام: إذ يشمل المعيار مهام تصنيف الصور والكشف والتقسيم، وروّج لمقياس متوسط الدقة (mAP) بوصفه مقياس الكشف القياسي. ويستخدم إعداد Ultralytics VOC.yaml تعليقات الكشف التوضيحية، محولًا صناديق الإحاطة الأصلية بصيغة XML إلى تنسيق YOLO أثناء التنزيل.
الميزات الرئيسية#
- 20 فئة من الأجسام اليومية: شخص؛ ستة حيوانات (طائر، قط، بقرة، كلب، حصان، خروف)؛ سبع مركبات (طائرة، دراجة، قارب، حافلة، سيارة، دراجة نارية، قطار)؛ وستة أجسام داخلية (زجاجة، كرسي، طاولة طعام، نبات مزروع في أصيص، أريكة، شاشة تلفاز).
- دمج جيلين من التحديات: يجمع التدريب تقسيم trainval لـVOC2007 (5,011 صورة) مع تقسيم trainval لـVOC2012 (11,540 صورة).
- تقييم موحّد: تجعل نتائج VOC المرجعية المنشورة على مدى عقود منه نقطة مرجعية ملائمة لمقارنة نماذج الكشف.
- جاهز لـYOLO: يجلب برنامج التنزيل الأرشيفات ويحوّل التعليقات التوضيحية تلقائيًا، دون حاجة إلى إعداد يدوي.
بنية مجموعة البيانات#
يحدد إعداد Ultralytics VOC.yaml التقسيمات التالية:
| المجموعة الفرعية | الصور | المصدر |
|---|---|---|
| التدريب | 16,551 | VOC2007 trainval (5,011) + VOC2012 trainval (11,540) |
| التحقق | 4,952 | اختبار VOC2007، يُستخدم للتقييم أثناء التدريب |
| الاختبار | 4,952 | صور اختبار VOC2007 نفسها — لا يحدد الإعداد تقسيمًا منفصلًا للاحتفاظ به |
نُشرت التعليقات التوضيحية لاختبار VOC2007 علنًا بعد تحدي ذلك العام، ما يتيح استخدام هذا التقسيم كمجموعة تحقق موسومة. أما التعليقات التوضيحية لاختبار VOC2012 فما تزال محجوبة؛ ولا يمكن تقييم النتائج عليها إلا عبر خادم تقييم PASCAL الرسمي، لذا فهي غير مشمولة في هذا الإعداد.
يتخطى المحوّل التلقائي الأجسام الموسومة بـdifficult في تعليقات VOC التوضيحية الأصلية بصيغة XML؛ لذلك تختلف أعداد العينات لكل فئة قليلًا عن إحصاءات VOC الرسمية.
استكشف VOC على منصة Ultralytics لتصفح الصور مع طبقات التعليقات التوضيحية، والاطلاع على توزيع الفئات والخرائط الحرارية لصناديق الإحاطة في علامة التبويب المخططات، واستنساخ مجموعة البيانات لتدريب نموذجك الخاص على السحابة.
التطبيقات#
كان PASCAL VOC المعيار الأساسي لأبحاث الكشف عن الأجسام قبل ظهور مجموعة بيانات COCO الأكبر حجمًا: فقد نشرت كواشف مثل Faster R-CNN وSSD نتائجها الأصلية عليه، كما تتدرب نماذج Ultralytics YOLO عليه مباشرةً. وما يزال شائعًا اليوم في:
- مقارنة بُنى الكشف الجديدة بسجل طويل من النتائج المرجعية المنشورة
- التجارب السريعة والمقررات الدراسية — فالتدريب على 16,551 صورة يستغرق وقتًا أقل بكثير من التدريب على COCO
- دراسات التعلّم بالنقل على مجموعة مدمجة ومفهومة جيدًا من الفئات اليومية
ملف YAML لمجموعة البيانات#
يحدد الملف VOC.yaml إعداد مجموعة البيانات، بما في ذلك مساراتها وأسماء الفئات العشرين والبرنامج النصي للتنزيل والتحويل التلقائي. ويُصان الملف في مستودع Ultralytics على https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# PASCAL VOC dataset https://www.robots.ox.ac.uk/~vgg/projects/pascal/VOC by University of Oxford
# 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
with open(path / f"VOC{year}/Annotations/{image_id}.xml") as in_file, open(lb_path, "w", encoding="utf-8") as out_file:
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, 5011 images
f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip", # 438MB, 4952 images
f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip", # 1.95GB, 17125 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الاستخدام#
يُنزل VOC تلقائيًا عند بدء التدريب للمرة الأولى — ثلاثة أرشيفات يبلغ مجموع حجمها 2.8 GB — ويتطلب نحو 6 GB من المساحة الحرة على القرص أثناء فك الضغط والتحويل.
لتدريب نموذج YOLO26n على مجموعة بيانات VOC لمدة 100 حقبة وبحجم صورة 640، يمكنك استخدام مقتطفات التعليمات البرمجية التالية. للاطلاع على قائمة شاملة بالوسائط المتاحة، راجع صفحة تدريب النموذج.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n.pt") # تحميل نموذج مدرّب مسبقًا (موصى به للتدريب)
# درّب النموذج - ستُنزل مجموعة البيانات تلقائيًا عند التشغيل الأول
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)صور وتعليقات توضيحية نموذجية#
تعرض الصورة أدناه دفعة تدريب مُركّبة من مجموعة بيانات VOC. يجمع التركيب عدة صور في عينة تدريب واحدة، ما يزيد تنوع الكائنات والمقاييس وسياقات المشاهد التي يراها النموذج في كل دفعة — راجع دليل زيادة بيانات YOLO للاطلاع على التفاصيل.

الاستشهادات والشكر والتقدير#
إذا استخدمت مجموعة بيانات VOC في أبحاثك أو أعمال التطوير، فيُرجى الاستشهاد بالورقة البحثية التالية:
@article{everingham2010pascal,
author={Everingham, Mark and Van Gool, Luc and Williams, Christopher K. I. and Winn, John and Zisserman, Andrew},
journal={International Journal of Computer Vision},
title={The Pascal Visual Object Classes (VOC) Challenge},
year={2010},
volume={88},
number={2},
pages={303-338},
doi={10.1007/s11263-009-0275-4}}نود أن نشكر اتحاد PASCAL VOC على إنشاء هذا المورد القيّم وصيانته لصالح مجتمع الرؤية الحاسوبية. لمزيد من المعلومات حول مجموعة بيانات VOC والقائمين عليها، تفضل بزيارة موقع مجموعة بيانات PASCAL VOC.
الأسئلة الشائعة#
تُستخدم PASCAL VOC لتدريب نماذج اكتشاف الكائنات وقياس أدائها على 20 فئة من الكائنات اليومية، مثل الأشخاص والسيارات والكلاب والكراسي. وبفضل حجمها الصغير وتسمياتها الكاملة ووجود خطوط أساس منشورة على مدى سنوات، فهي خيار شائع للتحقق من البنى الجديدة، وإجراء تجارب المقررات الدراسية، ودراسات التعلّم بالنقل السريعة.
يحتوي إعداد Ultralytics لـ VOC على 21,503 صورة: 16,551 للتدريب (مجموعتا VOC2007 trainval وVOC2012 trainval) و4,952 للتحقق (مجموعة اختبار VOC2007). وتشترك جميع التقسيمات في الفئات العشرين نفسها. راجع بنية مجموعة البيانات للاطلاع على التفاصيل الكاملة.
يُنزل VOC تلقائيًا عند التدريب باستخدام
data="VOC.yaml"للمرة الأولى — ولا حاجة إلى أي خطوات يدوية. يجلب البرنامج النصي ثلاثة أرشيفات (2.8 GB) من أصول إصدارات Ultralytics على GitHub، ويحوّل التعليقات التوضيحية بتنسيق XML إلى تنسيق YOLO.درّب نموذج YOLO26n على VOC لمدة 100 حقبة وبحجم صورة 640:
مثال على التدريبfrom ultralytics import YOLO # تحميل نموذج model = YOLO("yolo26n.pt") # تحميل نموذج مدرّب مسبقًا (موصى به للتدريب) # تدريب النموذج results = model.train(data="VOC.yaml", epochs=100, imgsz=640)للاطلاع على الإعدادات التفصيلية، راجع صفحة التدريب ونصائح تدريب النماذج.
يشترك التحديان في الفئات العشرين نفسها، لكنهما يقدّمان صورًا مختلفة. توفر VOC2007 عدد 5,011 صورة trainval، إضافة إلى مجموعة اختبار تضم 4,952 صورة وتعليقاتها التوضيحية متاحة للعامة؛ أما VOC2012 فتوفّر 11,540 صورة trainval، بينما تُحجب التعليقات التوضيحية لمجموعة الاختبار ولا تُقيّم إلا عبر خادم التقييم الرسمي. يدمج
VOC.yamlمن Ultralytics مجموعتي trainval للتدريب، ويجري التحقق باستخدام مجموعة اختبار VOC2007.مجموعة VOC أصغر وأبسط: تضم 20 فئة و21,503 صورة، مقارنةً بـ 80 فئة و330K صورة في COCO. تُعرض نتائج VOC تقليديًا على شكل mAP عند 0.5 IoU، بينما تحسب COCO متوسط mAP عبر عتبات IoU من 0.5 إلى 0.95. ويستغرق التدريب على VOC وقتًا أقل بكثير، ما يجعلها مناسبة للتجارب السريعة؛ أما مجموعة بيانات COCO فهي المعيار لقياس الأداء على نطاق الإنتاج.
لا —
VOC.yamlإعداد مخصص للاكتشاف فقط: يستخرج المحوّل مربعات الإحاطة من التعليقات التوضيحية بتنسيق XML في VOC، ولا يحوّل أقنعة التجزئة المضمّنة في المعيار الأصلي. لتدريب نموذج تجزئة المثيلات، استخدم مجموعة بيانات ذات تسميات مضلّعية مثل COCO-Seg مع نموذجyolo26n-seg.pt.



