摘要:
合集:AI案例-CV-计算机服务业
数据集:Visual Object Classes Challenge (VOC) 数据集
数据集价值:支持计算机视觉的检测、分割、人体布局、动作识别等。
一、数据集介绍
PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛。PASCAL全称为:Pattern Analysis, Statical Modeling and Computational Learning/模式分析、统计建模和计算学习。Visual Object Classes Challenge (VOC) 数据集是一个由欧盟资助的网络组织举办的世界级计算机视觉挑战赛所使用的数据集。
PASCAL VOC从2005年开始举办挑战赛,每年的内容都有所不同,直到2012年最后一次举办。从最开始的分类,到后面逐渐增加检测,分割,人体布局,动作识别(Object Classification 、Object Detection、Object Segmentation、Human Layout、Action Classification)等内容,数据集的容量以及种类也在不断的增加和改善。该项挑战赛催生出了一大批优秀的计算机视觉模型(尤其是以深度学习技术为主的)。很多优秀的计算机视觉模型比如:分类,定位,检测,分割,动作识别等模型都是基于PASCAL VOC挑战赛及其数据集上推出的,尤其是一些目标检测模型(比如大名鼎鼎的R-CNN系列,以及后续的YOLO,SSD等模型)。

20个类别/Object
数据集共包含20个类别,涵盖人、车、飞机、动物等常见物体/Object。2007年和2012年的数据集是研究者最常使用的,其中2012年的数据集包含11,530张图片,27,450个目标检测标签和6,929个分割标签。
20种类别对应的值定义如下:
• person • bird, cat, cow, dog, horse, sheep • aeroplane, bicycle, boat, bus, car, motorbike, train • bottle, chair, dining table, potted plant, sofa, tv/monitor
5个目标任务
制作数据集有5个主要目标任务:
- 分类:对于每个类别,预测在测试图像中是否存在至少一个该类别的对象。
- 检测:对于每个类别,预测测试图像中该类别的每个对象的边界框(如果有的话)。
- 分割:对于测试图像中的每个像素,预测包含该像素的对象的类别,或者如果该像素不属于二十个指定类别之一,则预测为“背景”。
- 动作分类:对于每个动作类别,预测测试图像中指定的人(由其边界框指示)是否在执行相应的动作。
计算机视觉中的分割任务是指将图像中的每个像素分配到特定的类别中,以实现图像中不同对象的自动分割和识别。分割任务的类型包括:
- 语义分割
- 目标:将图像中的每个像素分配到一个预定义的类别中。
- 应用:自动驾驶、机器人视觉、卫星图像分析等。
- 示例:区分图像中的行人、车辆、建筑物等。
- 实例分割
- 目标:不仅区分不同类别的像素,还要区分同一类别中的不同实例。
- 应用:需要精确识别和分割多个相同类型对象的场景。
- 示例:在人群中识别并分割出每一个人的轮廓。
- 全景分割
- 目标:结合语义分割和实例分割,同时处理对象级别的分割和像素级别的分类。
- 应用:复杂场景的理解和分析。
- 示例:在自然风景照片中同时识别并分割出树木、动物以及不同的地表类型。
10个动作类别
有10个动作类别:跳跃;打电话;演奏乐器;阅读;骑自行车或摩托车;骑马;跑步;拍照;使用电脑;走路。此外,有些人在执行“其他”动作(以上都不是),并作为干扰项。
2个尝试目标任务
此外,还有两个“尝试者/taster”目标任务:
- 无框动作分类:对于每个动作类别,预测测试图像中指定的人是否在执行相应的动作。人只由位于其身体某处的单个点指示,而不是由紧密的边界框指示。
- 人体布局:对于测试图像中的每个“人”对象(由人的边界框指示),预测身体部位(头/手/脚)的存在/不存在,以及这些部位的边界框。
二、数据集构成
数据集包括以下文件目录:
- 图像文件 (JPEGImages):存储原始图像文件。总共17,125 个文件。
- 标注文件 (Annotations):以XML格式存储,包含图像中目标的详细信息,如位置、类别等。
- 数据集划分文件 (ImageSets):包含数据集的划分信息,如训练集、验证集和测试集的图像列表。
- 分割类图像 (SegmentationClass):存储按照类别分割的图像。总共2,913 个文件。SegmentationClass侧重于语义分割,即区分不同的语义类别。
- 分割对象图像 (SegmentationObject):存储按照Object/目标分割的图像。总共2,913 个文件。而SegmentationObject则侧重于实例分割,即区分不同的物体实例并精确标注其轮廓。
JPEGImages文件夹
JPEGImages 文件夹中包含了PASCAL VOC所提供的所有原始图片信息,包括了训练图片和测试图片。这些图像都是以“年份_编号.jpg”格式命名。图片的像素尺寸大小不一,一般为(横向图)500×375或(纵向图)375×500;基本不会偏差超过100。在之后的训练中,第一步就是将这些图片都大小转换成300×300或500×500,所有原始图片不能远离标准过多。
Annotations文件夹
标注文件以xml 文件的形式,存放标签文件,文件名与图片名是一样的,6位整数。
ImageSets文件夹
ImageSets文件夹存放数据集的划分文件。
包含三个子文件夹 Layout,Main,Segmentation,其中Main文件夹存放的是用于分类和检测的数据集分割文件,Layout文件夹用于 person layout任务,Segmentation用于分割任务。
.
├── Layout
│ ├── test.txt
│ ├── train.txt
│ ├── trainval.txt
│ └── val.txt
├── Main
│ ├── aeroplane_test.txt
│ ├── aeroplane_train.txt
│ ├── aeroplane_trainval.txt
│ ├── aeroplane_val.txt
│ ├── bicycle_test.txt
│ ├── bicycle_train.txt
│ ├── bicycle_trainval.txt
│ ├── bicycle_val.txt
│ ├── bird_test.txt
│ ├── bird_train.txt
│ ├── bird_trainval.txt
│ ├── bird_val.txt
│ ├── boat_test.txt
│ ├── boat_train.txt
│ ├── boat_trainval.txt
│ ├── boat_val.txt
│ ├── bottle_test.txt
│ ├── bottle_train.txt
│ ├── bottle_trainval.txt
│ ├── bottle_val.txt
│ ├── bus_test.txt
│ ├── bus_train.txt
│ ├── bus_trainval.txt
│ ├── bus_val.txt
│ ├── car_test.txt
│ ├── car_train.txt
│ ├── car_trainval.txt
│ ├── car_val.txt
│ ├── cat_test.txt
│ ├── cat_train.txt
│ ├── cat_trainval.txt
│ ├── cat_val.txt
│ ├── chair_test.txt
│ ├── chair_train.txt
│ ├── chair_trainval.txt
│ ├── chair_val.txt
│ ├── cow_test.txt
│ ├── cow_train.txt
│ ├── cow_trainval.txt
│ ├── cow_val.txt
│ ├── diningtable_test.txt
│ ├── diningtable_train.txt
│ ├── diningtable_trainval.txt
│ ├── diningtable_val.txt
│ ├── dog_test.txt
│ ├── dog_train.txt
│ ├── dog_trainval.txt
│ ├── dog_val.txt
│ ├── horse_test.txt
│ ├── horse_train.txt
│ ├── horse_trainval.txt
│ ├── horse_val.txt
│ ├── motorbike_test.txt
│ ├── motorbike_train.txt
│ ├── motorbike_trainval.txt
│ ├── motorbike_val.txt
│ ├── person_test.txt
│ ├── person_train.txt
│ ├── person_trainval.txt
│ ├── person_val.txt
│ ├── pottedplant_test.txt
│ ├── pottedplant_train.txt
│ ├── pottedplant_trainval.txt
│ ├── pottedplant_val.txt
│ ├── sheep_test.txt
│ ├── sheep_train.txt
│ ├── sheep_trainval.txt
│ ├── sheep_val.txt
│ ├── sofa_test.txt
│ ├── sofa_train.txt
│ ├── sofa_trainval.txt
│ ├── sofa_val.txt
│ ├── test.txt
│ ├── train_test.txt
│ ├── train_train.txt
│ ├── train_trainval.txt
│ ├── train.txt
│ ├── train_val.txt
│ ├── trainval.txt
│ ├── tvmonitor_test.txt
│ ├── tvmonitor_train.txt
│ ├── tvmonitor_trainval.txt
│ ├── tvmonitor_val.txt
│ └── val.txt
└── Segmentation
├── test.txt
├── train.txt
├── trainval.txt
└── val.txt
3 directories, 92 files
主要介绍一下Main文件夹中的组织结构,先来看以下这几个文件:
├── Main
│ ├── train.txt 写着用于训练的图片名称 共2501个
│ ├── val.txt 写着用于验证的图片名称 共2510个
│ ├── trainval.txt train与val的合集 共5011个
│ ├── test.txt 写着用于测试的图片名称 共4952个
里面的文件内容是下面这样的:以train.txt文件为例:
000012
000017
000023
000026
000032
000033
000034
000035
000036
000042
……
……
009949
009959
009961
就是对数据库的划分,这一部分图片用于训练/train,其他的用作验证/val,测试/test等。
Main文件夹中剩下的文件很显然就是每一类别在train或val或test中的真实类别/ground truth,这个真实类别/ground truth是为了方便分类任务而提供的;如果是目标检测的话,使用的是上面的xml标注文件。说明:“ground truth”在计算机视觉和机器学习领域通常指的是“真实标签”或“基准真值”。它是指数据集中每个样本的真实类别或属性,用于评估模型的性能。例如,在图像分类任务中,“ground truth”就是图像实际所属的类别标签。
├── Main
│ ├── aeroplane_test.txt 写着用于训练的图片名称 共2501个,指定正负样本
│ ├── aeroplane_train.txt 写着用于验证的图片名称 共2510个,指定正负样本
│ ├── aeroplane_trainval.txt train与val的合集 共5011个,指定正负样本
│ ├── aeroplane_val.txt 写着用于测试的图片名称 共4952个,指定正负样本
……
……
里面文件是这样的(以aeroplane_train.txt为例):
000012 -1
000017 -1
000023 -1
000026 -1
000032 1
000033 1
000034 -1
000035 -1
000036 -1
000042 -1
……
……
009949 -1
009959 -1
009961 -1
前面一列是训练集中的图片名称,这一列跟train.txt文件中的内容是一样的,后面一列是标签,即训练集中这张图片是不是aeroplane,是的话为1,否则为-1。
其他所有的 (class)_(imgset).txt 文件都是类似的。
(class)_train
存放的是训练使用的数据,每一个class都有2501个train数据。(class)_val
存放的是验证使用的数据,每一个class都有2510个val数据。(class)_trainval
将上面两个进行了合并,每一个class有5011个数据。(class)_test
存放的是测试使用的数据,每一个class有4952个test数据。
所有文件都 指定了正负样本,每个class的实际数量为正样本的数量,train和val两者没有交集。
三、标注信息
数据集的标注比较谨慎,有专门的标注团队,并遵从统一的标注标准。标注的属性信息包括:
filename :文件名 source,owner:图片来源,及拥有者 size:图片大小 segmented:是否分割 object:表明这是一个目标,里面的内容是目标的相关信息 name:对象的名称,总共20个类别
actions: 动作
pose:拍摄角度:front, rear, left, right, unspecified truncated:目标是否被截断(比如在图片之外),或者被遮挡(超过15%) difficult:检测难易程度,这个主要是根据目标的大小,光照变化,图片质量来判断 difficult 标签示例:图中白色虚线,被标记为 difficult。
bndbox:bounding box 的左上角点和右下角点的4个坐标值。
以2012_004331.xml标注文件为例:
<annotation>
<filename>2012_004331.jpg</filename>
<folder>VOC2012</folder>
<object>
<name>person</name>
<actions>
<jumping>1</jumping>
<other>0</other>
<phoning>0</phoning>
<playinginstrument>0</playinginstrument>
<reading>0</reading>
<ridingbike>0</ridingbike>
<ridinghorse>0</ridinghorse>
<running>0</running>
<takingphoto>0</takingphoto>
<usingcomputer>0</usingcomputer>
<walking>0</walking>
</actions>
<bndbox>
<xmax>208</xmax>
<xmin>102</xmin>
<ymax>230</ymax>
<ymin>25</ymin>
</bndbox>
<difficult>0</difficult>
<pose>Unspecified</pose>
<point>
<x>155</x>
<y>119</y>
</point>
</object>
<segmented>0</segmented>
<size>
<depth>3</depth>
<height>375</height>
<width>500</width>
</size>
<source>
<annotation>PASCAL VOC2012</annotation>
<database>The VOC2012 Database</database>
<image>flickr</image>
</source>
</annotation>
四、许可协议
VOC数据包括从flickr网站获取的图像。使用这些图像必须遵守相应的flickr使用条款。
致谢
我们衷心感谢以下人员,他们花费了许多长时间为VOC2012数据库提供标注: Yusuf Aytar、Lucia Ballerini、Hakan Bilen、Ken Chatfield、Mircea Cimpoi、Ali Eslami、Basura Fernando、Christoph Godau、Bertan Gunyel、Phoenix/Xuan Huang、Jyri Kivinen、Markus Mathias、Kristof Overdulve、Konstantinos Rematas、Johan Van Rompay、Gilad Sharir、Mathias Vercruysse、Vibhav Vineet、Ziming Zhang、Shuai Kyle Zheng。 我们还要感谢Yusuf Aytar持续开发和维护评估服务器,以及Ali Eslami对结果的分析。
五、获取案例套装
文件包大小:1.9 GB