目标检测任务数据集介绍-PASCAL VOC数据集

 2020-05-17 

最近在做目标检测的相关工作,整理了一下目标检测的数据集,本文就简要介绍目标检测PASCAL VOC数据集,PASCAL VOC比赛在2012年之后已经不再举行了,MS COCO的数据在应用上也替代了VOC数据,不过由于数据量不是很大(VOC2007的数据全部压缩包下载总共869MB,同时也发布了test集的标注数据),在做算法demo或者复现别人算法的时候,使用还是很方便的。

PASCAL VOC数据集

  • 简介
  • 数据下载
    • VOC 2007
    • VOC 2012
  • 数据内容
    • VOC2007

简介

官网地址:http://host.robots.ox.ac.uk/pascal/VOC/
首先,不管想了解什么数据集或是算法,第一个要找的就是官方的/原作者发布的链接。
在这里插入图片描述
进入官网,PASCAL VOC的全称为Pattern Analysis, Statistical Modelling and Computational Learning Visual Object Classes。也就是一个目标分类任务。
PASCAL VOC任务做了以下几件事:

  1. 提供了一个用于目标类型识别的标准数据集
  2. 提供了一个使用该数据集以及标注数据的通用工具
  3. 评价不同算法提交的结果的精度
  4. 05-12年运营了一个目标识别比赛

目前比赛已经不再进行,但是结果评价服务器仍然可以使用。详实的介绍可以阅读官方文档everingham10、everingham15。分别是10年和15年介绍该项目的官方论文。
VOC比赛数据集也不是一成不变的,随着比赛一直在发展变化,下表简介了VOC数据发展的主要概况。

年份 统计信息 新发展变化 注意
2005 只有四类:自行车、汽车、摩托车、人;训练/验证/测试数据:1578张影像 两个任务:分类和目标检测 数据从现有公开数据得到,内容没有flickr影像丰富,目前该数据集已弃用
2006 10类目标;训练/验证/测试数据:共2618张图片;包含4754个标注目标 数据来自flickr与MSRC数据集 MSRC的数据内容比flickr的单调,目前该数据集也已弃用
2007 20类目标(在后文详细介绍);训练/验证/测试数据:共9963张图片,包含24640个标注目标 数据类别数量从10增长到20;引入了分割任务、人体部位检测的taster任务;标注数据中加入了Truncation(截断)标签;分类任务的精度评价改成了Average Precison,以前是ROC-AUC 确定了20个类别,以后的数据集都固定为20个类别;这是最后一年公开teset数据标注数据的比赛
2008 20个类别;训练/验证数据与测试数据的比例依旧划分为1:1;训练/测试数据含有4340张图片,包含10363个标注对象 加入了Occlusion标签;test测试数据不再公开;分割和人体部位检测数据集影像包含相应的VOC2007中的图片
2009 20个类别;训练/验证数据集共有7054张图片,包含有17218个ROI标注对象和3211个分割标注 自此以后所有的比赛数据都在前一年影像数据的基础上做增强,之前每年的数据都是全新的;每年影像数量都在增加;分割任务成了一个标准的比赛内容(之前只是一个taster,非正式比赛内容) difficult标签没有提供;测试数据没有公开
2010 20个类别;训练/验证数据共有10103张图片,包含有23374个ROI标注对象和4203个分割标注 引入了行为分类taster任务;基于ImageNet的大规模分类任务被引入;亚马逊劳务众包平台“Amazon MechanicalTurk”被用于前期标注 改变了计算AP的方法;测试数据集没有公开。
2011 20个类别;训练/验证数据共有11530张图片,包含有27450个ROI标注对象和5034个分割标注 行为分类taster任务扩展到了10个类别+‘其他’类 人体部位标注并不“完全”,只有一部分人标注了人体部位
2012 20个类别;训练/验证数据集有11530张图片,包含有27450个ROI标注对象和6929个分割标注 增加了大量分割数据;在人体活动分类数据集中也标注了相应人体的参考点 分类、目标检测和人体部位检测数据同VOC2011.

注:20个类别如下图所示(everingham10),可以分为四大类:交通工具;房屋设施;动物;人。其中上角标1,2,3分别表示该类别已在2005,2006,2007年中出现,自2007年后20个类别就确定下来,以后VOC数据一直以这20个类别为准。
在这里插入图片描述

数据下载

VOC数据集在比赛进行期间,每年都在更换数据,目前使用比较广泛的是07、12的数据,以这两个数据集为例介绍数据下载。

VOC 2007

下载2007数据,首先进入每年的挑战赛网页,点击The VOC2007 Challenge
在这里插入图片描述
进入2007挑战赛页面后,在Development Kit下下载所需数据。
在这里插入图片描述
需要下载内容(即下载链接,点击以下各部分链接可直接下载):

  1. 训练/验证数据集 training/validation data (450MB tar file)
  2. 测试数据 annotated test data(430MB tar file) VOC2007数据集公开了测试集的标注数据
  3. 开发工具代码及说明文档development kit code and documentation(250KB tar file)
  4. 数据说明文档PDF documentation(120KB PDF)

下载后的压缩文件如图所示:
在这里插入图片描述

VOC 2012

同2007数据,首先进入每年的挑战赛网页,点击The VOC2012 Challenge.
进入2012挑战赛页面后,找到数据Data介绍部分。
在这里插入图片描述
训练/验证数据的下载与使用工具development kit的下载在一起链接
在这里插入图片描述
这里我们需要下载三个部分:

  1. 训练和验证数据集training/validation data (2GB tar file)
  2. 开发工具代码和文档development kit code and documentation (500KB tar file)
  3. PDF说明文档PDF documentation (500KB PDF)

数据内容

VOC2007

以2007年数据为例介绍VOC的数据内容与数据结构。
VOC2007总共有四个任务:Classification(分类);Detection(目标检测);Segmentation Taster(分割);Person Layout Taster(人体部位识别)。

首先解压缩所有的下载压缩包,trainval、test、devkit,在同一个文件夹中解压缩到当前目录,会自动将所有的内容都解压缩在一个VOCdevkit文件夹中。
在这里插入图片描述
VOCdevkit文件夹的目录结构如下:
在这里插入图片描述
其中local和results为比赛提交数据所需文件,我们只关注存储数据集的其他两个文件。VOC2007中存储的即为数据集,VOCcode文件夹以及其他.m文件为使用工具的matlab的代码。
在这里插入图片描述
进入VOC2007文件夹,依次查看其中的内容。
Annotations中存储的是.xml文件,即标注数据,标注了影像中的目标类型以及边界框bbox;
ImageSet中存储的都是一些txt文件,其实就是各个挑战任务所使用的图片序号,VOC比赛是将所有的图片存在一起,然后不同的挑战任务使用的图片就用一个txt存储使用图片的文件名即可;
JPEGImages文件夹中存储了数据集的所有图片;
SegmentationClass存储了类别分割的标注png。
SegmentationObject存储了实例分割的标注png。两者的区别是类别分割只区分物体的类别,同样类别的两个不同物体的像素分配同一个值;而实例分割不只区分目标的类别,而且同样类别的两个不同的对象,也要进行区分。例如两个人,在类别分割中都标注为person,而实例分割就需要分割为person1、person2.
在这里插入图片描述

  1. Annotations
    Annotations文件夹中为记载了标注信息的xml文件。
    在这里插入图片描述
    打开000001.xml文件,该xml文件名同标注的图像文件名,其内容如下:
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
43
44
<annotation>
    <folder>VOC2007</folder>
    <filename>000001.jpg</filename>
    <source>
        <database>The VOC2007 Database</database>
        <annotation>PASCAL VOC2007</annotation>
        <image>flickr</image>
        <flickrid>341012865</flickrid>
    </source>
    <owner>
        <flickrid>Fried Camels</flickrid>
        <name>Jinky the Fruit Bat</name>
    </owner>
    <size>
        <width>353</width>
        <height>500</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>dog</name>
        <pose>Left</pose>
        <truncated>1</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>48</xmin>
            <ymin>240</ymin>
            <xmax>195</xmax>
            <ymax>371</ymax>
        </bndbox>
    </object>
    <object>
        <name>person</name>
        <pose>Left</pose>
        <truncated>1</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>8</xmin>
            <ymin>12</ymin>
            <xmax>352</xmax>
            <ymax>498</ymax>
        </bndbox>
    </object>
</annotation>

依次查看存储内容:
folder、filename为路径和文件名;
source存储了文件来源相关信息;
owner为文件所有者;
以上为标注图片的相关背景信息,可不专门关注;
size存储了文件大小 width宽度、height高度、depth维度(即灰度图像或RGB三通道)
segmentation为1、0值判断该图片是否参与分割任务;
object为一个标注对象的相关信息,此处为文件主要信息,
name 对象名,pose 观察角度(应用于某些分类器从特定的视觉角度分类目标),truncated 标注对象是否为截断的(如标注对象的bbox标注区域由于遮挡或其他问题只为目标整体的一部分,则该标注为1,反之为0),difficult 是否为识别困难目标
bndbox为边界框坐标,分别为左上角和右下角的x,y坐标
然后依次记录每个object的标注信息。
以上即为xml目标检测标注文件中的内容,主要关注1.文件名filename即标注图片名(同xml文件名),2.object标注信息中的name对象名与bndbox边界框坐标。两个信息即可。
其中Layout人体部位识别任务的标注信息也在xml文件中。以000058.jpg图片为例。
在这里插入图片描述
其标注文件000058.xml内容中除了与目标检测任务相同的信息为,还有人体部位part数据,在一个person类object中,part数据分别标注了head、hand、foot三个部位的bndbox边界框:

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
43
44
45
46
47
48
    <object>
        <name>person</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <part>
            <name>head</name>
            <bndbox>
                <xmin>337</xmin>
                <ymin>2</ymin>
                <xmax>382</xmax>
                <ymax>66</ymax>
            </bndbox>
        </part>
        <part>
            <name>hand</name>
            <bndbox>
                <xmin>356</xmin>
                <ymin>190</ymin>
                <xmax>388</xmax>
                <ymax>216</ymax>
            </bndbox>
        </part>
        <part>
            <name>foot</name>
            <bndbox>
                <xmin>335</xmin>
                <ymin>343</ymin>
                <xmax>390</xmax>
                <ymax>373</ymax>
            </bndbox>
        </part>
        <part>
            <name>foot</name>
            <bndbox>
                <xmin>354</xmin>
                <ymin>322</ymin>
                <xmax>406</xmax>
                <ymax>345</ymax>
            </bndbox>
        </part>
        <bndbox>
            <xmin>334</xmin>
            <ymin>1</ymin>
            <xmax>436</xmax>
            <ymax>373</ymax>
        </bndbox>
    </object>

  1. ImageSets
    IamgeSet文件夹中以txt文件存储各个挑战任务所使用的图片。在这里插入图片描述
    进入main目录下的trainval.txt,文件信息即为目标检测train训练与val验证数据集所使用的图片:
    在这里插入图片描述
  2. JPEGImages
    该文件夹中存储了数据集所有的图片,共9963张图片。
    在这里插入图片描述
  3. SegmentationClass
  4. SegmentationObject
    这两个文件夹一个存储语义分割信息,一个存储实例分割信息。两个的区别是,语义分割只分割对象的类别,不区分是否是同一个实例对象;而实例分割,将相同类别的两个对象以不同的标签标注,例如两个人 person类别在语义分割中均为person,而在实例分割中标注为person-1,person-2.
    如下图第一行为SegmentationClass文件,第二行为SegmentationObject,第三行为相应的JPEGImages。
    在这里插入图片描述