مجموعة بيانات PASCAL VOC#
تُعد مجموعة بيانات PASCAL VOC (VOC) معيارًا مرجعيًا كلاسيكيًا لـكشف الكائنات، وتضم 20 فئة من الكائنات اليومية. يدمج إعداد Ultralytics VOC.yaml مجموعتي التدريب والتحقق VOC2007 وVOC2012 في مجموعة تدريب تضم 16,551 صورة، ويُجري التحقق باستخدام صور اختبار VOC2007 البالغ عددها 4,952 صورة والموسومة علنًا، كما ينزّل كل شيء تلقائيًا (2.8 GB) عند الاستخدام لأول مرة.
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 trainval (5,011 صورة) مع مجموعة VOC2012 trainval (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 لتصفح الصور مع طبقات التعليقات التوضيحية الخاصة بها، وعرض توزيع الفئات وخرائط كثافة مربعات الإحاطة في علامة التبويب Charts، واستنساخها لتدريب نموذجك الخاص في السحابة.
التطبيقات#
كان 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
# 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)الصور والتعليقات التوضيحية النموذجية#
تُظهر الصورة أدناه دفعة تدريب مكوّنة من فسيفساء من مجموعة بيانات 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 فئة من الكائنات اليومية، مثل الشخص والسيارة والكلب والكرسي. وبفضل صغر حجمها، واكتمال وسمها، ودعمها بخطوط أساس منشورة على مدى سنوات، فهي خيار شائع للتحقق من البنى الجديدة، وإجراء تجارب المقررات الدراسية، وتنفيذ دراسات التعلّم بالنقل السريعة.
يحتوي إعداد VOC في Ultralytics على 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 # 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)للاطلاع على الإعدادات التفصيلية، راجع صفحة التدريب ونصائح تدريب النموذج.
تشترك التحدياتان في الفئات العشرين نفسها، لكنهما تسهمان بصور مختلفة. توفر VOC2007 عدد 5,011 صورة trainval بالإضافة إلى مجموعة اختبار تضم 4,952 صورة، وتعليقاتها التوضيحية متاحة للعامة؛ بينما توفر VOC2012 عدد 11,540 صورة trainval، وتظل تعليقات اختبارها التوضيحية محجوبة ولا تُقيّم إلا بواسطة خادم التقييم الرسمي. يدمج
VOC.yamlفي Ultralytics مجموعتي trainval للتدريب، ويجري التحقق على اختبار VOC2007.إن VOC أصغر وأبسط: فهي تضم 20 فئة و21,503 صورة، مقارنةً بـ 80 فئة و330K صورة في COCO. تُعرض نتائج VOC تقليديًا بصيغة mAP عند قيمة IoU تبلغ 0.5، بينما يحسب COCO متوسط mAP عبر عتبات IoU من 0.5 إلى 0.95. ويتدرب VOC بسرعة أكبر بكثير ويناسب التجارب السريعة؛ أما مجموعة بيانات COCO فهي المعيار المرجعي لقياس الأداء على نطاق الإنتاج.
لا — إن
VOC.yamlإعداد مخصص للكشف فقط: إذ يستخرج المحوّل مربعات الإحاطة من تعليقات VOC XML التوضيحية، ولا يحوّل أقنعة التجزئة المضمّنة في المعيار المرجعي الأصلي. لتدريب نموذج تجزئة المثيلات، استخدم مجموعة بيانات ذات تسميات متعددة الأضلاع مثل COCO-Seg مع نموذجyolo26n-seg.pt.



