理解fasterRCNN模型的构成,并进行训练和预测

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

学习目标

  • 了解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')
        # 获取图
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值