文章目录
- 一、了解VOC
- 1.1 voc数据集下载
- 二、VOC文件结构
- 2.1 Annotations
- 2.2 ImageSets
- 2.3 JPEGImages
- 2.4 SegmentationClass
- 2.5 SegmentationObject
- 三、目标检测任务
- 四、语义分割任务
- 五、实例分割任务
- 六、类别索引与名称对应关系
一、了解VOC
是一种数据集的格式——VOC格式的数据集
PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛,
PASCAL VOC挑战赛主要包括以下几类:
- 图像分类(Object Classification)
- 目标检测(Object Detection)
- 目标分割(Object Segmentation)
- 行为识别(Action Classification) 等。
1.1 voc数据集下载
现在主要使用两个版本的voc,为2007和2012
链接地址:voc官网
voc2007数据集下载
voc2012数据集下载
浏览器或者迅雷(最快)下载。
二、VOC文件结构
在文件夹下按住shift+鼠标右键,打开shell(VOC2012为例)
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图(基于目标)
2.1 Annotations
存放xml格式的标签文件,每个xml对应JPEGImage中的一张图片。并且每个xml中存放的是标记的各个目标的位置和类别(C=20)信息,命名通常与对应的原始图像一样,以(x,y)的格式保存坐标点。可使用labelImg进行标注和查看。
xml文件解析:
<annotation> <folder>VOC2012</folder> <filename>2007_000392.jpg</filename> //文件名 <source> //图像来源(不重要) <database>The VOC2007 Database</database> <annotation>PASCAL VOC2007</annotation> <image>flickr</image> </source> <size> //图像尺寸(长宽以及通道数) <width>500</width> <height>332</height> <depth>3</depth> </size> <segmented>1</segmented> //是否用于分割(在图像物体识别中01无所谓) <object> //检测到的物体 <name>horse</name> //物体类别 <pose>Right</pose> //拍摄角度 <truncated>0</truncated> //是否被截断(0表示完整) <difficult>0</difficult> //目标是否难以识别(0表示容易识别) <bndbox> //bounding-box(包含左下角和右上角xy坐标) <xmin>100</xmin> <ymin>96</ymin> <xmax>355</xmax> <ymax>324</ymax> </bndbox> </object> <object> //检测到多个物体 <name>person</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>198</xmin> <ymin>58</ymin> <xmax>286</xmax> <ymax>197</ymax> </bndbox> </object>
</annotation>
2.2 ImageSets
- Action 存放人的动作
- Layout 存放的是具有人体部位的数据(head、feet等)
- Main 图像物体识别的数据
- Segmentation 可用于分割的数据
训练集与测试集
- train.txt 训练集
均为图片名,没有后缀。以train.txt为例,分为两列,第一列为图像名如00012;第二列为-1和1,-1表示目标在对应的图像没有出现,1则表示出现。 - val.txt 验证集
- trainval.txt 训练和验证集
2.3 JPEGImages
所有的图片,包括训练和测试的图片
共17125张图片

2.4 SegmentationClass
2.5 SegmentationObject
三、目标检测任务
如何使用数据集中的数据进行目标检测呢?
- 首先在VOC2012\ImageSets\Main中,读取txt文件
- xxx_train xxx类的训练集
- xxx_val xxx类的验证集
- xxx_trainval xxx类的训练和验证集
- 在VOC2012\Annotations
接着通过索引在Annotations文件夹下找到对应的标注文件(.xml)。 - 接着通过在标注文件中的filename字段在JPEGImages 文件夹中找到对应的图片。比如在2007_000323.xml文件中的filename字段为2007_000323.jpg,那么在JPEGImages 文件夹中能够找到2007_000323.jpg文件。
四、语义分割任务
如何领用数据集进行语义分割任务呢?
- VOC2012\ImageSets\Segmentation中读取对应的txt文件
└── Segmentation 目标分割图像信息├── train.txt 训练集(1464)├── val.txt 验证集(1449)└── trainval.txt 训练集+验证集(2913)
- 在VOC2012\JPEGImages 找到对应的图片
- 在VOC2012\SegmentationClass找到对应的标注图像(png)
注意,在语义分割中对应的标注图像(.png)用PIL的Image.open()函数读取时,默认是P模式,即一个单通道的图像。在背景处的像素值为0,目标边缘处用的像素值为255(训练时一般会忽略像素值为255的区域),目标区域内根据目标的类别索引信息进行填充,例如人对应的目标索引是15,所以目标区域的像素值用15填充。
五、实例分割任务
注意,在实例分割中对应的标注图像(.png)用PIL的Image.open()函数读取时,默认是P模式,即一个单通道的图像。在背景处的像素值为0,目标边缘处或需要忽略的区域用的像素值为255(训练时一般会忽略像素值为255的区域)。然后在Annotations文件夹中找到对应的xml文件,解析xml文件后会得到每个目标的信息,而对应的标注文件(.png)的每个目标处的像素值是按照xml文件中目标顺序排列的。如下图所示,xml文件中每个目标的序号是与标注文件(.png)中目标像素值是对应的。
六、类别索引与名称对应关系
{"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
}
参考博客:链接: 参考

















