VOC Veri Seti
PASCAL VOC (Görsel Nesne Sınıfları) veri kümesi iyi bilinen bir nesne algılama, segmentasyon ve sınıflandırma veri kümesidir. Çok çeşitli nesne kategorileri üzerine araştırmaları teşvik etmek için tasarlanmıştır ve bilgisayarla görme modellerini kıyaslamak için yaygın olarak kullanılır. Nesne algılama, segmentasyon ve sınıflandırma görevleri üzerinde çalışan araştırmacılar ve geliştiriciler için önemli bir veri setidir.
Temel Özellikler
- VOC veri seti iki ana zorluk içermektedir: VOC2007 ve VOC2012.
- Veri kümesi, arabalar, bisikletler ve hayvanlar gibi yaygın nesnelerin yanı sıra tekneler, kanepeler ve yemek masaları gibi daha spesifik kategoriler de dahil olmak üzere 20 nesne kategorisinden oluşmaktadır.
- Ek açıklamalar, nesne algılama ve sınıflandırma görevleri için nesne sınırlayıcı kutuları ve sınıf etiketlerini ve segmentasyon görevleri için segmentasyon maskelerini içerir.
- VOC, nesne algılama ve sınıflandırma için Ortalama Ortalama Hassasiyet (mAP) gibi standartlaştırılmış değerlendirme metrikleri sağlayarak model performansını karşılaştırmak için uygun hale getirir.
Veri Kümesi Yapısı
VOC veri kümesi üç alt kümeye ayrılmıştır:
- Eğitmek: Bu alt küme nesne algılama, segmentasyon ve sınıflandırma modellerinin eğitimi için görüntüler içerir.
- Doğrulama: Bu alt küme, model eğitimi sırasında doğrulama amacıyla kullanılan görüntülere sahiptir.
- Test: Bu alt küme, eğitilen modelleri test etmek ve kıyaslamak için kullanılan görüntülerden oluşur. Bu alt küme için temel gerçek açıklamaları kamuya açık değildir ve sonuçlar performans değerlendirmesi için PASCAL VOC değerlendirme sunucusuna gönderilir.
Uygulamalar
VOC veri seti, nesne algılama ( YOLO, Faster R-CNN ve SSD gibi), örnek segmentasyonu (Mask R-CNN gibi) ve görüntü sınıflandırmada derin öğrenme modellerini eğitmek ve değerlendirmek için yaygın olarak kullanılmaktadır. Veri setinin çeşitli nesne kategorileri, çok sayıda açıklamalı görüntü ve standartlaştırılmış değerlendirme metrikleri, onu bilgisayarla görme araştırmacıları ve uygulayıcıları için önemli bir kaynak haline getirmektedir.
Veri Kümesi YAML
Veri kümesi yapılandırmasını tanımlamak için bir YAML (Yet Another Markup Language) dosyası kullanılır. Veri kümesinin yolları, sınıfları ve diğer ilgili bilgiler hakkında bilgi içerir. VOC veri kümesi söz konusu olduğunda VOC.yaml
dosyası şu adreste tutulur https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.
ultralytics/cfg/datasets/VOC.yaml
# Ultralytics YOLO 🚀, AGPL-3.0 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: ../datasets/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 tqdm import tqdm
from ultralytics.utils.downloads import download
from pathlib import Path
def convert_label(path, lb_path, year, image_id):
def convert_box(size, box):
dw, dh = 1. / size[0], 1. / 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
url = 'https://github.com/ultralytics/assets/releases/download/v0.0.0/'
urls = [f'{url}VOCtrainval_06-Nov-2007.zip', # 446MB, 5012 images
f'{url}VOCtest_06-Nov-2007.zip', # 438MB, 4953 images
f'{url}VOCtrainval_11-May-2012.zip'] # 1.95GB, 17126 images
download(urls, dir=dir / 'images', curl=True, threads=3, exist_ok=True) # download and unzip over existing paths (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
Bir YOLO11n modelini 640 görüntü boyutuyla 100 epok boyunca VOC veri kümesi üzerinde eğitmek için aşağıdaki kod parçacıklarını kullanabilirsiniz. Kullanılabilir bağımsız değişkenlerin kapsamlı bir listesi için Model Eğitimi sayfasına bakın.
Tren Örneği
Örnek Görüntüler ve Açıklamalar
VOC veri kümesi, çeşitli nesne kategorileri ve karmaşık sahneler içeren çok çeşitli görüntüler içermektedir. Aşağıda veri kümesinden bazı görüntü örnekleri ve bunlara karşılık gelen ek açıklamalar yer almaktadır:
- Mozaiklenmiş Görüntü: Bu görüntü, mozaiklenmiş veri kümesi görüntülerinden oluşan bir eğitim grubunu göstermektedir. Mozaikleme, eğitim sırasında kullanılan ve her bir eğitim grubundaki nesne ve sahne çeşitliliğini artırmak için birden fazla görüntüyü tek bir görüntüde birleştiren 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 setindeki görüntülerin çeşitliliğini ve karmaşıklığını ve eğitim sürecinde mozaikleme kullanmanın faydalarını göstermektedir.
Atıflar ve Teşekkür
Araştırma veya geliştirme çalışmalarınızda VOC veri setini kullanıyorsanız, lütfen aşağıdaki makaleye atıfta bulunun:
PASCAL VOC Konsorsiyumuna, bilgisayarla görme topluluğu için bu değerli kaynağı oluşturdukları ve sürdürdükleri için teşekkür ederiz. 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 kümesi, bilgisayarla görmede nesne algılama, segmentasyon ve sınıflandırma için tanınmış bir ölçüttür. Sınırlayıcı kutular, sınıf etiketleri ve 20 farklı nesne kategorisinde segmentasyon maskeleri gibi kapsamlı ek açıklamalar içerir. Araştırmacılar, ortalama Ortalama Hassasiyet (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 kullanmaktadır.
VOC veri setini kullanarak bir YOLO11 modelini nasıl eğitebilirim?
Bir YOLO11 modelini VOC veri kümesiyle 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 epok için bir YOLO11n modelini eğitmeye başlamak için bir örnek:
Tren Örneği
VOC veri setinde yer alan başlıca zorluklar nelerdir?
VOC veri seti iki ana zorluk içermektedir: VOC2007 ve VOC2012. Bu görevler 20 farklı nesne kategorisinde nesne algılama, segmentasyon 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. Bu yarışmalar, mAP gibi standartlaştırılmış ölçütler sunarak farklı bilgisayarla görme modellerinin karşılaştırılmasını ve kıyaslanmasını kolaylaştırmaktadır.
PASCAL VOC veri seti model kıyaslama ve değerlendirmesini nasıl geliştirir?
PASCAL VOC veri seti, ayrıntılı ek açıklamaları ve Ortalama Ortalama Kesinlik (mAP) gibi standartlaştırılmış metrikleri sayesinde model kıyaslama ve değerlendirmesini geliştirir. Bu metrikler, nesne algılama 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.
VOC veri setini YOLO modellerinde semantik segmentasyon için nasıl kullanabilirim?
VOC veri kümesini YOLO modelleriyle anlamsal segmentasyon görevlerinde kullanmak için veri kümesini bir YAML dosyasında uygun şekilde yapılandırmanız gerekir. YAML dosyası, segmentasyon modellerini eğitmek için gereken yolları ve sınıfları tanımlar. Ayrıntılı kurulumlar için VOC.yaml adresindeki VOC veri kümesi YAML yapılandırma dosyasını kontrol edin.