Zum Inhalt springen

VOC-Datensatz

Der PASCAL VOC-Datensatz (Visual Object Classes) ist ein bekannter Datensatz fĂŒr die Erkennung, Segmentierung und Klassifizierung von Objekten. Er wurde entwickelt, um die Forschung zu einer Vielzahl von Objektkategorien zu fördern, und wird hĂ€ufig zum Benchmarking von Computer-Vision-Modellen verwendet. Er ist ein unverzichtbarer Datensatz fĂŒr Forscher und Entwickler, die sich mit Objekterkennung, -segmentierung und -klassifizierung befassen.

Hauptmerkmale

  • Der VOC-Datensatz umfasst zwei große Herausforderungen: VOC2007 und VOC2012.
  • Der Datensatz umfasst 20 Objektkategorien, darunter gĂ€ngige Objekte wie Autos, FahrrĂ€der und Tiere, aber auch spezifischere Kategorien wie Boote, Sofas und Esstische.
  • Zu den Anmerkungen gehören Objektbegrenzungsrahmen und Klassenbezeichnungen fĂŒr die Aufgaben der Objekterkennung und -klassifizierung sowie Segmentierungsmasken fĂŒr die Segmentierungsaufgaben.
  • VOC bietet standardisierte Bewertungsmetriken wie die mittlere durchschnittliche PrĂ€zision (mAP) fĂŒr die Objekterkennung und -klassifizierung und eignet sich daher fĂŒr den Vergleich der Modellleistung.

Struktur des Datensatzes

Der VOC-Datensatz ist in drei Teilmengen aufgeteilt:

  1. Trainieren: Diese Teilmenge enthÀlt Bilder zum Trainieren von Objekterkennungs-, Segmentierungs- und Klassifizierungsmodellen.
  2. Validierung: Diese Untergruppe enthÀlt Bilder, die wÀhrend der Modellschulung zur Validierung verwendet werden.
  3. Test: Diese Teilmenge besteht aus Bildern, die zum Testen und Benchmarking der trainierten Modelle verwendet werden. Die Ergebnisse werden zur Leistungsbewertung an den PASCAL VOC Evaluationsserver ĂŒbermittelt.

Anwendungen

Der VOC-Datensatz wird hĂ€ufig zum Trainieren und Evaluieren von Deep-Learning-Modellen fĂŒr die Objekterkennung (wie YOLO, Faster R-CNN und SSD), die Instanzsegmentierung (wie Mask R-CNN) und die Bildklassifizierung verwendet. Die Vielfalt der Objektkategorien, die große Anzahl kommentierter Bilder und die standardisierten BewertungsmaßstĂ€be machen den Datensatz zu einer unverzichtbaren Ressource fĂŒr Forscher/innen und Praktiker/innen im Bereich Computer Vision.

Datensatz YAML

Eine YAML-Datei (Yet Another Markup Language) wird verwendet, um die Konfiguration des Datensatzes zu definieren. Sie enthĂ€lt Informationen ĂŒber die Pfade des Datensatzes, die Klassen und andere wichtige Informationen. Im Fall des VOC-Datensatzes ist die VOC.yaml Datei wird verwaltet unter 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

Verwendung

Um ein YOLOv8n Modell auf dem VOC-Datensatz fĂŒr 100 Epochen mit einer BildgrĂ¶ĂŸe von 640 zu trainieren, kannst du die folgenden Codeschnipsel verwenden. Eine umfassende Liste der verfĂŒgbaren Argumente findest du auf der Seite Modelltraining.

Beispiel fĂŒr einen Zug

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

Beispielbilder und Anmerkungen

Der VOC-Datensatz enthÀlt eine Vielzahl von Bildern mit verschiedenen Objektkategorien und komplexen Szenen. Hier sind einige Beispiele von Bildern aus dem Datensatz mit den dazugehörigen Anmerkungen:

Datensatz Beispielbild

  • Mosaikbild: Dieses Bild zeigt einen Trainingsstapel, der aus Mosaikbildern des Datensatzes besteht. Beim Mosaikieren werden mehrere Bilder zu einem einzigen Bild zusammengefĂŒgt, um die Vielfalt der Objekte und Szenen in jedem Trainingsstapel zu erhöhen. Dadurch wird die FĂ€higkeit des Modells verbessert, sich auf verschiedene ObjektgrĂ¶ĂŸen, SeitenverhĂ€ltnisse und Kontexte einzustellen.

Das Beispiel zeigt die Vielfalt und KomplexitÀt der Bilder im VOC-Datensatz und die Vorteile der Mosaikbildung im Trainingsprozess.

Zitate und Danksagungen

Wenn du den VOC-Datensatz in deiner Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte das folgende Dokument:

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

Wir möchten dem PASCAL VOC-Konsortium fĂŒr die Erstellung und Pflege dieser wertvollen Ressource fĂŒr die Computer Vision Community danken. Weitere Informationen ĂŒber den VOC-Datensatz und seine Ersteller findest du auf der Website des PASCAL VOC-Datensatzes.

FAQ

Was ist der PASCAL VOC-Datensatz und warum ist er fĂŒr Computer Vision Aufgaben wichtig?

Der PASCAL VOC-Datensatz (Visual Object Classes) ist ein renommierter Benchmark fĂŒr die Erkennung, Segmentierung und Klassifizierung von Objekten in der Computer Vision. Er enthĂ€lt umfassende Annotationen wie Bounding Boxes, Klassenbezeichnungen und Segmentierungsmasken fĂŒr 20 verschiedene Objektkategorien. Forscher nutzen ihn hĂ€ufig, um die Leistung von Modellen wie Faster R-CNN, YOLO und Mask R-CNN zu bewerten, da er standardisierte Bewertungskennzahlen wie die mittlere durchschnittliche Genauigkeit (mAP) enthĂ€lt.

Wie trainiere ich ein YOLOv8 Modell mit dem VOC-Datensatz?

Um ein YOLOv8 Modell mit dem VOC-Datensatz zu trainieren, brauchst du die Konfiguration des Datensatzes in einer YAML-Datei. Hier ist ein Beispiel, um ein YOLOv8n Modell fĂŒr 100 Epochen mit einer BildgrĂ¶ĂŸe von 640 zu trainieren:

Beispiel fĂŒr einen Zug

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

Was sind die wichtigsten Herausforderungen, die im VOC-Datensatz enthalten sind?

Der VOC-Datensatz umfasst zwei große Herausforderungen: VOC2007 und VOC2012. Bei diesen Aufgaben werden die Objekterkennung, -segmentierung und -klassifizierung in 20 verschiedenen Objektkategorien getestet. Jedes Bild ist sorgfĂ€ltig mit Bounding Boxes, Klassenbezeichnungen und Segmentierungsmasken versehen. Die Challenges liefern standardisierte Metriken wie mAP, die den Vergleich und das Benchmarking verschiedener Computer Vision Modelle erleichtern.

Wie verbessert der PASCAL VOC-Datensatz das Benchmarking und die Bewertung von Modellen?

Der PASCAL VOC-Datensatz verbessert das Benchmarking und die Evaluierung von Modellen durch seine detaillierten Anmerkungen und standardisierten Metriken wie die mittlere durchschnittliche PrĂ€zision (mAP). Diese Metriken sind entscheidend fĂŒr die Bewertung der Leistung von Objekterkennungs- und Klassifizierungsmodellen. Die vielfĂ€ltigen und komplexen Bilder des Datensatzes gewĂ€hrleisten eine umfassende Modellbewertung in verschiedenen realen Szenarien.

Wie verwende ich den VOC-Datensatz fĂŒr die semantische Segmentierung in YOLO Modellen?

Um den VOC-Datensatz fĂŒr semantische Segmentierungsaufgaben mit YOLO Modellen zu nutzen, musst du den Datensatz in einer YAML-Datei richtig konfigurieren. Die YAML-Datei definiert Pfade und Klassen, die fĂŒr das Training der Segmentierungsmodelle benötigt werden. In der YAML-Konfigurationsdatei des VOC-Datensatzes unter VOC.yaml findest du detaillierte Einstellungen.



Erstellt am 2023-11-12, Aktualisiert am 2024-07-04
Autoren: glenn-jocher (7), Laughing-q (1)

Kommentare