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 :
- 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.
- Validation: Ce sous-ensemble contient des images utilisées à des fins de validation pendant la formation du modèle.
- 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
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 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 :
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.