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 an einer Vielzahl von Objektkategorien zu fördern, und wird hĂ€ufig zum Benchmarking von Computer-Vision-Modellen verwendet. Er ist ein wesentlicher Datensatz fĂŒr Forscher und Entwickler, die sich mit Objekterkennung, -segmentierung und -klassifizierung befassen.
Wesentliche Merkmale
- 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:
- Trainieren: Diese Teilmenge enthÀlt Bilder zum Trainieren von Objekterkennungs-, Segmentierungs- und Klassifizierungsmodellen.
- Validierung: Diese Untergruppe enthÀlt Bilder, die wÀhrend der Modellschulung zur Validierung verwendet werden.
- 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-Evaluierungsserver ĂŒ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), Instanzsegmentierung (wie Mask R-CNN) und Bildklassifizierung verwendet. Die vielfĂ€ltigen Objektkategorien des Datensatzes, die groĂe Anzahl kommentierter Bilder und die standardisierten Bewertungsmetriken machen ihn zu einer unverzichtbaren Ressource fĂŒr Forscher und Praktiker im Bereich Computer Vision.
Datensatz YAML
Eine YAML-Datei (Yet Another Markup Language) wird zur Definition der Dataset-Konfiguration verwendet. Sie enthĂ€lt Informationen ĂŒber die Pfade des Datensatzes, Klassen und andere relevante Informationen. Im Falle 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 YOLO11n-Modell auf dem VOC-Datensatz fĂŒr 100 Epochen mit einer BildgröĂe von 640 zu trainieren, können Sie die folgenden Codeschnipsel verwenden. Eine umfassende Liste der verfĂŒgbaren Argumente finden Sie auf der Seite Modelltraining.
Beispiel fĂŒr einen Zug
Beispielbilder und -kommentare
Der VOC-Datensatz enthÀlt eine Vielzahl von Bildern mit verschiedenen Objektkategorien und komplexen Szenen. Hier sind einige Beispiele von Bildern aus dem Datensatz zusammen mit den entsprechenden Anmerkungen:
- Mosaikbild: Dieses Bild zeigt einen Trainingsstapel, der aus Mosaikbildern des Datensatzes besteht. Das Mosaikieren ist eine Technik, bei der wĂ€hrend des Trainings mehrere Bilder zu einem einzigen Bild kombiniert werden, um die Vielfalt der Objekte und Szenen in jedem Trainingsstapel zu erhöhen. Dies trĂ€gt dazu bei, die FĂ€higkeit des Modells zur Generalisierung auf verschiedene ObjektgröĂen, SeitenverhĂ€ltnisse und Kontexte zu verbessern.
Das Beispiel verdeutlicht die Vielfalt und KomplexitÀt der Bilder im VOC-Datensatz und die Vorteile der Mosaikbildung wÀhrend des Trainingsprozesses.
Zitate und Danksagungen
Wenn Sie den VOC-Datensatz in Ihrer Forschungs- oder Entwicklungsarbeit verwenden, zitieren Sie bitte das folgende Papier:
Wir möchten dem PASCAL VOC Consortium 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 finden Sie 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 Objekterkennung, -segmentierung und -klassifizierung in der Computer Vision. Er enthĂ€lt umfassende Annotationen wie Bounding Boxes, Klassenbezeichnungen und Segmentierungsmasken fĂŒr 20 verschiedene Objektkategorien. Er wird von Forschern hĂ€ufig verwendet, um die Leistung von Modellen wie Faster R-CNN, YOLO und Mask R-CNN zu bewerten, da er standardisierte Bewertungsmetriken wie die mittlere durchschnittliche PrĂ€zision (mAP) enthĂ€lt.
Wie trainiere ich ein YOLO11 Modell unter Verwendung des VOC-Datensatzes?
Um ein YOLO11 Modell mit dem VOC-Datensatz zu trainieren, benötigen Sie die Konfiguration des Datensatzes in einer YAML-Datei. Hier ist ein Beispiel fĂŒr das Training eines YOLO11n-Modells fĂŒr 100 Epochen mit einer BildgröĂe von 640:
Beispiel fĂŒr einen Zug
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 Objekterkennung, Segmentierung und Klassifizierung in 20 verschiedenen Objektkategorien getestet. Jedes Bild ist sorgfĂ€ltig mit Bounding Boxes, Klassenbeschriftungen und Segmentierungsmasken versehen. Die Challenges liefern standardisierte Metriken wie mAP, die den Vergleich und das Benchmarking verschiedener Computer Vision Modelle erleichtern.
Wie kann der PASCAL-VOC-Datensatz das Benchmarking und die Bewertung von Modellen verbessern?
Der PASCAL-VOC-Datensatz verbessert das Benchmarking und die Bewertung 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 Modellevaluation 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, mĂŒssen Sie den Datensatz in einer YAML-Datei richtig konfigurieren. Die YAML-Datei definiert Pfade und Klassen, die fĂŒr das Training von Segmentierungsmodellen benötigt werden. In der YAML-Konfigurationsdatei des VOC-Datensatzes unter VOC.yaml finden Sie detaillierte Einstellungen.