PASCAL VOC2012数据集介绍

  • Post author:
  • Post category:其他


之前有在Bilibili上简单介绍过这个数据集,但一直没有写博文,今天抽空总结下,如果不想看文章的,可以看下我在Bilibili上的讲解视频。

Pascal VOC2012数据集详解视频:

https://b23.tv/F1kSCK


Pascal VOC2012官网地址:

http://host.robots.ox.ac.uk/pascal/VOC/voc2012/


官方发表关于介绍数据集的文章 《The PASCALVisual Object Classes Challenge: A Retrospective》:

http://host.robots.ox.ac.uk/pascal/VOC/pubs/everingham15.pdf

pascal voc2012





1 简介

PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛,PASCAL全称:Pattern Analysis, Statical Modeling and Computational Learning,是一个由欧盟资助的网络组织。PASCAL VOC挑战赛主要包括以下几类:

图像分类(Object Classification)



目标检测(Object Detection)



目标分割(Object Segmentation)



行为识别(Action Classification)

等。

  • 图像分类与目标检测任务

    分类与检测
  • 分割任务,注意,图像分割一般包括语义分割、实例分割和全景分割,实例分割是要把每个单独的目标用一种颜色表示(下图中间的图像),而语义分割只是把同一类别的所有目标用同一颜色表示(下图右侧的图片)。

    分割
  • 行为识别任务

    行为分类
  • 人体布局检测任务

    人体布局检测



2 Pascal VOC数据集目标类别

在Pascal VOC数据集中主要包含20个目标类别,下图展示了所有类别的名称以及所属超类。

vocclasses




3 数据集下载与目录结构

下载地址:

http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html#devkit



打开链接后如下图所示,只用下载

training/validation data (2GB tar file)

文件即可。

download

下载后将文件进行解压,解压后的文件目录结构如下所示:

VOCdevkit
    └── VOC2012
         ├── Annotations               所有的图像标注信息(XML文件)
         ├── ImageSets    
         │   ├── Action                人的行为动作图像信息
         │   ├── Layout                人的各个部位图像信息
         │   │
         │   ├── Main                  目标检测分类图像信息
         │   │     ├── train.txt       训练集(5717)
         │   │     ├── val.txt         验证集(5823)
         │   │     └── trainval.txt    训练集+验证集(11540)
         │   │
         │   └── Segmentation          目标分割图像信息
         │         ├── train.txt       训练集(1464)
         │         ├── val.txt         验证集(1449)
         │         └── trainval.txt    训练集+验证集(2913)
         │ 
         ├── JPEGImages                所有图像文件
         ├── SegmentationClass         语义分割png图(基于类别)
         └── SegmentationObject        实例分割png图(基于目标)

注意,

train.txt



val.txt



trainval.txt

文件里记录的是对应标注文件的索引,每一行对应一个索引信息。如下图所示:

txtfile




4 目标检测任务

接下来简单介绍下如何使用该数据集中目标检测的数据。

  • 首先在Main文件中,读取对应的txt文件(注意,在

    Main

    文件夹里除了

    train.txt



    val.txt



    trainval.txt

    文件外,还有针对每个类别的文件,例如

    bus_train.txt



    bus_val.txt



    bus_trainval.txt

    )。比如使用

    train.txt

    中的数据进行训练,那么读取该txt文件,解析每一行。上面说了每一行对应一个标签文件的索引。
   ├── Main                  目标检测分类图像信息
   │     ├── train.txt       训练集(5717)
   │     ├── val.txt         验证集(5823)
   │     └── trainval.txt    训练集+验证集(11540)
  • 接着通过索引在

    Annotations

    文件夹下找到对应的标注文件(.xml)。比如索引为

    2007_000323

    ,那么在

    Annotations

    文件夹中能够找到

    2007_000323.xml

    文件。如下图所示,在标注文件中包含了所有需要的信息,比如

    filename

    ,通过在字段能够在

    JPEGImages

    文件夹中能够找到对应的图片。

    size

    记录了对应图像的宽、高以及channel信息。每一个

    object

    代表一个目标,其中的

    name

    记录了该目标的名称,

    pose

    表示目标的姿势(朝向),

    truncated

    表示目标是否被截断(目标是否完整),

    difficult

    表示该目标的检测难易程度(0代表简单,1表示困难),

    bndbox

    记录了该目标的边界框信息。

2007_000323

  • 接着通过在标注文件中的

    filename

    字段在

    JPEGImages

    文件夹中找到对应的图片。比如在

    2007_000323.xml

    文件中的

    filename

    字段为

    2007_000323.jpg

    ,那么在

    JPEGImages

    文件夹中能够找到

    2007_000323.jpg

    文件。

2007_000323.jpg




5 语义分割任务

接下来简单介绍下如何使用该数据集中语义分割的数据。

  • 首先在Segmentarion文件中,读取对应的txt文件。比如使用

    train.txt

    中的数据进行训练,那么读取该txt文件,解析每一行,每一行对应一个图像的索引。
  └── Segmentation          目标分割图像信息
        ├── train.txt       训练集(1464)
        ├── val.txt         验证集(1449)
        └── trainval.txt    训练集+验证集(2913)
  • 根据索引在

    JPEGImages

    文件夹中找到对应的图片。还是以

    2007_000323

    为例,可以找到

    2007_000323.jpg

    文件。

2007_000323.jpg

  • 根据索引在

    SegmentationClass

    文件夹中找到相应的标注图像(.png)。还是以

    2007_000323

    为例,可以找到

    2007_000323.png

    文件。

    20017_000323.png

    注意,在语义分割中对应的标注图像(.png)用PIL的

    Image.open()

    函数读取时,默认是

    P

    模式,即一个单通道的图像。在背景处的像素值为0,目标边缘处用的像素值为255(训练时一般会忽略像素值为255的区域),目标区域内根据目标的类别索引信息进行填充,例如人对应的目标索引是15,所以目标区域的像素值用15填充。

    segmentation



6 实例分割任务

  • 同样首先在Segmentarion文件中,读取对应的txt文件。比如使用

    train.txt

    中的数据进行训练,那么读取该txt文件,解析每一行,每一行对应一个图像的索引。
  └── Segmentation          目标分割图像信息
        ├── train.txt       训练集(1464)
        ├── val.txt         验证集(1449)
        └── trainval.txt    训练集+验证集(2913)
  • 根据索引在

    JPEGImages

    文件夹中找到对应的图片。这里以

    2007_000032

    为例,可以找到

    2007_000032.jpg

    文件,如下图所示。

    在这里插入图片描述
  • 再根据索引在

    SegmentationObject

    文件夹中找到相应的标注图像(.png)。还是以

    2007_000032

    为例,可以找到

    2007_000032.png

    文件。

    在这里插入图片描述

    注意,在实例分割中对应的标注图像(.png)用PIL的

    Image.open()

    函数读取时,默认是

    P

    模式,即一个单通道的图像。在背景处的像素值为0,目标边缘处或需要忽略的区域用的像素值为255(训练时一般会忽略像素值为255的区域)。然后在

    Annotations

    文件夹中找到对应的xml文件,解析xml文件后会得到每个目标的信息,而对应的标注文件(.png)的每个目标处的像素值是按照xml文件中目标顺序排列的。如下图所示,xml文件中每个目标的序号是与标注文件(.png)中目标像素值是对应的。

在这里插入图片描述




7 类别索引与名称对应关系

下面给出在Pascal VOC数据集中各目标类别名称与类别索引对应关系:

{
	"background": 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": 20
}



版权声明:本文为qq_37541097原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。