مجموعة بيانات PASCAL VOC#
مجموعة بيانات PASCAL VOC (فئات الكائنات المرئية) هي معيار تقليدي لـ اكتشاف الكائنات يضم 20 فئة من فئات الكائنات اليومية. يدمج تكوين Ultralytics VOC.yaml مجموعتي التدريب والتحقق VOC2007 و VOC2012 في مجموعة تدريب تضم 16,551 صورة، ويجري التحقق من صحتها على 4,952 صورة اختبار VOC2007 معلنة للعامة، ويقوم بتنزيل كل شيء تلقائياً (2.8 جيجابايت) عند الاستخدام الأول.
Watch: How to Train Ultralytics YOLO on the Pascal VOC Dataset | Object Detection | Computer Vision 🚀
أقيمت مسابقات PASCAL VOC في الفترة من 2005 إلى 2012 وشكلت الطريقة التي يتم بها تقييم نماذج اكتشاف الكائنات: يغطي المعيار مهام تصنيف الصور، والاكتشاف، والتجزئة، وشاع استخدام متوسط الدقة (mAP) كمقياس قياسي للاكتشاف. يستخدم تكوين Ultralytics VOC.yaml تعليقات الاكتشاف التوضيحية، حيث يحول مربعات الإحاطة الأصلية بصيغة XML إلى تنسيق YOLO أثناء التنزيل.
الميزات الرئيسية#
- 20 فئة من الكائنات اليومية: شخص؛ ستة حيوانات (طائر، قطة، بقرة، كلب، حصان، خروف)؛ سبع مركبات (طائرة، دراجة، قارب، حافلة، سيارة، دراجة نارية، قطار)؛ وستة كائنات داخلية (زجاجة، كرسي، طاولة طعام، نبات محفوظ في أصيص، أريكة، شاشة تلفاز).
- دمج جيلين من التحديات: يدمج التدريب مجموعة تدريب وتحقق VOC2007 (5,011 صورة) مع مجموعة تدريب وتحقق VOC2012 (11,540 صورة).
- التقييم الموحد: تجعل عقود من خطوط الأساس VOC المنشورة منها نقطة مرجعية مريحة لمقارنة نماذج الاكتشاف.
- جاهزة لـ YOLO: يقوم برنامج نصي للتنزيل بجلب الأرشيفات وتحويل التعليقات التوضيحية تلقائياً — دون الحاجة إلى تحضير يدوي.
هيكل مجموعة البيانات#
يحدد تكوين Ultralytics VOC.yaml التقسيمات التالية:
| التقسيم (Split) | الصور | المصدر |
|---|---|---|
| التدريب | 16,551 | VOC2007 trainval (5,011) + VOC2012 trainval (11,540) |
| التحقق | 4,952 | اختبار VOC2007، المُستخدم لـ التقييم أثناء التدريب |
| الاختبار (Test) | 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 تكوين مجموعة البيانات — مسارات مجموعة البيانات، وأسماء الفئات الـ 20، ونيابةً عن سكربت التنزيل والتحويل التلقائي. تتم صيانته في مستودع 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 جيجابايت — ويحتاج إلى حوالي 6 جيجابايت من مساحة القرص الفارغة أثناء الاستخراج والتحويل.
لتدريب نموذج YOLO26n على مجموعة بيانات VOC لمدة 100 حقبة تدريبية بحجم صورة يبلغ 640، يمكنك استخدام مقتطفات الكود التالية. للحصول على قائمة شاملة بالوسائط المتاحة، راجع صفحة التدريب للنموذج.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model - dataset will auto-download on first run
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)صور وشروحات توضيحية عينة#
توضح الصورة أدناه دفعة تدريبية مجمعة (mosaic) من مجموعة بيانات VOC. يجمع التجميع (Mosaicing) بين عدة صور في عينة تدريب واحدة، مما يزيد من تنوع الكائنات، والمقاييس، وسياقات المشهد التي يراها النموذج في كل دفعة — راجع دليل تعزيز بيانات 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). تتشارك جميع التقسيمات نفس الفئات الـ 20. راجع هيكل مجموعة البيانات للاطلاع على التفاصيل الكاملة.
يتم تنزيل VOC تلقائياً في المرة الأولى التي تتدرب فيها باستخدام
data="VOC.yaml"— فلا توجد حاجة لأي خطوات يدوية. يقوم السكريبت جلب ثلاثة أرشيفات (2.8 جيجابايت) من أصول إصدارات Ultralytics GitHub ويحول تعليقات XML التوضيحية إلى تنسيق YOLO.تدريب نموذج YOLO26n على VOC لمدة 100 حقبة بحجم صورة 640:
مثال على التدريبfrom ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training) # Train the model results = model.train(data="VOC.yaml", epochs=100, imgsz=640)للحصول على تكوينات مفصلة، راجع صفحة Training و model training tips.
تتشارك كلتا المسابقتين نفس الفئات الـ 20 ولكنها تساهم بصور مختلفة. توفر VOC2007 5,011 صورة trainval بالإضافة إلى مجموعة اختبار مكونة من 4,952 صورة تعليقاتها التوضيحية عامة؛ بينما توفر VOC2012 11,540 صورة trainval، في حين يتم حجب تعليقات اختبارها وتقييمها فقط بواسطة خادم التقييم الرسمي. يقوم تكوين Ultralytics
VOC.yamlبدمج مجموعتي trainval معاً للتدريب والتحقق من صحة النتائج على اختبار VOC2007.VOC أصغر وأبسط: 20 فئة و 21,503 صورة مقارنة بـ 80 فئة و 330 ألف صورة في COCO. يُبلغ عن نتائج VOC تقليدياً كـ mAP عند عتبة تقاطع على اتحاد (IoU) تبلغ 0.5، بينما تحسب COCO متوسط mAP عبر عتبات IoU من 0.5 إلى 0.95. تتدرب VOC بشكل أسرع بكثير وتناسب التجارب السريعة؛ وتعتبر مجموعة بيانات COCO المعيار القياسي لقياس الأداء على نطاق الإنتاج.
لا —
VOC.yamlهو تكوين مخصص للاكتشاف فقط: يقوم محوله استخراج مربعات الإحاطة من تعليقات VOC XML، ولا يتم تحويل أقنعة التجزئة المضمنة في المعيار الأصلي. لتدريب نموذج تجزئة المثيلات، استخدم مجموعة بيانات ذات تسميات مضلعة مثل COCO-Seg مع نموذجyolo26n-seg.pt.



