Meet YOLO26: next-gen vision AI.

Link to this sectionDataset VOC#

Il dataset PASCAL VOC (Visual Object Classes) è un noto dataset per il rilevamento, la segmentazione e la classificazione degli oggetti. È 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, segmentazione e classificazione degli oggetti.



Watch: How to Train Ultralytics YOLO26 on the Pascal VOC Dataset | Object Detection 🚀

Link to this sectionCaratteristiche principali#

  • Il dataset VOC include due sfide principali: VOC2007 e VOC2012.
  • Il dataset comprende 20 categorie di oggetti, inclusi oggetti comuni come automobili, biciclette e animali, oltre a categorie più specifiche come barche, divani e tavoli da pranzo.
  • Le annotazioni includono bounding box degli oggetti ed etichette di classe per le attività di rilevamento e classificazione degli oggetti, nonché 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 per confrontare le prestazioni dei modelli.

Link to this sectionStruttura del dataset#

Il dataset VOC è diviso in tre subset:

  1. Train: questo subset contiene immagini per l'addestramento di modelli di rilevamento, segmentazione e classificazione degli oggetti.
  2. Validation: questo subset contiene immagini utilizzate per scopi di convalida durante l'addestramento del modello.
  3. Test: questo subset consiste in immagini utilizzate per testare e confrontare i modelli addestrati. Le annotazioni ground truth per questo subset non sono disponibili pubblicamente e, storicamente, i risultati venivano inviati al server di valutazione PASCAL VOC per la valutazione delle prestazioni.

Link to this sectionApplicazioni#

Il dataset VOC è ampiamente utilizzato per addestrare e valutare modelli di deep learning nell'object detection (come Ultralytics YOLO, Faster R-CNN e SSD), nell'instance segmentation (come Mask R-CNN) e nell'image classification. L'insieme diversificato di categorie di oggetti del dataset, l'elevato numero di immagini annotate e le metriche di valutazione standardizzate lo rendono una risorsa essenziale per ricercatori e professionisti della computer vision.

Link to this sectionDataset YAML#

Un file YAML (Yet Another Markup Language) viene utilizzato per definire la configurazione del dataset. Contiene informazioni sui percorsi, le classi e altre informazioni rilevanti del dataset. Nel caso del dataset VOC, il file VOC.yaml è mantenuto su https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.

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 format

Link to this sectionUtilizzo#

Per addestrare un modello YOLO26n sul dataset VOC per 100 epochs con una dimensione dell'immagine di 640, puoi utilizzare i seguenti frammenti di codice. Per un elenco completo degli argomenti disponibili, consulta la pagina Training del modello.

Esempio di Addestramento
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)

Link to this sectionEsempi di immagini e annotazioni#

Il dataset VOC contiene un insieme diversificato di immagini con varie categorie di oggetti e scene complesse. Ecco alcuni esempi di immagini dal dataset, insieme alle relative annotazioni:

Pascal VOC dataset mosaic training batch

  • Immagine 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.

Link to this sectionCitazioni e riconoscimenti#

Se utilizzi il dataset VOC nel tuo lavoro di ricerca o sviluppo, cita il seguente articolo:

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

Vorremmo ringraziare il PASCAL VOC Consortium per aver creato e mantenuto questa preziosa risorsa per la comunità di computer vision. Per maggiori informazioni sul dataset VOC e sui suoi creatori, visita il sito web del dataset PASCAL VOC.

Link to this sectionFAQ#

Link to this sectionCos'è il dataset PASCAL VOC e perché è importante per le attività di computer vision?#

Il dataset PASCAL VOC (Visual Object Classes) è un rinomato benchmark per l'object detection, la segmentazione e la classificazione nella computer vision. Include annotazioni complete come bounding box, etichette di classe e maschere di segmentazione su 20 diverse categorie di oggetti. I ricercatori lo usano 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).

Link to this sectionCome addestro 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 epoche con una dimensione dell'immagine di 640:

Esempio di Addestramento
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)

Link to this sectionQuali 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 mAP, facilitando il confronto e il benchmarking di diversi modelli di computer vision.

Link to this sectionIn 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 grazie alle sue annotazioni dettagliate e alle 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 assicurano una valutazione completa del modello in vari scenari del mondo reale.

Link to this sectionCome uso il dataset VOC per la semantic segmentation 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 impostazioni dettagliate. Per le attività di segmentazione, utilizzeresti un modello specifico per la segmentazione come yolo26n-seg.pt anziché il modello di rilevamento.

Commenti