İçeriğe geç

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:

  1. 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.
  2. Doğrulama: Bu alt küme, model eğitimi sırasında doğrulama amacıyla kullanılan görüntülere sahiptir.
  3. 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/yolov5/releases/download/v1.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 YOLOv8n modelini 640 görüntü boyutuyla 100 epok için VOC veri kümesinde 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

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.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=yolov8n.pt epochs=100 imgsz=640

Ö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:

Veri kümesi örnek görüntüsü

  • 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:

@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 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.



Oluşturuldu 2023-11-12, Güncellendi 2024-01-14
Yazarlar: glenn-jocher (4), Laughing-q (1)

Yorumlar