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数据集详解视频: 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 VOC数据集中主要包含20个目标类别,下图展示了所有类别的名称以及所属超类。
3 数据集下载与目录结构
下载地址: http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html#devkit
打开链接后如下图所示,只用下载training/validation data (2GB tar file)
文件即可。
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的测试文件
进行测试:
接下来简单介绍下如何使用该数据集中目标检测的数据。
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
记录了该目标的边界框信息。filename
字段在JPEGImages
文件夹中找到对应的图片。比如在2007_000323.xml
文件中的filename
字段为2007_000323.jpg
,那么在JPEGImages
文件夹中能够找到2007_000323.jpg
文件。接下来简单介绍下如何使用该数据集中语义分割的数据。
Segmentarion
文件中,读取对应的txt文件。比如使用train.txt
中的数据进行训练,那么读取该txt文件,解析每一行,每一行对应一个图像的索引。 └── Segmentation 目标分割图像信息
├── train.txt 训练集(1464)
├── val.txt 验证集(1449)
└── trainval.txt 训练集+验证集(2913)
2007_000323
为例,可以找到2007_000323.jpg
文件。SegmentationClass
文件中找到相应的标注图像(.png
)。还是以2007_000323
为例,可以找到2007_000323.png
文件。.png
)用PIL的Image.open()
函数读取时,默认是P
模式,即一个单通道的图像。在背景处的像素值为0
,目标边缘处用的像素值为255
(训练时一般会忽略像素值为255的区域),目标区域内根据目标的类别索引信息进行填充,例如人对应的目标索引是15
,所以目标区域的像素值用15填充{
"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
}
标注图像的软件很多,在github上有很多开源的项目。推荐labelImg
, 这个标注软件目前用的比较多。
在github中搜索label
,可以看到很多开源的标注文件.
其中labelImg标注生成的是.xml
文件,labelme生成的是json
文件,为了保持和PASCAL标注格式一样,因此一般推荐labelImg
labelImg
,可以通过源码进行构建,也可以通过
pip
方式进行安装
本文主要通过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
现在就可以依次对每一张图片进行标注了。
其次,开始标注之前,可点击“查看”选项进行一些基本设置,可以让标注过程变得简单且快速
快捷键操作
https://blog.csdn.net/qq_37541097/article/details/115787033?spm=1001.2014.3001.5502