Skip to content

Ensemble de données sur les COV

L'ensemble de données PASCAL VOC (Visual Object Classes) est un ensemble de données bien connu de détection, de segmentation et de classification d'objets. Il est conçu pour encourager la recherche sur une grande variété de catégories d'objets et est couramment utilisé pour l'évaluation comparative des modèles de vision par ordinateur. Il s'agit d'un ensemble de données essentiel pour les chercheurs et les développeurs qui travaillent sur les tâches de détection, de segmentation et de classification des objets.

Caractéristiques principales

  • L'ensemble de données VOC comprend deux défis principaux : VOC2007 et VOC2012.
  • L'ensemble de données comprend 20 catégories d'objets, y compris des objets courants comme les voitures, les bicyclettes et les animaux, ainsi que des catégories plus spécifiques comme les bateaux, les canapés et les tables à manger.
  • Les annotations comprennent les boîtes de délimitation des objets et les étiquettes de classe pour les tâches de détection et de classification des objets, ainsi que les masques de segmentation pour les tâches de segmentation.
  • VOC fournit des mesures d'évaluation standardisées telles que la précision moyenne (mAP) pour la détection et la classification des objets, ce qui le rend approprié pour comparer les performances des modèles.

Structure de l'ensemble de données

L'ensemble de données sur les COV est divisé en trois sous-ensembles :

  1. Entraîner: Ce sous-ensemble contient des images pour l'entraînement des modèles de détection, de segmentation et de classification des objets.
  2. Validation: Ce sous-ensemble contient des images utilisées à des fins de validation pendant la formation du modèle.
  3. Test: Ce sous-ensemble est constitué d'images utilisées pour tester et étalonner les modèles entraînés. Les annotations de vérité terrain pour ce sous-ensemble ne sont pas accessibles au public, et les résultats sont soumis au serveur d'évaluation PASCAL VOC pour l'évaluation des performances.

Applications

L'ensemble de données VOC est largement utilisé pour la formation et l'évaluation de modèles d'apprentissage profond dans la détection d'objets (tels que YOLO, Faster R-CNN et SSD), la segmentation d'instances (telle que Mask R-CNN) et la classification d'images. L'ensemble diversifié de catégories d'objets, le grand nombre d'images annotées et les métriques d'évaluation normalisées de l'ensemble de données en font une ressource essentielle pour les chercheurs et les praticiens de la vision par ordinateur.

Jeu de données YAML

Un fichier YAML (Yet Another Markup Language) est utilisé pour définir la configuration du jeu de données. Il contient des informations sur les chemins d'accès au jeu de données, les classes et d'autres informations pertinentes. Dans le cas du jeu de données VOC, le fichier YAML est un fichier de configuration. VOC.yaml est maintenu à 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

Utilisation

Pour entraîner un modèle YOLOv8n sur l'ensemble de données VOC pour 100 époques avec une taille d'image de 640, tu peux utiliser les extraits de code suivants. Pour obtenir une liste complète des arguments disponibles, reporte-toi à la page Formation du modèle.

Exemple de train

from ultralytics import YOLO

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

Exemples d'images et d'annotations

L'ensemble de données VOC contient un ensemble varié d'images avec diverses catégories d'objets et des scènes complexes. Voici quelques exemples d'images tirées de l'ensemble de données, ainsi que les annotations correspondantes :

Image de l'échantillon du jeu de données

  • Image mosaïque: Cette image montre un lot d'entraînement composé d'images de données mosaïquées. La mosaïque est une technique utilisée pendant la formation qui combine plusieurs images en une seule afin d'augmenter la variété d'objets et de scènes dans chaque lot de formation. Cela permet d'améliorer la capacité du modèle à s'adapter à différentes tailles d'objets, à différents rapports d'aspect et à différents contextes.

L'exemple montre la variété et la complexité des images de l'ensemble de données VOC et les avantages de l'utilisation du mosaïquage pendant le processus de formation.

Citations et remerciements

Si tu utilises le jeu de données VOC dans tes travaux de recherche ou de développement, cite l'article suivant :

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

Nous tenons à remercier le consortium PASCAL VOC pour la création et la maintenance de cette ressource précieuse pour la communauté de la vision par ordinateur. Pour plus d'informations sur le jeu de données VOC et ses créateurs, visite le site Web du jeu de données PASCAL VOC.



Créé le 2023-11-12, Mis à jour le 2024-01-14
Auteurs : glenn-jocher (4), Laughing-q (1)

Commentaires