Vai al contenuto

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:

  1. Addestramento: Questo sottoinsieme contiene immagini per l'addestramento dei modelli di rilevamento, segmentazione e classificazione degli oggetti.
  2. Convalida: Questo sottoinsieme contiene le immagini utilizzate per la convalida durante l'addestramento del modello.
  3. Test: Questo sottoinsieme è costituito da immagini utilizzate per il test e il benchmarking dei modelli addestrati. Le annotazioni di 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) è usato 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/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

Utilizzo

Per addestrare un modello YOLO11n sul dataset VOC per 100 epoche con una dimensione dell'immagine di 640, è possibile utilizzare i seguenti frammenti di codice. Per un elenco completo degli argomenti disponibili, consultare la pagina di addestramento del modello.

Esempio di treno

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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=yolo11n.pt epochs=100 imgsz=640

Immagini di esempio e annotazioni

Il dataset 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 campione del set di dati

  • Immagine a mosaico: Questa immagine mostra un batch di addestramento composto da immagini del dataset mosaicate. La mosaicatura è 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 ciascun batch di addestramento. Ciò contribuisce 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'uso della mosaicatura durante il processo di addestramento.

Citazioni e ringraziamenti

Se utilizzate il set di dati VOC nel vostro lavoro di ricerca o sviluppo, siete pregati di citare il seguente documento:

@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 Consorzio PASCAL VOC per aver creato e mantenuto questa preziosa risorsa per la comunità della computer vision. Per ulteriori informazioni sul dataset VOC e sui suoi creatori, visitare il sito web del dataset PASCAL VOC.

FAQ

Che 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, la segmentazione e la classificazione degli oggetti nella computer vision. Include annotazioni complete come bounding box, etichette di classe e maschere di segmentazione per 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 precisione media (mAP).

Come si addestra un modello YOLO11 utilizzando il dataset VOC?

Per addestrare un modello YOLO11 con il dataset VOC, è necessaria la configurazione del dataset in un file YAML. Ecco un esempio per avviare l'addestramento di un modello YOLO11n per 100 epoche con un'immagine di dimensioni 640:

Esempio di treno

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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=yolo11n.pt epochs=100 imgsz=640

Quali sono le sfide principali incluse nel set di dati VOC?

Il set di dati VOC comprende due sfide principali: VOC2007 e VOC2012. Queste sfide mettono alla prova il rilevamento, la segmentazione e la classificazione degli oggetti in 20 diverse categorie. Ogni immagine è meticolosamente annotata con caselle di delimitazione, 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 set di dati PASCAL VOC migliora il benchmarking e la valutazione dei modelli?

Il dataset PASCAL VOC migliora il benchmarking e la valutazione dei modelli grazie alle annotazioni dettagliate e alle metriche standardizzate come la precisione media (mAP). Queste metriche sono fondamentali per valutare le prestazioni dei modelli di rilevamento e classificazione degli oggetti. Le immagini diverse e complesse del dataset garantiscono una valutazione completa dei modelli in vari scenari del mondo reale.

Come si utilizza il dataset VOC per la segmentazione semantica nei modelli YOLO ?

Per utilizzare il dataset VOC per compiti di segmentazione semantica con i modelli di YOLO , è necessario configurare correttamente il dataset in un file YAML. Il file YAML definisce i percorsi e le classi necessarie per l'addestramento dei modelli di segmentazione. Controllare il file di configurazione YAML del dataset VOC in VOC.yaml per le impostazioni dettagliate.

📅C reato 1 anno fa ✏️ Aggiornato 1 mese fa

Commenti