İçeriğe geç

VOC Veri Kümesi

PASCAL VOC (Visual Object Classes) 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ırmayı teşvik etmek için tasarlanmıştır ve bilgisayar görüşü 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 temel bir veri kümesidir.

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, model performansını karşılaştırmak için uygun hale getirerek nesne algılama ve sınıflandırma için ortalama Ortalama Hassasiyet (mAP) gibi standartlaştırılmış değerlendirme metrikleri sağlar.

Veri Seti Yapısı

VOC veri kümesi üç alt kümeye ayrılmıştır:

  1. Train: Bu alt küme, nesne tespiti, segmentasyon ve sınıflandırma modellerini eğitmek için görseller içerir.
  2. Doğrulama: Bu alt küme, model eğitimi sırasında doğrulama amacıyla kullanılan resimlere sahiptir.
  3. Test: Bu alt küme, eğitimli modelleri test etmek ve kıyaslamak için kullanılan görüntülerden 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 seti, nesne algılama (Ultralytics YOLO, Faster R-CNN ve SSD gibi), örnek segmentasyonu (Mask R-CNN gibi) ve görüntü sınıflandırması alanlarında derin öğrenme modellerini eğitmek ve değerlendirmek için yaygın olarak kullanılır. Veri setinin çeşitli nesne kategorileri, çok sayıda etiketlenmiş görüntü ve standartlaştırılmış değerlendirme metrikleri, onu bilgisayar 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 bilgileri hakkında bilgiler 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 tqdm import tqdm

  from ultralytics.utils.downloads import download


  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
  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 (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 100 epoch için VOC veri kümesinde bir YOLO11n modeli 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 kategorileri ve karmaşık sahneler içeren çeşitli görüntüler içerir. İşte veri kümesinden bazı görüntü örnekleri ve bunlara karşılık gelen açıklamaları:

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

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

Örnek, VOC veri setindeki görüntülerin çeşitliliğini ve karmaşıklığını ve eğitim sürecinde mozaiklemenin 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şturup sürdürdükleri için PASCAL VOC Konsorsiyumu'na 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 bilgisayar görüşü görevleri için neden önemlidir?

PASCAL VOC (Visual Object Classes) veri kümesi, bilgisayar görüşünde nesne algılama, segmentasyon ve sınıflandırma için tanınmış bir kıyaslama standardıdı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 modeli eğitmek için, 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 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. Zorluklar, farklı bilgisayarla görme 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ıyaslamasını ve değerlendirmesini nasıl geliştirir?

PASCAL VOC veri kümesi, ayrıntılı açıklamaları ve ortalama Ortalama Kesinlik (mAP) gibi standartlaştırılmış metrikleri aracılığıyla 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 kümesinin ç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 anlamsal bölütleme için VOC veri kümesini nasıl kullanırım?

YOLO modelleriyle anlamsal bölütleme 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ı, bölütleme modellerini eğitmek için gereken yolları ve sınıfları tanımlar. Şu adresteki VOC veri kümesi YAML yapılandırma dosyasını 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.



📅 1 yıl önce oluşturuldu ✏️ 4 ay önce güncellendi

Yorumlar