VOC Veri Kümesi

PASCAL VOC (Görsel Nesne Sınıfları) veri kümesi, iyi bilinen bir nesne algılama, bölütleme ve sınıflandırma veri kümesidir. Çok çeşitli nesne kategorilerinde araştırmayı teşvik etmek için tasarlanmıştır ve bilgisayarlı görü modellerini kıyaslamak için yaygın olarak kullanılır. Nesne algılama, bölütleme ve sınıflandırma görevleri üzerinde çalışan araştırmacılar ve geliştiriciler için temel bir veri kümesidir.



Watch: How to Train Ultralytics YOLO26 on the Pascal VOC Dataset | Object Detection 🚀

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 dahil olmak üzere 20 nesne kategorisinden oluşur.
  • 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, bölütleme görevleri için ise bölütleme maskelerini içerir.
  • VOC, nesne algılama ve sınıflandırma için ortalama Hassasiyet (mAP) gibi standartlaştırılmış değerlendirme metrikleri sağlar, bu da onu 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ğitim: Bu alt küme, nesne algılama, bölütleme ve sınıflandırma modellerini eğitmek 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ğitilmiş modelleri test etmek ve kıyaslamak için kullanılan görüntülerden oluşur. Bu alt küme için temel gerçeklik ek açıklamaları herkese açık değildir ve sonuçlar geçmişte performans değerlendirmesi için PASCAL VOC değerlendirme sunucusuna gönderilmiştir.

Uygulamalar

The VOC dataset is widely used for training and evaluating deep learning models in object detection (such as Ultralytics YOLO, Faster R-CNN, and SSD), instance segmentation (such as Mask R-CNN), and image classification. The dataset's diverse set of object categories, large number of annotated images, and standardized evaluation metrics make it an essential resource for computer vision researchers and practitioners.

Veri Kümesi YAML Dosyası

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 bilgileri hakkında bilgiler içerir. VOC veri kümesi söz konusu olduğunda, VOC.yaml dosyası https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml adresinde tutulmaktadır.

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

Kullanım

VOC veri kümesi üzerinde 640 görüntü boyutu ile 100 çağ boyunca bir YOLO26n modeli eğitmek için aşağıdaki kod parçacıklarını kullanabilirsin. Kullanılabilir bağımsız değişkenlerin kapsamlı bir listesi için model Eğitim sayfasına bak.

Eğitim Örneği
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)

Örnek Görüntüler ve Ek Açıklamalar

VOC veri kümesi, çeşitli nesne kategorilerine ve karmaşık sahnelere sahip çok çeşitli görüntüler içerir. İşte veri kümesinden, karşılık gelen ek açıklamalarıyla birlikte bazı görüntü örnekleri:

Pascal VOC veri kümesi mozaik eğitim grubu

  • Mozaiklenmiş Görüntü: Bu görüntü, mozaiklenmiş veri seti görüntülerinden oluşan bir eğitim grubunu göstermektedir. Mozaikleme, eğitim sırasında her 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.

Örnek, VOC veri kümesindeki görüntülerin çeşitliliğini ve karmaşıklığını ve eğitim sürecinde mozaikleme kullanmanın faydalarını sergilemektedir.

Alıntılar ve Teşekkür

VOC veri kümesini araştırma veya geliştirme çalışmalarında kullanıyorsan, lütfen aşağıdaki makaleye atıfta bulun:

Alıntı
@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}
}

Bilgisayarlı 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 ederiz. VOC veri kümesi ve yaratıcıları hakkında daha fazla bilgi için PASCAL VOC veri kümesi web sitesini ziyaret et.

SSS

PASCAL VOC veri kümesi nedir ve bilgisayarlı görü görevleri için neden önemlidir?

PASCAL VOC (Görsel Nesne Sınıfları) veri kümesi, bilgisayarlı görüde nesne algılama, bölütleme ve sınıflandırma için ünlü bir kıyaslamadır. Sınırlayıcı kutular, sınıf etiketleri ve 20 farklı nesne kategorisindeki bölütleme maskeleri gibi kapsamlı ek açıklamalar içerir. Araştırmacılar, 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 bunu yaygın olarak kullanırlar.

VOC veri kümesini kullanarak nasıl YOLO26 modeli eğitebilirim?

VOC veri kümesiyle bir YOLO26 modeli eğitmek için bir YAML dosyasındaki veri kümesi yapılandırmasına ihtiyacın var. İşte 640 görüntü boyutuyla 100 çağ boyunca bir YOLO26n modeli eğitmeye başlamak için bir örnek:

Eğitim Örneği
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 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 algılama, bölütleme ve sınıflandırmayı test eder. Her görüntü, sınırlayıcı kutular, sınıf etiketleri ve bölütleme 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ış metrikler sağlar.

PASCAL VOC veri kümesi model kıyaslamayı ve değerlendirmeyi nasıl geliştirir?

PASCAL VOC veri kümesi, detaylı ek açıklamaları ve ortalama Hassasiyet (mAP) gibi standartlaştırılmış metrikleri sayesinde model kıyaslamasını 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 kümesinin çeşitli ve karmaşık görüntüleri, çeşitli gerçek dünya senaryolarında kapsamlı model değerlendirmesini sağlar.

VOC veri kümesini YOLO modellerinde anlamsal bölütleme için nasıl kullanırım?

VOC veri kümesini YOLO modelleriyle anlamsal bölütleme görevleri için kullanmak üzere, veri kümesini bir YAML dosyasında düzgün bir şekilde yapılandırman gerekir. YAML dosyası, bölütleme modellerini eğitmek için gereken yolları ve sınıfları tanımlar. Detaylı kurulumlar için VOC.yaml adresindeki VOC veri kümesi YAML yapılandırma dosyasına göz at. Bölütleme görevleri için, algılama modeli yerine yolo26n-seg.pt gibi bölütlemeye özel bir model kullanmalısın.

Yorumlar