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 évaluer les 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 des tâches de détection, de segmentation et de classification d'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, dont 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 permet de comparer les performances des modèles.

Structure de l'ensemble de données

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

  1. Entraîner: Ce sous-ensemble contient des images destinées à 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 lors de l'apprentissage 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 (tels 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 mesures d'évaluation normalisées font de ce jeu de données 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 VOC.yaml est conservé à l'adresse suivante 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

Utilisation

Pour entraîner un modèle YOLO11n sur l'ensemble de données VOC pendant 100 époques avec une taille d'image de 640, vous pouvez utiliser les extraits de code suivants. Pour une liste complète des arguments disponibles, reportez-vous à la page Entraînement du modèle.

Exemple de train

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

Exemples d'images et d'annotations

Le jeu 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 de l'ensemble 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 l'apprentissage qui combine plusieurs images en une seule afin d'augmenter la variété des objets et des scènes dans chaque lot d'apprentissage. 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.

Cet exemple illustre la variété et la complexité des images de l'ensemble de données VOC et les avantages de l'utilisation du mosaïquage au cours du processus d'apprentissage.

Citations et remerciements

Si vous utilisez l'ensemble de données VOC dans vos travaux de recherche ou de développement, veuillez citer 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, visitez le site Web du jeu de données PASCAL VOC.

FAQ

Qu'est-ce que l'ensemble de données PASCAL VOC et pourquoi est-il important pour les tâches de vision par ordinateur ?

L'ensemble de données PASCAL VOC (Visual Object Classes) est une référence reconnue pour la détection, la segmentation et la classification d'objets dans le domaine de la vision par ordinateur. Il comprend des annotations complètes telles que des boîtes de délimitation, des étiquettes de classe et des masques de segmentation pour 20 catégories d'objets différentes. Les chercheurs l'utilisent largement pour évaluer les performances de modèles tels que Faster R-CNN, YOLO, et Mask R-CNN en raison de ses mesures d'évaluation normalisées telles que la précision moyenne (mAP).

Comment entraîner un modèle YOLO11 à l'aide de l'ensemble de données VOC ?

Pour entraîner un modèle YOLO11 avec le jeu de données VOC, vous avez besoin de la configuration du jeu de données dans un fichier YAML. Voici un exemple pour commencer l'entraînement d'un modèle YOLO11n pour 100 époques avec une taille d'image de 640 :

Exemple de train

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

Quels sont les principaux défis inclus dans l'ensemble de données sur les COV ?

L'ensemble de données VOC comprend deux défis principaux : VOC2007 et VOC2012. Ces défis testent la détection, la segmentation et la classification d'objets dans 20 catégories différentes. Chaque image est méticuleusement annotée avec des boîtes de délimitation, des étiquettes de classe et des masques de segmentation. Les défis fournissent des mesures standardisées telles que mAP, facilitant la comparaison et l'étalonnage de différents modèles de vision par ordinateur.

Comment l'ensemble de données PASCAL VOC améliore-t-il l'étalonnage et l'évaluation des modèles ?

L'ensemble de données PASCAL VOC améliore l'analyse comparative et l'évaluation des modèles grâce à ses annotations détaillées et à des mesures normalisées telles que la précision moyenne (mAP). Ces mesures sont essentielles pour évaluer les performances des modèles de détection et de classification d'objets. Les images diverses et complexes de l'ensemble de données garantissent une évaluation complète des modèles dans divers scénarios du monde réel.

Comment utiliser l'ensemble de données VOC pour la segmentation sémantique dans les modèles YOLO ?

Pour utiliser l'ensemble de données VOC pour des tâches de segmentation sémantique avec les modèles YOLO , vous devez configurer correctement l'ensemble de données dans un fichier YAML. Le fichier YAML définit les chemins et les classes nécessaires à l'entraînement des modèles de segmentation. Consultez le fichier de configuration YAML du jeu de données VOC à l'adresse VOC.yaml pour obtenir des informations détaillées.

📅C réé il y a 1 an ✏️ Mis à jour il y a 2 mois

Commentaires