Link to this sectionمجموعة بيانات VOC#
تعد مجموعة بيانات PASCAL VOC (فئات الكائنات المرئية) مجموعة بيانات شهيرة للكشف عن الكائنات وتقسيمها وتصنيفها. صُممت هذه المجموعة لتشجيع الأبحاث حول مجموعة واسعة من فئات الكائنات، وتُستخدم بشكل شائع لتقييم أداء نماذج رؤية الكمبيوتر. وهي مجموعة بيانات أساسية للباحثين والمطورين الذين يعملون على مهام الكشف عن الكائنات، والتقسيم، والتصنيف.
Watch: How to Train Ultralytics YOLO26 on the Pascal VOC Dataset | Object Detection 🚀
Link to this sectionالميزات الرئيسية#
- تتضمن مجموعة بيانات VOC تحديين رئيسيين: VOC2007 و VOC2012.
- تتكون مجموعة البيانات من 20 فئة من الكائنات، بما في ذلك الكائنات الشائعة مثل السيارات والدراجات والحيوانات، بالإضافة إلى فئات أكثر تحديداً مثل القوارب والأرائك وطاولات الطعام.
- تتضمن التعليقات التوضيحية مربعات إحاطة للكائنات وتصنيفات للفئات لمهام الكشف عن الكائنات والتصنيف، وأقنعة تقسيم لمهام التقسيم.
- توفر VOC مقاييس تقييم موحدة مثل متوسط دقة التنبؤ (mAP) للكشف عن الكائنات والتصنيف، مما يجعلها مناسبة لمقارنة أداء النماذج.
Link to this sectionهيكل مجموعة البيانات#
تنقسم مجموعة بيانات VOC إلى ثلاث مجموعات فرعية:
- التدريب (Train): تحتوي هذه المجموعة الفرعية على صور لتدريب نماذج الكشف عن الكائنات، والتقسيم، والتصنيف.
- التحقق (Validation): تحتوي هذه المجموعة الفرعية على صور تُستخدم لأغراض التحقق أثناء تدريب النموذج.
- الاختبار (Test): تتكون هذه المجموعة الفرعية من صور تُستخدم لاختبار النماذج المدربة وتقييمها. التعليقات التوضيحية للحقيقة الأساسية لهذه المجموعة ليست متاحة للجمهور، وكانت النتائج تُقدم تاريخياً إلى خادم تقييم PASCAL VOC لتقييم الأداء.
Link to this sectionالتطبيقات#
تُستخدم مجموعة بيانات VOC على نطاق واسع لتدريب وتقييم نماذج التعلم العميق في مهام كشف الأجسام (مثل Ultralytics YOLO و Faster R-CNN و SSD)، وتجزئة النسخ (مثل Mask R-CNN)، وتصنيف الصور. إن التنوع في فئات الأجسام التي تغطيها مجموعة البيانات، والعدد الكبير من الصور المُعنونة، ومقاييس التقييم القياسية تجعل منها مورداً أساسياً للباحثين والممارسين في مجال رؤية الحاسوب.
Link to this sectionYAML مجموعة البيانات#
يُستخدم ملف 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 formatLink to this sectionالاستخدام#
لتدريب نموذج 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)Link to this sectionصور وشروحات توضيحية عينة#
تحتوي مجموعة بيانات VOC على مجموعة متنوعة من الصور مع فئات كائنات مختلفة ومشاهد معقدة. فيما يلي بعض الأمثلة للصور من مجموعة البيانات، جنباً إلى جنب مع تعليقاتها التوضيحية المقابلة:

- صورة مجمعة (Mosaiced Image): توضح هذه الصورة دفعة تدريب تتكون من صور مجموعة بيانات مجمعة. الفسيفساء (Mosaicing) هي تقنية تُستخدم أثناء التدريب تدمج صورًا متعددة في صورة واحدة لزيادة تنوع الكائنات والمشاهد داخل كل دفعة تدريب. يساعد هذا في تحسين قدرة النموذج على التعميم على أحجام كائنات ونسب عرض إلى ارتفاع وسياقات مختلفة.
يوضح المثال تنوع وتعقيد الصور في مجموعة بيانات VOC وفوائد استخدام الفسيفساء أثناء عملية التدريب.
Link to this sectionالاقتباسات والشكر#
إذا كنت تستخدم مجموعة بيانات 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.
Link to this sectionالأسئلة الشائعة#
Link to this sectionما هي مجموعة بيانات PASCAL VOC ولماذا هي مهمة لمهام رؤية الكمبيوتر؟#
تُعد مجموعة بيانات PASCAL VOC (فئات الكائنات المرئية) معياراً شهيراً لـ الكشف عن الكائنات والتقسيم والتصنيف في رؤية الكمبيوتر. وهي تتضمن تعليقات توضيحية شاملة مثل مربعات الإحاطة، وتصنيفات الفئات، وأقنعة التقسيم عبر 20 فئة مختلفة من الكائنات. يستخدمها الباحثون على نطاق واسع لتقييم أداء نماذج مثل Faster R-CNN و YOLO و Mask R-CNN نظراً لمقاييس التقييم الموحدة الخاصة بها مثل متوسط دقة التنبؤ (mAP).
Link to this sectionكيف يمكنني تدريب نموذج 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)Link to this sectionما هي التحديات الأساسية المضمنة في مجموعة بيانات VOC؟#
تتضمن مجموعة بيانات VOC تحديين رئيسيين: VOC2007 و VOC2012. تختبر هذه التحديات الكشف عن الكائنات، والتقسيم، والتصنيف عبر 20 فئة متنوعة من الكائنات. يتم شرح كل صورة بدقة بمربعات إحاطة، وتصنيفات فئات، وأقنعة تقسيم. توفر التحديات مقاييس موحدة مثل mAP، مما يسهل مقارنة نماذج رؤية الكمبيوتر المختلفة وقياس أدائها.
Link to this sectionكيف تعمل مجموعة بيانات PASCAL VOC على تحسين قياس أداء النماذج وتقييمها؟#
تعمل مجموعة بيانات PASCAL VOC على تحسين قياس أداء النماذج وتقييمها من خلال تعليقاتها التوضيحية التفصيلية ومقاييسها الموحدة مثل متوسط الدقة (mAP). هذه المقاييس ضرورية لتقييم أداء نماذج الكشف عن الكائنات والتصنيف. تضمن الصور المتنوعة والمعقدة في مجموعة البيانات إجراء تقييم شامل للنموذج عبر سيناريوهات واقعية مختلفة.
Link to this sectionكيف أستخدم مجموعة بيانات VOC لـ التقسيم الدلالي في نماذج YOLO؟#
لاستخدام مجموعة بيانات VOC لمهام التقسيم الدلالي مع نماذج YOLO، تحتاج إلى تكوين مجموعة البيانات بشكل صحيح في ملف YAML. يحدد ملف YAML المسارات والفئات اللازمة لتدريب نماذج التقسيم. راجع ملف تكوين YAML الخاص بمجموعة بيانات VOC على VOC.yaml للحصول على إعدادات مفصلة. بالنسبة لمهام التقسيم، ستستخدم نموذجاً خاصاً بالتقسيم مثل yolo26n-seg.pt بدلاً من نموذج الكشف.