PASCAL VOC2012数据集解读
PASCAL 全称为 Pattern Analysis, Statistical Modelling and Computational Learning ,即 模式分析,统计建模和计算学习。VOC 全称为 Visual Object Classes ,即视觉对象类。
PASCAL VOC 大赛是一项世界级的计算机视觉挑战赛,该挑战赛由 Mark Everingham、Luc Van Gool、Chris Williams、John Winn 和 Andrew Zisserman 发起,并在 2005 至 2012 年期间举办,比赛项目包括图像分类、目标检测、目标分割、人体关节点识别、动作识别几大类。2012年,Mark Everingham去世,VOC比赛也随之终止。
PASCAL VOC 官方网站:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html
PASCAL VOC2012数据集简介
PASCAL VOC2012挑战赛主要目的是对真实场景中的物体进行识别,这是一个监督学习问题,即提供图片以及对应的标签,利用这些数据,实现图像的分类、目标检测识别、图像分割三种任务。在这些图片中,一共包含了四个大类、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
该挑战赛的竞赛项目主要包括 图像分类与检测(Classification/Detection Competitions)、图像分割(Segmentation Competition)、人体动作分类(Action Classification Competition)、人体部位检测(Person Layout Taster Competition)等四项主要的视觉挑战赛。
图像分类与检测竞赛
在图像分类与检测竞赛中,分类的主要任务是预测图像中是否存在上述提到的二十个分类之一,并正确分类;检测的主要任务则是从包含二十个分类的图像中预测出每个类别物体的位置和标签。
图像分割竞赛
在图像分割竞赛中,需要对图像的每个像素按照对应的二十个类别进行分类,否则划分为“背景”。图像分割又可以细分为实例分割(区分同类中的不同个体)和语义分割(不区分同类中不同个体)。
人体动作分类竞赛
在人体动作分类竞赛中,主要任务是对于包含了人的图片,检测出人的位置,并分析出该人正在做什么动作,例如跳跃、打电话、读书、骑车、骑马、跑步等等。
人体部位检测竞赛
在人体部位检测竞赛中,需要对包含人的图片做检测,框出人的头、手、脚等部位的位置,并给出标签。这项竞赛属于尝试性的竞赛,与前面的主要比赛是分离的。
数据集下载
由于官方网站访问非常慢,这里提供一个镜像网站 https://pjreddie.com/projects/pascal-voc-dataset-mirror/
在网页里包括了VOC 2007 以及 VOC 2012 完整的训练/验证数据集、测试数据集、相关的开发组件 以及说明书。
可以复制下载链接,在迅雷里进行下载,这样可以获得大概 3M/s 的下载速度。
下载完毕后,得到 VOCtrainval_11-May-2012.rar
压缩包文件。
数据集解读
将压缩包解压,VOCtrainval_11-May-2012目录下的文件结构如下:
└─VOCdevkit
└─VOC2012
├─Annotations
├─ImageSets
│ ├─Action
│ ├─Layout
│ ├─Main
│ └─Segmentation
├─JPEGImages
├─SegmentationClass
└─SegmentationObject
下面对每个文件夹的作用进行解释。当然,你也可以自行下载上面的 PDF Documentation ,从而获取数据集的说明书,对数据进行解读。
要弄懂数据集中的文件的来历和用途,可以按照制作数据集的流程来进行解读,所以下面按照这种思路依次解读各个文件。
原始图像收集
在 JPEGImages 文件夹中,一共提供了 17,125 张不同尺寸的 jpg 图片,这些图片涵盖了人、动物、交通工具、室内家具用品四大类、以及其下子类,总计20个类别的图片(正如前面所介绍的)。这些就是竞赛中的原始图片。因为比赛从2005年起开始举办,图片一直在积累,所以图片的文件名命名方式为 年份_编号.jpg
,图片横跨了2007-2012年。
图像标注
对于 JPEGImages 文件夹中图片。按照比赛任务分别进行了目标检测标注、语义分割标注、实例分割标注,标注产生了下面几个文件夹:
- Annotations
- SegmentationClass
- SegmentationObject
我们以 JPEGImages 中一张为 2007_000042.jpg
的图片为例。
该图像经过标注后,得到与之同名的语义分割标注掩模图,存放到 SegmentationClass 文件夹下,以及与之同名的实例分割标注掩模图,存放到 SegmentationObject 文件夹下。为了直观感受,将原始图、语义分割、实例分割三张图片放到了一起,如下图所示:
可以看到同样是火车,语义分割颜色为同色,实例分割则为异色。
由于数据集涉及到20个类别,加上背景,因此分割的颜色有21个色值与之对应,具体如下:
为了兼顾目标检测相关的任务,图像标注后,还会生成与之同名的xml文件,用来记录标注信息。同样的,我们打开 2007_000042.jpg
图片的xml文件,内容如下:
<annotation>
<folder>VOC2012</folder>
<filename>2007_000042.jpg</filename>
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
</source>
<size>
<width>500</width>
<height>335</height>
<depth>3</depth>
</size>
<segmented>1</segmented>
<object>
<name>train</name>
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>263</xmin>
<ymin>32</ymin>
<xmax>500</xmax>
<ymax>295</ymax>
</bndbox>
</object>
<object>
<name>train</name>
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1</xmin>
<ymin>36</ymin>
<xmax>235</xmax>
<ymax>299</ymax>
</bndbox>
</object>
</annotation>
xml是一种非常简单的标记语言,用一对标签包裹文字,来记录信息。更多与xml相关的知识可以访问 菜鸟教程 。
在上面的xml文件中,包含了一系列与图片标注相关的信息。这里仅对比较重要的做出解释:
-
size
size下包括了与图片尺寸相关的信息,其中 :
- width为宽度
- height为高度
- depth为图片的通道数(彩色图像为3通道,灰度图为1通道)。
-
segmented
表示图像是否进行分割,1表示是,0表示否。
-
object
object下包括的是目标检测的相关信息,object可以出现多个。其中:
- name表示物体的名字
- pose表示拍摄的角度
- truncated表示目标检测的框是否被截断,1表示是,0表示否
- difficult 表示目标是否难以识别,1表示是,0表示否
- bndbox 下包括的是目标检测框的位置信息
- xmin,ymin 表示检测框的左上角
- xmax,ymax 表示检测框的右下角
数据集制作
图像标注完毕后,需要将一系列的图片进行分组,并且根据比赛中的四项主要竞赛任务,划分对应的训练集、测试集。数据集的相关内容统一存放到了 ImageSets 文件夹下。正如前面介绍的,一共有四项比赛,所以文件夹下包含了四个子文件夹:
- Action
- Layout
- Main
- Segmentation
在上述的每个文件夹下都包含有下面三种类型的txt文件:
- 以
*_train.txt
命名的表示存储了训练集相关的图片列表 - 以
*_val.txt
命名的表示存储了验证集相关的图片列表 - 以
*_trainval.txt
命名的表示存储了训练集与验证集合并后的相关图片列表
Action
Action文件夹存储的是人体动作识别竞赛中相关的数据集图片列表。
在人体动作识别竞赛中,一共划分了11类动作,具体数据集的划分如下图所示:
对于每一个类别,都包含 *_train.txt
、*_val.txt
、*_trainval.txt
三种文件。
每个txt文件的内容格式如下:
图片名 类别序号 样本属性
其中图片名即为图片的名字,类别序号为上表中的序号,样本属性取1表示正类样本;取-1表示负类样本。
例如,jumping_train.txt 文件中的一行:
2011_003285 4 -1
表示 2011_003285.jpg
属于第4类 Reading 的 负类样本
Layout
Layout文件夹存储的是人体部位识别竞赛中相关的数据集图片列表。
该文件夹下仅有train.txt
、val.txt
、trainval.txt
三个文件。
每个txt文件的内容格式如下:
图片名 包含人数
其中图片名即为图片的名字,包含人数表示图片中有几个人。
例如:
2007_003091 2
表示 2007_003091.jpg
图片中包含2个人。
Main
Main文件夹存储的是图像分类与检测竞赛中相关的数据集图片列表。
包含了20个不同类别,具体数据集的划分如下图所示:
对于每一个类别,都包含 *_train.txt
、*_val.txt
、*_trainval.txt
三种文件。
每个txt文件的内容格式如下:
图片名 识别难易程度
其中图片名即为图片的名字,识别难易程度取1表示图片包含文件名上的对象;取0表示图片包含文件名上的对象,但是难以识别,取-1表示图片不包含文件名上的对象。
例如 aeroplane_train.txt
中的一行:
2008_000008 -1
表示 2008_000008.jpg
中不包含 aeroplane
Segmentation
Segmentation文件夹存储的是图像分割竞赛中相关的数据集图片列表。
该文件夹下仅有train.txt
、val.txt
、trainval.txt
三个文件。
每个txt文件的内容格式如下:
图片名
其中图片名即为图片的名字。
以上内容搜集整理自网络,难免存在问题,欢迎批评指正!读者若想深入了解VOC数据集可直接访问VOC官网下载并阅读开发文档。