VOC Veri Kümesi
PASCAL VOC (Görsel Nesne Sınıfları) veri seti, iyi bilinen bir nesne tespiti, segmentasyon ve sınıflandırma veri setidir. Çok çeşitli nesne kategorileri üzerine araştırmayı teşvik etmek için tasarlanmıştır ve genellikle bilgisayarla görme modellerini karşılaştırmak için kullanılır. Nesne tespiti, segmentasyon ve sınıflandırma görevleri üzerinde çalışan araştırmacılar ve geliştiriciler için temel bir veri setidir.
Temel Özellikler
- VOC veri kümesi iki ana zorluk içerir: VOC2007 ve VOC2012.
- Veri kümesi, arabalar, bisikletler ve hayvanlar gibi yaygın nesnelerin yanı sıra tekneler, kanepeler ve yemek masaları gibi daha özel kategoriler de dahil olmak üzere 20 nesne kategorisinden oluşmaktadır.
- Açıklamalar, nesne tespiti ve sınıflandırma görevleri için nesne sınırlayıcı kutularını ve sınıf etiketlerini ve segmentasyon görevleri için segmentasyon maskelerini içerir.
- VOC, nesne tespiti ve sınıflandırması için ortalama Ortalama Hassasiyet (mAP) gibi standartlaştırılmış değerlendirme metrikleri sağlar ve bu da onu model performansını karşılaştırmak için uygun hale getirir.
Veri Seti Yapısı
VOC veri kümesi üç alt kümeye ayrılmıştır:
- Train: Bu alt küme, nesne tespiti, segmentasyon ve sınıflandırma modellerini eğitmek için görseller içerir.
- Doğrulama: Bu alt küme, model eğitimi sırasında doğrulama amacıyla kullanılan resimlere sahiptir.
- Test: Bu alt küme, eğitilmiş modelleri test etmek ve kıyaslamak için kullanılan resimlerden oluşur. Bu alt küme için temel doğruluk açıklamaları herkese açık değildir ve sonuçlar performans değerlendirmesi için PASCAL VOC değerlendirme sunucusuna gönderilir.
Uygulamalar
VOC veri kümesi, nesne tespitinde (Ultralytics YOLO, Faster R-CNN ve SSD gibi), örnek segmentasyonunda (Mask R-CNN gibi) ve görüntü sınıflandırmasında derin öğrenme modellerini eğitmek ve değerlendirmek için yaygın olarak kullanılır. Veri kümesinin çeşitli nesne kategorileri, çok sayıda açıklanmış görüntü ve standartlaştırılmış değerlendirme ölçümleri, onu bilgisayarlı görü araştırmacıları ve uygulayıcıları için önemli bir kaynak haline getirmektedir.
Veri Seti YAML
Bir YAML (Yet Another Markup Language) dosyası, veri kümesi yapılandırmasını tanımlamak için kullanılır. Veri kümesinin yolları, sınıfları ve diğer ilgili bilgiler hakkında bilgi içerir. VOC veri kümesi örneğinde, VOC.yaml dosyası şu adreste tutulur: https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.
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: # 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
in_file = open(path / f"VOC{year}/Annotations/{image_id}.xml")
out_file = open(lb_path, "w")
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
Kullanım
640 görüntü boyutuyla, VOC veri kümesi üzerinde bir YOLO11n modelini 100 epok için eğitmek için aşağıdaki kod parçacıklarını kullanabilirsiniz. Mevcut argümanların kapsamlı bir listesi için model Eğitim sayfasına bakın.
Eğitim Örneği
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VOC.yaml model=yolo11n.pt epochs=100 imgsz=640
Örnek Görüntüler ve Açıklamalar
VOC veri kümesi, çeşitli nesne kategorilerine ve karmaşık sahnelere sahip çeşitli resimler içerir. İşte veri kümesinden bazı resim örnekleri ve bunlara karşılık gelen açıklamalar:

- Mozaiklenmiş Görüntü: Bu görüntü, mozaiklenmiş veri seti görüntülerinden oluşan bir eğitim grubunu göstermektedir. Mozaikleme, her eğitim grubundaki nesnelerin ve sahnelerin çeşitliliğini artırmak için birden çok görüntüyü tek bir görüntüde birleştiren eğitim sırasında kullanılan bir tekniktir. Bu, modelin farklı nesne boyutlarına, en boy oranlarına ve bağlamlara genelleme yeteneğini geliştirmeye yardımcı olur.
Bu örnek, VOC veri kümesindeki görüntülerin çeşitliliğini ve karmaşıklığını ve eğitim sürecinde mozaiklemenin kullanımının faydalarını sergilemektedir.
Alıntılar ve Teşekkürler
Araştırma veya geliştirme çalışmalarınızda VOC veri kümesini kullanıyorsanız, lütfen aşağıdaki makaleye atıfta bulunun:
@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}
}
Bilgisayar görüşü topluluğu için bu değerli kaynağı oluşturdukları ve sürdürdükleri için PASCAL VOC Konsorsiyumu'na teşekkür etmek isteriz. VOC veri seti ve yaratıcıları hakkında daha fazla bilgi için PASCAL VOC veri seti web sitesini ziyaret edin.
SSS
PASCAL VOC veri seti nedir ve bilgisayarla görme görevleri için neden önemlidir?
PASCAL VOC (Görsel Nesne Sınıfları) veri seti, bilgisayarla görme alanında nesne tespiti, segmentasyon ve sınıflandırma için tanınmış bir ölçüttür. 20 farklı nesne kategorisinde sınırlayıcı kutular, sınıf etiketleri ve segmentasyon maskeleri gibi kapsamlı açıklamalar içerir. Araştırmacılar, ortalama Kesinlik (mAP) gibi standartlaştırılmış değerlendirme metrikleri nedeniyle Faster R-CNN, YOLO ve Mask R-CNN gibi modellerin performansını değerlendirmek için yaygın olarak kullanır.
VOC veri kümesini kullanarak bir YOLO11 modeli nasıl eğitirim?
VOC veri kümesiyle bir YOLO11 modelini eğitmek için, bir YAML dosyasında veri kümesi yapılandırmasına ihtiyacınız vardır. İşte 640 görüntü boyutuyla 100 epoch için bir YOLO11n modelini eğitmeye başlamak için bir örnek:
Eğitim Örneği
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VOC.yaml model=yolo11n.pt epochs=100 imgsz=640
VOC veri kümesinde yer alan temel zorluklar nelerdir?
VOC veri kümesi iki ana zorluk içerir: VOC2007 ve VOC2012. Bu zorluklar, 20 farklı nesne kategorisinde nesne tespiti, segmentasyonu ve sınıflandırmayı test eder. Her görüntü, sınırlayıcı kutular, sınıf etiketleri ve segmentasyon maskeleri ile titizlikle açıklanmıştır. Zorluklar, farklı bilgisayarlı görü modellerinin karşılaştırılmasını ve kıyaslanmasını kolaylaştıran mAP gibi standartlaştırılmış ölçümler sağlar.
PASCAL VOC veri kümesi, model kıyaslamasını ve değerlendirmesini nasıl geliştirir?
PASCAL VOC veri seti, ortalama Kesinlik (mAP) gibi ayrıntılı açıklamaları ve standartlaştırılmış metrikleri sayesinde model kıyaslamasını ve değerlendirmesini geliştirir. Bu metrikler, nesne tespiti ve sınıflandırma modellerinin performansını değerlendirmek için çok önemlidir. Veri setinin çeşitli ve karmaşık görüntüleri, çeşitli gerçek dünya senaryolarında kapsamlı model değerlendirmesi sağlar.
YOLO modellerinde semantik segmentasyon için VOC veri kümesini nasıl kullanabilirim?
YOLO modelleriyle semantik segmentasyon görevleri için VOC veri kümesini kullanmak için, veri kümesini bir YAML dosyasında düzgün bir şekilde yapılandırmanız gerekir. YAML dosyası, segmentasyon modellerini eğitmek için gereken yolları ve sınıfları tanımlar. VOC veri kümesi YAML yapılandırma dosyasını şu adreste kontrol edin: VOC.yaml ayrıntılı kurulumlar için. Segmentasyon görevleri için, şuna benzer segmentasyona özgü bir model kullanırsınız: yolo11n-seg.pt algılama modeli yerine.