مجموعة بيانات VOC
تُعد مجموعة بيانات PASCAL VOC (فئات الكائنات المرئية) مجموعة بيانات معروفة للكشف عن الكائنات وتقسيمها وتصنيفها. صُممت هذه المجموعة لتشجيع البحث في مجموعة واسعة من فئات الكائنات، وتُستخدم بشكل شائع لقياس أداء نماذج الرؤية الحاسوبية. وهي مجموعة بيانات أساسية للباحثين والمطورين الذين يعملون على مهام الكشف عن الكائنات وتقسيمها وتصنيفها.
Watch: How to Train Ultralytics YOLO26 on the Pascal VOC Dataset | Object Detection 🚀
الميزات الرئيسية
- تتضمن مجموعة بيانات VOC تحديين رئيسيين: VOC2007 وVOC2012.
- تتكون مجموعة البيانات من 20 فئة من الكائنات، بما في ذلك الكائنات الشائعة مثل السيارات والدراجات والحيوانات، بالإضافة إلى فئات أكثر تحديدًا مثل القوارب والأرائك وطاولات الطعام.
- تتضمن التعليقات التوضيحية مربعات إحاطة للكائنات وتسميات الفئات لمهام الكشف عن الكائنات وتصنيفها، وأقنعة تقسيم لمهام التقسيم.
- توفر VOC مقاييس تقييم موحدة مثل متوسط الدقة (mAP) للكشف عن الكائنات وتصنيفها، مما يجعلها مناسبة لمقارنة أداء النماذج.
هيكل مجموعة البيانات
تنقسم مجموعة بيانات VOC إلى ثلاث مجموعات فرعية:
- التدريب (Train): تحتوي هذه المجموعة الفرعية على صور لتدريب نماذج الكشف عن الكائنات وتقسيمها وتصنيفها.
- التحقق (Validation): تحتوي هذه المجموعة الفرعية على صور تُستخدم لأغراض التحقق أثناء تدريب النموذج.
- الاختبار (Test): تتكون هذه المجموعة الفرعية من صور تُستخدم لاختبار النماذج المدربة وقياس أدائها. التعليقات التوضيحية للحقيقة الأساسية (Ground truth) لهذه المجموعة غير متاحة للجمهور، وكانت النتائج تُرسل تاريخياً إلى خادم تقييم 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 🚀 AGPL-3.0 License - https://ultralytics.com/license
# PASCAL VOC dataset http://host.robots.ox.ac.uk/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, 5012 images
f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip", # 438MB, 4953 images
f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip", # 1.95GB, 17126 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الاستخدام
To train a YOLO26n model on the VOC dataset for 100 epochs with an image size of 640, you can use the following code snippets. For a comprehensive list of available arguments, refer to the model Training page.
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)صور وعينات تعليقات توضيحية
تحتوي مجموعة بيانات 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).
كيف يمكنني تدريب نموذج YOLO26 باستخدام مجموعة بيانات VOC؟
لتدريب نموذج YOLO26 باستخدام مجموعة بيانات VOC، تحتاج إلى تكوين مجموعة البيانات في ملف YAML. إليك مثال لبدء تدريب نموذج YOLO26n لمدة 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)ما هي التحديات الأساسية المتضمنة في مجموعة بيانات VOC؟
تتضمن مجموعة بيانات VOC تحديين رئيسيين: VOC2007 وVOC2012. تختبر هذه التحديات الكشف عن الكائنات وتقسيمها وتصنيفها عبر 20 فئة متنوعة من الكائنات. يتم شرح كل صورة بدقة بمربعات إحاطة وتسميات فئات وأقنعة تقسيم. توفر التحديات مقاييس موحدة مثل mAP، مما يسهل مقارنة وقياس أداء نماذج الرؤية الحاسوبية المختلفة.
كيف تعمل مجموعة بيانات PASCAL VOC على تعزيز قياس أداء النماذج وتقييمها؟
تعمل مجموعة بيانات PASCAL VOC على تعزيز قياس أداء النماذج وتقييمها من خلال تعليقاتها التوضيحية التفصيلية ومقاييسها الموحدة مثل متوسط الدقة (mAP). هذه المقاييس ضرورية لتقييم أداء نماذج الكشف عن الكائنات والتصنيف. تضمن صور مجموعة البيانات المتنوعة والمعقدة تقييماً شاملاً للنموذج عبر سيناريوهات واقعية مختلفة.
كيف يمكنني استخدام مجموعة بيانات VOC لـ التقسيم الدلالي في نماذج YOLO؟
لاستخدام مجموعة بيانات VOC لمهام التقسيم الدلالي مع نماذج YOLO، تحتاج إلى تكوين مجموعة البيانات بشكل صحيح في ملف YAML. يحدد ملف YAML المسارات والفئات اللازمة لتدريب نماذج التقسيم. راجع ملف تكوين YAML لمجموعة بيانات VOC على VOC.yaml للحصول على إعدادات مفصلة. بالنسبة لمهام التقسيم، ستستخدم نموذجاً خاصاً بالتقسيم مثل yolo26n-seg.pt بدلاً من نموذج الكشف.