Overslaan naar inhoud

VOC-gegevensreeks

De PASCAL VOC (Visual Object Classes) dataset is een bekende dataset voor objectdetectie, segmentatie en classificatie. Het is ontworpen om onderzoek naar een grote verscheidenheid aan objectcategorieƫn aan te moedigen en wordt vaak gebruikt voor het benchmarken van computer vision modellen. Het is een essentiƫle dataset voor onderzoekers en ontwikkelaars die werken aan objectdetectie, segmentatie en classificatietaken.

Belangrijkste kenmerken

  • De VOC dataset bevat twee belangrijke uitdagingen: VOC2007 en VOC2012.
  • De dataset bestaat uit 20 objectcategorieĆ«n, waaronder veelvoorkomende objecten zoals auto's, fietsen en dieren, maar ook meer specifieke categorieĆ«n zoals boten, banken en eettafels.
  • Annotaties omvatten objectgrenzen en klassenlabels voor objectdetectie en classificatietaken, en segmentatiemaskers voor segmentatietaken.
  • VOC biedt gestandaardiseerde evaluatiemetrieken zoals gemiddelde precisie (mAP) voor objectdetectie en -classificatie, waardoor het geschikt is voor het vergelijken van modelprestaties.

Structuur dataset

De VOC-dataset is opgesplitst in drie subsets:

  1. Trainen: Deze subset bevat afbeeldingen voor het trainen van objectdetectie, segmentatie en classificatiemodellen.
  2. Validatie: Deze subset bevat afbeeldingen die tijdens de modeltraining zijn gebruikt voor validatiedoeleinden.
  3. Test: Deze subset bestaat uit afbeeldingen die worden gebruikt voor het testen en benchmarken van de getrainde modellen. De grondwaarheidsannotaties voor deze subset zijn niet publiekelijk beschikbaar en de resultaten worden ingediend bij de PASCAL VOC evaluatieserver voor prestatie-evaluatie.

Toepassingen

De VOC dataset wordt veel gebruikt voor het trainen en evalueren van deep learning modellen voor objectdetectie (zoals YOLO, Faster R-CNN en SSD), segmentatie van instanties (zoals Mask R-CNN) en beeldclassificatie. De diverse set objectcategorieƫn, het grote aantal geannoteerde afbeeldingen en de gestandaardiseerde evaluatiemetrieken maken de dataset tot een essentiƫle bron voor computer vision onderzoekers en praktijkmensen.

Dataset YAML

Een YAML (Yet Another Markup Language) bestand wordt gebruikt om de configuratie van de dataset te definiƫren. Het bevat informatie over de paden, klassen en andere relevante informatie van de dataset. In het geval van de VOC dataset is de VOC.yaml bestand wordt onderhouden op 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

Gebruik

Om een YOLOv8n model te trainen op de VOC dataset voor 100 epochs met een afbeeldingsgrootte van 640, kun je de volgende codefragmenten gebruiken. Raadpleeg de pagina Model Training voor een uitgebreide lijst met beschikbare argumenten.

Voorbeeld trein

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

Voorbeeldafbeeldingen en -annotaties

De VOC dataset bevat een diverse set afbeeldingen met verschillende objectcategorieĆ«n en complexe scĆØnes. Hier zijn enkele voorbeelden van afbeeldingen uit de dataset, samen met de bijbehorende annotaties:

Voorbeeldafbeelding dataset

  • GemozaĆÆekte afbeelding: Deze afbeelding toont een trainingsbatch die bestaat uit gemozaĆÆekte afbeeldingen van de dataset. MozaĆÆeken is een techniek die tijdens het trainen wordt gebruikt om meerdere afbeeldingen te combineren tot Ć©Ć©n afbeelding om de verscheidenheid aan objecten en scĆØnes binnen elke trainingsbatch te vergroten. Dit helpt het vermogen van het model om te generaliseren naar verschillende objectgroottes, beeldverhoudingen en contexten te verbeteren.

Het voorbeeld toont de verscheidenheid en complexiteit van de afbeeldingen in de VOC dataset en de voordelen van het gebruik van mozaĆÆek tijdens het trainingsproces.

Citaten en erkenningen

Als je de VOC dataset gebruikt in je onderzoek of ontwikkeling, citeer dan het volgende document:

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

We willen graag het PASCAL VOC Consortium bedanken voor het maken en onderhouden van deze waardevolle bron voor de computer vision gemeenschap. Ga voor meer informatie over de VOC dataset en de makers naar de PASCAL VOC dataset website.

FAQ

Wat is de PASCAL VOC dataset en waarom is deze belangrijk voor computer vision taken?

De PASCAL VOC (Visual Object Classes) dataset is een bekende benchmark voor objectdetectie, segmentatie en classificatie in computer vision. Het bevat uitgebreide annotaties zoals bounding boxes, klasse labels en segmentatiemaskers voor 20 verschillende objectcategorieƫn. Onderzoekers gebruiken deze veel om de prestaties van modellen zoals Faster R-CNN, YOLO en Mask R-CNN te evalueren vanwege de gestandaardiseerde evaluatiemetrieken zoals gemiddelde precisie (mAP).

Hoe train ik een YOLOv8 model met de VOC dataset?

Om een YOLOv8 model te trainen met de VOC dataset, heb je de dataset configuratie nodig in een YAML bestand. Hier is een voorbeeld om te beginnen met het trainen van een YOLOv8n model voor 100 epochs met een afbeeldingsgrootte van 640:

Voorbeeld trein

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

Wat zijn de belangrijkste uitdagingen in de VOC-dataset?

De VOC dataset bevat twee belangrijke uitdagingen: VOC2007 en VOC2012. Deze uitdagingen testen objectdetectie, segmentatie en classificatie in 20 verschillende objectcategorieƫn. Elke afbeelding is zorgvuldig geannoteerd met bounding boxes, klasse-labels en segmentatiemaskers. De uitdagingen bieden gestandaardiseerde metrieken zoals mAP, die het vergelijken en benchmarken van verschillende computervisiemodellen vergemakkelijken.

Hoe verbetert de PASCAL VOC dataset de benchmarking en evaluatie van modellen?

De PASCAL VOC dataset verbetert het benchmarken en evalueren van modellen door zijn gedetailleerde annotaties en gestandaardiseerde metrieken zoals gemiddelde precisie (mAP). Deze meetgegevens zijn cruciaal voor het beoordelen van de prestaties van objectdetectie- en classificatiemodellen. De diverse en complexe afbeeldingen van de dataset zorgen voor een uitgebreide evaluatie van modellen in verschillende scenario's in de echte wereld.

Hoe gebruik ik de VOC-dataset voor semantische segmentatie in YOLO modellen?

Om de VOC dataset te gebruiken voor semantische segmentatietaken met YOLO modellen, moet je de dataset goed configureren in een YAML bestand. Het YAML-bestand definieert paden en klassen die nodig zijn voor het trainen van segmentatiemodellen. Bekijk het VOC dataset YAML configuratiebestand op VOC.yaml voor gedetailleerde instellingen.



Aangemaakt 2023-11-12, Bijgewerkt 2024-07-04
Auteurs: glenn-jocher (7), Laughing-q (1)

Reacties