Passer au contenu

Ensemble de données VOC

L'ensemble de données PASCAL VOC (Visual Object Classes) est un ensemble de données bien connu pour la détection d'objets, la segmentation et la classification. 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. C'est un ensemble de données essentiel pour les chercheurs et les développeurs travaillant sur des tâches de détection d'objets, de segmentation et de classification.

Principales caractéristiques

  • 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 vélos 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 englobantes d'objets et les étiquettes de classe pour les tâches de détection et de classification d'objets, et les masques de segmentation pour les tâches de segmentation.
  • VOC fournit des métriques d'évaluation standardisées telles que la précision moyenne moyenne (mAP) pour la détection et la classification d'objets, ce qui le rend approprié pour comparer les performances des modèles.

Structure du jeu de données

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

  1. Train: Ce sous-ensemble contient des images pour l’entraînement des modèles de détection d’objets, de segmentation et de classification.
  2. Validation : Ce sous-ensemble contient des images utilisées à des fins de validation pendant l'entraînement du modèle.
  3. Test : Ce sous-ensemble comprend des images utilisées pour tester et évaluer les modèles entraînés. Les annotations de référence 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 l'entraînement et l'évaluation des modèles d'apprentissage profond dans la détection d'objets (tels que Ultralytics YOLO, Faster R-CNN et SSD), la segmentation d'instance (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 métriques d'évaluation standardisées en font une ressource essentielle pour les chercheurs et les praticiens en vision par ordinateur.

YAML du jeu de données

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

      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", 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

Utilisation

Pour entraîner un modèle YOLO11n sur le jeu de données VOC pendant 100 epochs avec une taille d'image de 640, vous pouvez utiliser les extraits de code suivants. Pour une liste complète des arguments disponibles, consultez la page Formation du modèle.

Exemple d'entraînement

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

Images et annotations d'exemple

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

Exemple d'image de l'ensemble de données

  • Image mosaïque : Cette image montre un lot d'entraînement composé d'images d'ensemble de données en mosaïque. La mosaïque est une technique utilisée pendant l'entraînement qui combine plusieurs images en une seule image pour augmenter la variété des objets et des scènes dans chaque lot d'entraînement. Cela permet d'améliorer la capacité du modèle à se généraliser à différentes tailles d'objets, rapports hauteur/largeur et contextes.

Cet exemple illustre la variété et la complexité des images dans l'ensemble de données VOC, ainsi que les avantages de l'utilisation du mosaïquage pendant le processus d'entraînement.

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, consultez le site web du jeu de données PASCAL VOC.

FAQ

Qu'est-ce que le jeu 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 renommée pour la détection d'objets, la segmentation et la classification en vision par ordinateur. Il comprend des annotations complètes telles que des boîtes englobantes, des étiquettes de classe et des masques de segmentation à travers 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 métriques d'évaluation standardisées telles que la précision moyenne (mAP).

Comment entraîner un modèle YOLO11 en utilisant le jeu de données VOC ?

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

Exemple d'entraînement

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 le jeu de données VOC ?

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

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

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

Comment utiliser le jeu de données VOC pour la segmentation sémantique dans les modèles YOLO ?

Pour utiliser l'ensemble de données VOC pour les 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 de l'ensemble de données VOC à l'adresse VOC.yaml pour des configurations détaillées. Pour les tâches de segmentation, vous utiliserez un modèle spécifique à la segmentation comme yolo11n-seg.pt au lieu du modèle de détection.



📅 Créé il y a 1 an ✏️ Mis à jour il y a 5 mois

Commentaires