[数据集]PASCAL VOC 2012

相比于之前的挑战赛,PASCAL VOC 2012增加了更多的训练和测试图像,同时,这也是最后一届挑战赛。其关于PASCAL VOC以及之前挑战赛的内容参考:

相关实现:zjykzj/vocdev

简介

关于类别

VOC 2007一样,基于4个大类别,共包含了20个目标类:

  • Person: person
  • Animal: bird, cat, cow(奶牛), dog, horse, sheep(绵羊)
  • Vehicle(交通工具): aeroplane(飞机), bicycle, boat(小船), bus(公共汽车), car(轿车), motorbike(摩托车), train(火车)
  • Indoor(室内): bottle(瓶子), chair(椅子), dining table(餐桌), potted plant(盆栽植物), sofa, tv/monitor(电视/显示器)

关于数据

训练/验证数据集下载地址:training/validation data

50%数据用于训练/验证,50%数据用于测试。其中仅有训练/验证数据被发布,从2008年开始,就不再公布测试数据了。其完整数据统计参考PASCAL VOC2012 Database Statistics

对于分类/检测任务而言,VOC 2012的训练集提供了

  1. 训练数据:5717张图像,共13609个目标
  2. 验证数据:5823张图像,共13841个目标
  3. 训练+验证数据:11540张图像,共27450个目标

关于标注

每个图像都有对应的标注文件,包含了标注边界框以及对应目标类别。同一图像中可能会包含多个边界框,其标注准则参考VOC2011 Annotation Guidelines

2012 vs. 2011

对于VOC2012,大部分标注工作都是为了增加分割和动作分类数据集的大小,并且没有为分类/检测任务执行额外的标注。下面总结了2012年和2011年的数据差异

  1. 分类/检测:2012年的数据集与2011年使用的数据集相同。没有附加数据被标注。因此,不允许参与者在VOC2011数据集上运行评估,并且评估服务器上的此选项已被禁用
  2. 分割:2012年数据集包含2008-2011年的图像,已经为其准备了额外的分割。与前几年一样,训练/测试数据集一直保持不变。有分割的图像总数从7062幅增加到9993
  3. 动作分类:2012年数据集包括2011年数据集加上额外标注的图像。对训练/测试数据集的比例保持不变。除了边界框标注之外,还在身体上用单个参考点进行标注,以支持“无边框”动作分类任务(参见开发工具包)
  4. 行人轮廓布局(Person Layout Taster):2012年的数据集与2011年使用的数据集相同。没有附加数据被标注。因此,不允许参与者在VOC2011数据集上运行评估,并且评估服务器上的此选项已被禁用

解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import cv2
import numpy as np
from torchvision.datasets import VOCDetection


def show_data():
data_dir = '../../data/'
dataset = VOCDetection(data_dir, year='2012', image_set='trainval', download=True)

for i in range(10):
img, target = dataset.__getitem__(i)
img = np.array(img)
# torchvision用PIL库,以RGB格式读取图像,而OpenCV以BGR格式处理图像,先进行转换
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

print(img.shape)
print(target)

objects = target['annotation']['object']
if isinstance(objects, list):
for obj in objects:
print(obj)
bndbox = obj['bndbox']
cv2.rectangle(img, (int(bndbox['xmin']), int(bndbox['ymin'])),
(int(bndbox['xmax']), int(bndbox['ymax'])), (0, 255, 0), thickness=1)
cv2.putText(img, obj['name'], (int(bndbox['xmin']), int(bndbox['ymin'])),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255))
elif isinstance(objects, dict):
bndbox = objects['bndbox']
cv2.rectangle(img, (int(bndbox['xmin']), int(bndbox['ymin'])),
(int(bndbox['xmax']), int(bndbox['ymax'])), (0, 255, 0), thickness=1)
cv2.putText(img, objects['name'], (int(bndbox['xmin']), int(bndbox['ymin'])),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255))
else:
pass

cv2.imshow(target['annotation']['filename'], img)
cv2.waitKey(0)


if __name__ == '__main__':
show_data()

07 + 12

PASCAL VOC 2007挑战赛是最后一届公布了测试数据集,从2008年开始,挑战赛仅仅公布了训练及验证数据集。以此同时,从2009年挑战赛开始,每年的数据集将会包含上一年挑战赛的数据集

From now on the data for all tasks consists of the previous years' images augmented with new images. In earlier years an entirely new data set was released each year for the classification/detection tasks.

为了扩大数据集,可以结合PASCAL VOC 2007PASCAL VOC 2012数据集一起训练,最后使用07测试集进行测试

引用

如果使用了VOC 2012数据,可以引用(citation)以下参考信息:

1
2
3
4
@misc{pascal-voc-2012,
author = "Everingham, M. and Van~Gool, L. and Williams, C. K. I. and Winn, J. and Zisserman, A.",
title = "The {PASCAL} {V}isual {O}bject {C}lasses {C}hallenge 2012 {(VOC2012)} {R}esults",
howpublished = "http://www.pascal-network.org/challenges/VOC/voc2012/workshop/index.html"}