Ultralytics YOLO27:
Get Started

PASCAL VOC Veri Kümesi#

PASCAL VOC (Görsel Nesne Sınıfları) veri kümesi, 20 gündelik nesne sınıfı içeren klasik bir nesne tespiti kıyaslama veri kümesidir. Ultralytics VOC.yaml yapılandırması, VOC2007 ve VOC2012 trainval bölümlerini birleştirerek 16.551 görüntülük bir eğitim kümesi oluşturur; herkese açık şekilde açıklamaları bulunan 4.952 VOC2007 test görüntüsünü doğrulama için kullanır ve ilk kullanımda her şeyi otomatik olarak indirir (2,8 GB).



İzle: Ultralytics YOLO Pascal VOC Veri Kümesinde Nasıl Eğitilir | Nesne Algılama | Bilgisayarlı Görü 🚀

PASCAL VOC yarışmaları 2005'ten 2012'ye kadar sürdü ve nesne tespiti modellerinin değerlendirilme biçimini şekillendirdi: kıyaslama veri kümesi görüntü sınıflandırma, tespit ve segmentasyon görevlerini kapsar; ayrıca Ortalama Ortalama Kesinliği (mAP) standart tespit metriği olarak yaygınlaştı. Ultralytics VOC.yaml yapılandırması tespit açıklamalarını kullanır ve indirme sırasında özgün XML sınırlayıcı kutularını YOLO biçimine dönüştürür.

Temel Özellikler#

  • 20 gündelik nesne sınıfı: kişi; altı hayvan (kuş, kedi, inek, köpek, at, koyun); yedi taşıt (uçak, bisiklet, tekne, otobüs, otomobil, motosiklet, tren) ve altı iç mekân nesnesi (şişe, sandalye, yemek masası, saksı bitkisi, kanepe, televizyon monitörü).
  • İki yarışma dönemi birleştirildi: eğitim kümesi, VOC2007 trainval (5.011 görüntü) ile VOC2012 trainval (11.540 görüntüyü) bir araya getirir.
  • Standartlaştırılmış değerlendirme: Yıllar boyunca yayımlanan VOC temel sonuçları, bu veri kümesini tespit modellerini karşılaştırmak için kullanışlı bir referans noktası hâline getirir.
  • YOLO kullanımına hazır: indirme betiği arşivleri getirir ve açıklamaları otomatik olarak dönüştürür; elle hazırlık gerekmez.

Veri Kümesi Yapısı#

Ultralytics VOC.yaml yapılandırması aşağıdaki bölümleri tanımlar:

BölümGörüntülerKaynak
Eğit16,551VOC2007 trainval (5.011) + VOC2012 trainval (11.540)
Doğrulama4,952Eğitim sırasında değerlendirme için kullanılan VOC2007 test
Test4,952Aynı VOC2007 test görüntüleri — yapılandırmada ayrı bir ayrılmış bölüm tanımlanmamıştır

VOC2007 test açıklamaları o yılın yarışmasından sonra kamuya açıldı; bu sayede bu bölüm etiketli bir doğrulama kümesi olarak kullanılabiliyor. VOC2012 test açıklamaları ise gizli tutuluyor; bu bölümdeki sonuçlar yalnızca resmî PASCAL değerlendirme sunucusu üzerinden puanlanabiliyor, bu nedenle bu yapılandırmaya dâhil değil.

Zor nesneler hariç tutuldu

Otomatik dönüştürücü, özgün VOC XML açıklamalarında difficult olarak işaretlenmiş nesneleri atlar; bu nedenle sınıf başına örnek sayıları resmî VOC istatistiklerinden biraz farklıdır.

Görüntüleri açıklama katmanlarıyla incelemek, sınıf dağılımını ve sınırlayıcı kutu ısı haritalarını Grafikler sekmesinde görüntülemek ve bulutta kendi modelini eğitmek için klonlamak üzere Ultralytics Platform'da VOC'yi keşfet.

Uygulamalar#

Daha büyük COCO veri kümesinden önceki yıllarda PASCAL VOC, nesne tespiti araştırmalarının başlıca kıyaslama veri kümesiydi: Faster R-CNN ve SSD gibi algılayıcılar ilk sonuçlarını bu veri kümesinde yayımladı ve Ultralytics YOLO modelleri bu veri kümesinde ek ayar gerektirmeden eğitilebilir. Günümüzde de şu amaçlarla yaygın olarak kullanılır:

  • Yeni tespit mimarilerini, yayımlanmış temel sonuçların uzun geçmişiyle karşılaştırarak değerlendirme
  • Hızlı deneyler ve ders çalışmaları — 16.551 eğitim görüntüsüyle eğitim, COCO'ya kıyasla çok daha hızlıdır
  • Gündelik sınıflardan oluşan küçük ve iyi anlaşılmış bir küme üzerinde aktarım öğrenimi çalışmaları

Veri Kümesi YAML Dosyası#

VOC.yaml dosyası; veri kümesi yollarını, 20 sınıf adını ve otomatik indirme-dönüştürme betiğini içeren veri kümesi yapılandırmasını tanımlar. Dosya, Ultralytics deposunda https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml konumunda tutulur.

ultralytics/cfg/datasets/VOC.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# PASCAL VOC dataset https://www.robots.ox.ac.uk/~vgg/projects/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, 5011 images
      f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip",  # 438MB, 4952 images
      f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip",  # 1.95GB, 17125 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#

2,8 GB indirme

VOC, ilk kez eğitim yaptığında otomatik olarak indirilir — toplam 2,8 GB olan üç arşiv — ve çıkarma ile dönüştürme sırasında yaklaşık 6 GB boş disk alanı gerektirir.

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

Eğitim Örneği
from ultralytics import YOLO

# Bir model yükle
model = YOLO("yolo26n.pt")  # Önceden eğitilmiş bir model yükle (eğitim için önerilir)

# Modeli eğit — veri kümesi ilk çalıştırmada otomatik indirilir
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)

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

Aşağıdaki görüntüde VOC veri kümesinden mozaiklenmiş bir eğitim grubu gösteriliyor. Mozaikleme, birden fazla görüntüyü tek bir eğitim örneğinde birleştirerek modelin her grupta gördüğü nesne, ölçek ve sahne bağlamı çeşitliliğini artırır — ayrıntılar için YOLO veri artırma kılavuzuna bak.

Pascal VOC veri kümesi mozaik eğitim grubu

Atıflar ve Teşekkürler#

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ı
@article{everingham2010pascal,
  author={Everingham, Mark and Van Gool, Luc and Williams, Christopher K. I. and Winn, John and Zisserman, Andrew},
  journal={International Journal of Computer Vision},
  title={The Pascal Visual Object Classes (VOC) Challenge},
  year={2010},
  volume={88},
  number={2},
  pages={303-338},
  doi={10.1007/s11263-009-0275-4}}

Bu değerli kaynağı oluşturup sürdürdüğü için PASCAL VOC Konsorsiyumu'na bilgisayarlı görü topluluğu adına teşekkür ederiz. VOC veri kümesi ve oluşturucuları hakkında daha fazla bilgi için PASCAL VOC veri kümesi web sitesini ziyaret et.

Sık Sorulan Sorular#

  • PASCAL VOC; kişi, araba, köpek ve sandalye gibi 20 gündelik nesne sınıfında nesne algılama modellerini eğitmek ve kıyaslamak için kullanılır. Kompakt, eksiksiz etiketlenmiş ve yıllar içinde yayımlanmış temel sonuçlarla desteklenmiş olması sayesinde yeni mimarileri doğrulamak, ders çalışmaları kapsamında deneyler yapmak ve hızlı aktarım öğrenmesi çalışmaları yürütmek için yaygın olarak tercih edilir.

  • Ultralytics VOC yapılandırması 21.503 görüntü içerir: eğitim için 16.551 görüntü (VOC2007 trainval + VOC2012 trainval) ve doğrulama için 4.952 görüntü (VOC2007 test kümesi). Tüm bölümler aynı 20 sınıfı kullanır. Ayrıntılı döküm için Veri Kümesi Yapısı bölümüne bak.

  • data="VOC.yaml" ile ilk kez eğitim yaptığında VOC otomatik olarak indirilir — elle herhangi bir işlem yapman gerekmez. Betik, Ultralytics GitHub sürüm varlıklarından üç arşivi (2,8 GB) indirir ve XML açıklamalarını YOLO biçimine dönüştürür.

  • VOC üzerinde 640 görüntü boyutuyla 100 epoch boyunca bir YOLO26n modelini eğit:

    Eğitim Örneği
    from ultralytics import YOLO
    
    # Bir model yükle
    model = YOLO("yolo26n.pt")  # Önceden eğitilmiş bir model yükle (eğitim için önerilir)
    
    # Modeli eğit
    results = model.train(data="VOC.yaml", epochs=100, imgsz=640)

    Ayrıntılı yapılandırmalar için Eğitim sayfasına ve model eğitimi ipuçları sayfasına bak.

  • Her iki yarışma da aynı 20 sınıfı kullanır ancak farklı görüntüler içerir. VOC2007, 5.011 trainval görüntüsü ve açıklamaları herkese açık olan 4.952 görüntülük bir test kümesi sunar; VOC2012 ise 11.540 trainval görüntüsü sunarken test açıklamalarını gizli tutar ve yalnızca resmî değerlendirme sunucusunda puanlar. Ultralytics VOC.yaml, her iki trainval kümesini eğitim için birleştirir ve VOC2007 test kümesiyle doğrulama yapar.

  • VOC daha küçük ve daha basittir: COCO'nun 80 sınıf ve 330K görüntüsüne kıyasla 20 sınıf ve 21.503 görüntü içerir. VOC sonuçları geleneksel olarak 0.5 IoU değerinde mAP olarak raporlanırken COCO, 0.5 ile 0.95 arasındaki IoU eşiklerinde mAP ortalamasını alır. VOC çok daha hızlı eğitim sağlar ve hızlı deneyler için uygundur; COCO veri kümesi ise üretim ölçeğinde kıyaslama standardıdır.

  • Hayır — VOC.yaml yalnızca algılama için kullanılan bir yapılandırmadır: dönüştürücüsü VOC XML açıklamalarından sınırlayıcı kutuları çıkarır ve özgün kıyaslamada bulunan segmentasyon maskelerini dönüştürmez. Bir örnek segmentasyonu modelini eğitmek için yolo26n-seg.pt modeliyle COCO-Seg gibi çokgen etiketleri içeren bir veri kümesi kullan.

Yorumlar