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) 等。

PASCAL VOC2012数据集介绍与制作自己的数据集_第1张图片
简单看下PASCAL VOC数据集中的一些挑战项目

  • 图像分类与目标检测任务
  • 分割任务,注意,图像分割一般包括语义分割、实例分割和全景分割,实例分割是要把每个单独的目标用一种颜色表示(下图中间的图像),而语义分割只是把同一类别的所有目标用同一颜色表示(下图右侧的图片)。
    PASCAL VOC2012数据集介绍与制作自己的数据集_第2张图片
  • 行为识别任务
    PASCAL VOC2012数据集介绍与制作自己的数据集_第3张图片
  • 人体部位检测任务
    PASCAL VOC2012数据集介绍与制作自己的数据集_第4张图片

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

2 Pascal VOC数据集目标类别

在Pascal VOC数据集中主要包含20个目标类别,下图展示了所有类别的名称以及所属超类。
PASCAL VOC2012数据集介绍与制作自己的数据集_第5张图片

3 数据集下载与目录结构

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

打开链接后如下图所示,只用下载training/validation data (2GB tar file)文件即可。

PASCAL VOC2012数据集介绍与制作自己的数据集_第6张图片
下载后将文件进行解压,解压后的文件目录结构如下所示:

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图(基于目标)

目标检测主要关注Main文件夹下的train.txt,val.txt,trainval.txt,文件里记录的是对应标注文件的索引,每一行对应一个索引信息。如下图所示,

一般用train.txt文件训练,val.txt 进行验证, 用测试文件进行测试,其中测试集一般是不公开的(目前已公开),所以我们通常基于train.txt进行训练,val.txt进行测试。为啥会有trainval.txt文件呢?因为PASCAL VOC竞赛要求用trainval.txt进行训练,然后利用PASCAL的测试文件进行测试:

4 目标检测任务

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

  • 首先在Main文件中,读取对应的txt文件(注意,在Main文件夹里除了train.txt、val.txt和trainval.txt文件外,还有针对每个类别的文件,例如bus_train.txt、bus_val.txtbus_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记录了该目标的边界框信息。
  • 接着通过在标注文件中的filename字段在JPEGImages文件夹中找到对应的图片。比如在2007_000323.xml文件中的filename字段为2007_000323.jpg,那么在JPEGImages文件夹中能够找到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文件。
  • 根据索引在SegmentationClass文件中找到相应的标注图像(.png)。还是以2007_000323为例,可以找到2007_000323.png文件。

    注意,在语义分割中对应的标注图像(.png)用PIL的Image.open()函数读取时,默认是P模式,即一个单通道的图像。在背景处的像素值为0,目标边缘处用的像素值为255(训练时一般会忽略像素值为255的区域),目标区域内根据目标的类别索引信息进行填充,例如人对应的目标索引是15,所以目标区域的像素值用15填充

    下面给出在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
}

7 标注自己的数据集

标注图像的软件很多,在github上有很多开源的项目。推荐labelImg
, 这个标注软件目前用的比较多。

在github中搜索label,可以看到很多开源的标注文件.

PASCAL VOC2012数据集介绍与制作自己的数据集_第7张图片

其中labelImg标注生成的是.xml文件,labelme生成的是json文件,为了保持和PASCAL标注格式一样,因此一般推荐labelImg

7.1 labelImg的使用

labelImg
,可以通过源码进行构建,也可以通过
pip方式进行安装
PASCAL VOC2012数据集介绍与制作自己的数据集_第8张图片
本文主要通过pip方式进行安装

pip install labelImg
labelImg
labelImg [IMAGE_PATH][PRE-DEFIND CLASS FILE]

准备两个文件:一个是图片文件,一个类别标签文件

安装好labelImg,在命令后窗口输入,如

labelImg ./imageDIR  ./classes.txt  

classes.txt文件,把所有类别一行行写入,如:

dog
person
cat
tv
car
meatballs
tomato 
ribs
pulled pork

PASCAL VOC2012数据集介绍与制作自己的数据集_第9张图片

现在就可以依次对每一张图片进行标注了。

其次,开始标注之前,可点击“查看”选项进行一些基本设置,可以让标注过程变得简单且快速

  • 自动保存模式:当你切换到下一张图片时,就会自动把上一张标注的图片标签自动保存下来,这样就不用每标注一样图片都按Ctrl+S(或者按保存按钮)保存一下了;
  • 单一类别显示:当你画完标注框以后不用跳出预设的一些类别让你选择,这样对单一类别操作来说更快速;
  • 显示类别:标注好图片之后,会把框和标签都显示出来;
  • 专家模式:这样标注的十字架就会一直悬浮在窗口,不用每次标完一个目标,再按一次W快捷键,调出标注的十字架。
    操作步骤
  • 英文输入法下,点击快捷键w,开始创建矩形框;
  • 单击并释放鼠标左键以选择要注释矩形框的区域;
  • 您可以使用鼠标右键拖动矩形框来复制或移动它;
  • 批注将保存到指定的文件夹中;
  • 英文输入法下,点击快捷键d,切换到下一张图片,继续标注。
    注:您可以编辑data/predefined_classes.txt文件来加载预定义的类,创建完矩形
    框以后,会跳出预定义的类别,我们只要选择对应的类别标签即可。

快捷键操作

  • Ctrl + u 选择要标注的文件目录;
  • Ctrl + r 选择标注好的标签存放的目录;
  • Ctrl + s 保存标注好的标签(自动保存模式下会自动保存);
  • Ctrl + d 复制当前标签和矩形框;
    Ctrl + Shift + d 删除当前图片;
  • Space 将当前图像标记为已验证;
  • w 开始创建矩形框;
  • d 切换到下一张图;
  • a 切换到上一张图;
  • del 删除选中的标注矩形框;
  • Ctrl++ 放大图片;
  • Ctrl-- 缩小图片;
  • ↑→↓← 移动选中的矩形框的位置;
    注:验证图片,当按空格键时,用户可以将图像标记为已验证,绿色背景将出现。这是在自动创建数据集时使用的,用户可以通过所有的图片并标记它们,而不是注释它们。

参考

https://blog.csdn.net/qq_37541097/article/details/115787033?spm=1001.2014.3001.5502

你可能感兴趣的:(object,detection,目标检测)