学习目标
- 了解VOC数据集的应用
- 理解fasterRCNN模型的构成
- 能够利用fasterRCNN网络模型进行训练和预测

1. VOC数据集简介

Pascal VOC数据集作为基准数据,在目标检测中常被使用到,很多优秀的计算机视觉模型比如分类,定位,检测,分割,动作识别等模型都是基于PASCAL VOC挑战赛及其数据集上推出的,尤其是一些目标检测模型(比如RCNN系列,以及后面要介绍的YOLO,SSD等)。
1.1 数据情况
常用的版本有2007和2012两个,在这里我们使用VOC2007作为案例实现的数据,该数据集总共有四大类,20个小类,如下图所示:

- 从2007年开始,PASCAL VOC每年的数据集都是这个层级结构
- 总共四个大类:vehicle,household,animal,person
- 总共20个小类,预测的时候是只输出图中黑色粗体的类别
组织结构如下图所示:

- Annotations 进行 detection 任务时的标签文件,xml 形式,文件名与图片名一一对应
- ImageSets 包含三个子文件夹 Layout、Main、Segmentation,其中 Main 存放的是分类和检测的数据集分割文件
- JPEGImages 存放 .jpg 格式的图片文件
- SegmentationClass 存放按照 class 分割的图片
- SegmentationObject 存放按照 object 分割的图片
我们使用的就是Annotations和JPEGImages两部分内容,另外我们通过Main文件夹下的文本文件获取对应的训练集及验证集数据,内容如下所示:

- train.txt 写着用于训练的图片名称, 共 2501 个
- val.txt 写着用于验证的图片名称,共 2510 个
- trainval.txt train与val的合集。共 5011 个
1.2 标注信息
数据集的标注有专门的标注团队,并遵从统一的标注标准,标注信息是用 xml 文件组织,如下图所示:

标注信息如下所示:
<annotation>
<!--数据集版本位置-->
<folder>VOC2007</folder>
<!--文件名-->
<filename>000001.jpg</filename>
<!--文件来源-->
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
<flickrid>341012865</flickrid>
</source>
<!--拥有者-->
<owner>
<flickrid>Fried Camels</flickrid>
<name>Jinky the Fruit Bat</name>
</owner>
<!--图片大小-->
<size>
<width>353</width>
<height>500</height>
<depth>3</depth>
</size>
<!--是否分割-->
<segmented>0</segmented>
<!--一个目标,里面的内容是目标的相关信息-->
<object>
<!--object名称,20个类别-->
<name>dog</name>
<!--拍摄角度:front, rear, left, right。。-->
<pose>Left</pose>
<!--目标是否被截断,或者被遮挡(超过15%)-->
<truncated>1</truncated>
<!--检测难易程度-->
<difficult>0</difficult>
<!--bounding box 的左上角点和右下角点的坐标值-->
<bndbox>
<xmin>48</xmin>
<ymin>240</ymin>
<xmax>195</xmax>
<ymax>371</ymax>
</bndbox>
</object>
<!--一个目标,里面的内容是目标的相关信息-->
<object>
<name>person</name>
<pose>Left</pose>
<!--目标是否被截断,或者被遮挡(超过15%)-->
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>8</xmin>
<ymin>12</ymin>
<xmax>352</xmax>
<ymax>498</ymax>
</bndbox>
</object>
</annotation>
2 数据集解析
该数据集的解析在fasterRCNN/detection/datasets/pascal_voc.py中:

接下来我们分析整个的实现过程:
2.1 指定数据集
根据指定的数据集,获取对应的文件信息,进行处理,其中main中txt中的内容如下所示:

因此我们根据txt中的内容加载对应的训练和验证集:
def load_labels(self):
# 根据标签信息加载相应的数据
if self.phase == 'train':
txtname = os.path.join(
self.data_path, 'ImageSets', 'Main', 'trainval.txt')
else:
txtname = os.path.join(
self.data_path, 'ImageSets', 'Main', 'val.txt')
# 获取图

本文介绍VOC数据集的应用与Faster R-CNN模型的构成,包括数据集解析、模型训练与预测全流程。重点讲解如何利用Faster R-CNN进行目标检测。
最低0.47元/天 解锁文章
705





