Set di dati VOC
Il dataset PASCAL VOC (Visual Object Classes) è un noto dataset di rilevamento, segmentazione e classificazione di oggetti. È stato progettato per incoraggiare la ricerca su un'ampia varietà di categorie di oggetti ed è comunemente utilizzato per il benchmarking dei modelli di computer vision. È un set di dati essenziale per i ricercatori e gli sviluppatori che lavorano al rilevamento, alla segmentazione e alla classificazione degli oggetti.
Caratteristiche principali
- Il set di dati VOC comprende due sfide principali: VOC2007 e VOC2012.
- Il set di dati comprende 20 categorie di oggetti, tra cui oggetti comuni come automobili, biciclette e animali, oltre a categorie più specifiche come barche, divani e tavoli da pranzo.
- Le annotazioni includono i riquadri di delimitazione degli oggetti e le etichette delle classi per le attività di rilevamento e classificazione degli oggetti e le maschere di segmentazione per le attività di segmentazione.
- Il VOC fornisce metriche di valutazione standardizzate come la precisione media (mAP) per il rilevamento e la classificazione degli oggetti, rendendolo adatto a confrontare le prestazioni dei modelli.
Struttura del set di dati
Il set di dati VOC è suddiviso in tre sottoinsiemi:
- Addestramento: Questo sottoinsieme contiene immagini per l'addestramento dei modelli di rilevamento, segmentazione e classificazione degli oggetti.
- Convalida: Questo sottoinsieme contiene le immagini utilizzate per la convalida durante la formazione del modello.
- Test: Questo sottoinsieme è costituito da immagini utilizzate per testare e confrontare i modelli addestrati. Le annotazioni della verità a terra per questo sottoinsieme non sono disponibili pubblicamente e i risultati vengono inviati al server di valutazione PASCAL VOC per la valutazione delle prestazioni.
Applicazioni
Il dataset VOC è ampiamente utilizzato per l'addestramento e la valutazione di modelli di deep learning per il rilevamento di oggetti (come YOLO, Faster R-CNN e SSD), la segmentazione di istanze (come Mask R-CNN) e la classificazione di immagini. La varietà di categorie di oggetti, l'elevato numero di immagini annotate e le metriche di valutazione standardizzate rendono il dataset una risorsa essenziale per i ricercatori e i professionisti della computer vision.
Set di dati YAML
Un file YAML (Yet Another Markup Language) viene utilizzato per definire la configurazione del dataset. Contiene informazioni sui percorsi del dataset, sulle classi e altre informazioni rilevanti. Nel caso del set di dati VOC, il file VOC.yaml
Il file viene mantenuto all'indirizzo 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/yolov5/releases/download/v1.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
Utilizzo
Per addestrare un modello YOLOv8n sul dataset VOC per 100 epoch con una dimensione dell'immagine di 640, puoi utilizzare i seguenti frammenti di codice. Per un elenco completo degli argomenti disponibili, consulta la pagina di addestramento del modello.
Esempio di treno
Immagini di esempio e annotazioni
Il set di dati VOC contiene un insieme eterogeneo di immagini con varie categorie di oggetti e scene complesse. Ecco alcuni esempi di immagini tratte dal dataset, con le relative annotazioni:
- Immagine a mosaico: Questa immagine mostra un lotto di formazione composto da immagini del dataset mosaicate. Il mosaico è una tecnica utilizzata durante l'addestramento che combina più immagini in un'unica immagine per aumentare la varietà di oggetti e scene all'interno di ogni gruppo di addestramento. Questo aiuta a migliorare la capacità del modello di generalizzarsi a oggetti di dimensioni, rapporti di aspetto e contesti diversi.
L'esempio mostra la varietà e la complessità delle immagini del dataset VOC e i vantaggi dell'utilizzo della mosaicatura durante il processo di formazione.
Citazioni e ringraziamenti
Se utilizzi il set di dati VOC nel tuo lavoro di ricerca o sviluppo, cita il seguente documento:
Desideriamo ringraziare il Consorzio PASCAL VOC per aver creato e mantenuto questa preziosa risorsa per la comunità della computer vision. Per maggiori informazioni sul dataset VOC e sui suoi creatori, visita il sito web del PASCAL VOC dataset.