Dataset VOC
Il dataset PASCAL VOC (Visual Object Classes) è un noto dataset per il rilevamento di oggetti, la segmentazione e la classificazione. È progettato per incoraggiare la ricerca su un'ampia varietà di categorie di oggetti ed è comunemente utilizzato per il benchmarking di modelli di computer vision. È un dataset essenziale per ricercatori e sviluppatori che lavorano su attività di rilevamento di oggetti, segmentazione e classificazione.
Watch: How to Train Ultralytics YOLO26 on the Pascal VOC Dataset | Object Detection 🚀
Caratteristiche principali
- Il dataset VOC include due sfide principali: VOC2007 e VOC2012.
- Il dataset comprende 20 categorie di oggetti, tra cui oggetti comuni come auto, biciclette e animali, nonché categorie più specifiche come barche, divani e tavoli da pranzo.
- Le annotazioni includono riquadri di delimitazione (bounding box) ed etichette di classe per le attività di rilevamento e classificazione degli oggetti, e maschere di segmentazione per le attività di segmentazione.
- VOC fornisce metriche di valutazione standardizzate come la mean Average Precision (mAP) per il rilevamento e la classificazione degli oggetti, rendendolo adatto al confronto delle prestazioni dei modelli.
Struttura del dataset
Il dataset VOC è suddiviso in tre subset:
- Train: Questo subset contiene immagini per l'addestramento di modelli di rilevamento, segmentazione e classificazione degli oggetti.
- Validation: Questo subset contiene immagini utilizzate a fini di convalida durante l'addestramento del modello.
- Test: Questo subset consiste in immagini utilizzate per testare e sottoporre a benchmark i modelli addestrati. Le annotazioni di verità fondamentale (ground truth) per questo subset non sono pubblicamente disponibili e i risultati venivano storicamente inviati al server di valutazione PASCAL VOC per la valutazione delle prestazioni.
Applicazioni
Il dataset VOC è ampiamente utilizzato per addestrare e valutare modelli di deep learning nel rilevamento di oggetti (come Ultralytics YOLO, Faster R-CNN e SSD), segmentazione di istanze (come Mask R-CNN) e classificazione delle immagini. Il set diversificato di categorie di oggetti del dataset, il gran numero di immagini annotate e le metriche di valutazione standardizzate lo rendono una risorsa essenziale per ricercatori e professionisti della computer vision.
YAML del dataset
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 dataset VOC, il file VOC.yaml è gestito all'indirizzo https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# PASCAL VOC dataset http://host.robots.ox.ac.uk/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, 5012 images
f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip", # 438MB, 4953 images
f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip", # 1.95GB, 17126 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 formatUtilizzo
Per addestrare un modello YOLO26n 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, fai riferimento alla pagina Training del modello.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Immagini campione e annotazioni
Il dataset VOC contiene un set diversificato di immagini con varie categorie di oggetti e scene complesse. Ecco alcuni esempi di immagini dal dataset, insieme alle relative annotazioni:

- Immagine a mosaico: Questa immagine mostra un batch di addestramento composto da immagini del dataset a mosaico. 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 batch di addestramento. Ciò aiuta a migliorare la capacità del modello di generalizzare a diverse dimensioni, proporzioni e contesti degli oggetti.
L'esempio mostra la varietà e la complessità delle immagini nel dataset VOC e i vantaggi dell'utilizzo del mosaico durante il processo di addestramento.
Citazioni e ringraziamenti
Se utilizzi il dataset VOC nel tuo lavoro di ricerca o sviluppo, ti preghiamo di citare il seguente articolo:
@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}
}Desideriamo ringraziare il PASCAL VOC Consortium per aver creato e mantenuto questa preziosa risorsa per la comunità di computer vision. Per ulteriori informazioni sul dataset VOC e sui suoi creatori, visita il sito web del dataset PASCAL VOC.
FAQ
Cos'è il dataset PASCAL VOC e perché è importante per le attività di computer vision?
Il dataset PASCAL VOC (Visual Object Classes) è un rinomato benchmark per il rilevamento di oggetti, la segmentazione e la classificazione nella computer vision. Include annotazioni complete come bounding box, etichette di classe e maschere di segmentazione in 20 diverse categorie di oggetti. I ricercatori lo utilizzano ampiamente per valutare le prestazioni di modelli come Faster R-CNN, YOLO e Mask R-CNN grazie alle sue metriche di valutazione standardizzate come la mean Average Precision (mAP).
Come posso addestrare un modello YOLO26 utilizzando il dataset VOC?
Per addestrare un modello YOLO26 con il dataset VOC, ti serve la configurazione del dataset in un file YAML. Ecco un esempio per iniziare ad addestrare un modello YOLO26n per 100 epoch con una dimensione dell'immagine di 640:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Quali sono le sfide principali incluse nel dataset VOC?
Il dataset VOC include due sfide principali: VOC2007 e VOC2012. Queste sfide mettono alla prova il rilevamento, la segmentazione e la classificazione degli oggetti su 20 diverse categorie. Ogni immagine è meticolosamente annotata con bounding box, etichette di classe e maschere di segmentazione. Le sfide forniscono metriche standardizzate come la mAP, facilitando il confronto e il benchmarking di diversi modelli di computer vision.
In che modo il dataset PASCAL VOC migliora il benchmarking e la valutazione dei modelli?
Il dataset PASCAL VOC migliora il benchmarking e la valutazione dei modelli attraverso le sue annotazioni dettagliate e metriche standardizzate come la mean Average Precision (mAP). Queste metriche sono cruciali per valutare le prestazioni dei modelli di rilevamento e classificazione degli oggetti. Le immagini diversificate e complesse del dataset garantiscono una valutazione completa del modello in vari scenari del mondo reale.
Come utilizzo il dataset VOC per la segmentazione semantica nei modelli YOLO?
Per utilizzare il dataset VOC per attività di segmentazione semantica con i modelli YOLO, devi configurare correttamente il dataset in un file YAML. Il file YAML definisce i percorsi e le classi necessari per l'addestramento dei modelli di segmentazione. Controlla il file di configurazione YAML del dataset VOC su VOC.yaml per configurazioni dettagliate. Per le attività di segmentazione, utilizzeresti un modello specifico per la segmentazione come yolo26n-seg.pt invece del modello di rilevamento.