【目标检测算法系列】3、Fast R-CNN算法

​前面咱们学习了算法

【目标检测算法系列】1、R-CNN算法网络

【目标检测算法系列】2、SPP-Net算法框架

这篇文章咱们来介绍下Fast R-CNN.机器学习

Fast R-CNN是一种用于目标检测的快速的基于区域的卷积网络方法。它参考了SPP-Net的一些思想,对R-CNN算法进行了进一步的改进优化。
函数

做者论文中提到,Fast R-CNN经过VGG16的训练结果,比R-CNN快9倍,比SPP-Net快3倍,测试时间上,比R-CNN快213倍,比SPP-Net快10倍,而且在PASCAL VOC上获得了更高的精度。post

1、RCNN算法存在问题

首先,咱们再次说明下R-CNN算法中的缺点学习

  1. 候选框选择算法严重耗时
    测试

  2. 对于每一个候选框都须要输入到CNN网络中进行特征提取,存在大量重复操做,不能共享计算优化

  3. 训练过程是多级流水线。从而使一些步骤后的输出结果须要先写入磁盘,而后再做为下一步的输入,空间开销大3d

  4. 进行特征提取时须要固定输入图像尺寸,从而致使一些特征的丢失,改变。

上述问题使得R-CNN在训练时,时间和空间上的开销都很大,而且目标检测的速度也很慢。

2、Fast R-CNN的改进点

针对R-CNN的上述缺点,Fast R-CNN作了以下改进:

一、特征提取时的参数共享

二、引入ROI pooling层来提取固定长度的特征向量

三、将特征提取、目标分类与Bounding-box回归使用同一个CNN网络,采用多任务的方式来同时进行目标类别分类与窗口位置回归。从而实现了端到端的多任务训练(这块除过候选框的提取)

四、使用SVD对网络末尾中并行的全链接层进行分解,减小计算复杂度,提升检测速度

3、Fast R-CNN总体步骤

Fast R-CNN的总体框架以下图:

一、预训练CNN网络模型

和R-CNN同样,在ImageNet数据集上预训练CNN网络模型,做者训练了多个网络模型,这块咱们使用VGG16模型。

二、候选区域提取

Fast R-CNN一样使用选择性搜索算法来提取出2000个候选框。具体如何提取,以前R-CNN中有介绍(【目标检测算法系列】1、R-CNN算法

三、使用一个完整的CNN网络模型来进行特征提取,目标分类以及Bounding-box回归

相对于R-CNN使用流水线的模式, Fast R-CNN则使用了一个完整的CNN网络模型来进行特征提取,目标分类以及Bounding-box回归,从而实现了端到端的过程。具体模型内部流程图以下:

首先,看下这个CNN模型的构造,在VGG16的基础上,将卷积模块的最后一层最大池化层去掉,替换为一个ROI池化层。将原始VGG16网络最后一个全链接层与softmax层替换为两个同级层(全链接层和K+1个类别的softmax以及类别特定的Bounding-box回归)。

4、具体细节实现

接下来,看下具体实现细节:

  1. 首先,模型接收两个输入,原始图像与对应全部的候选框。先将原始图片通过多个卷积层和池化层后,提取出feature map。

  2. 经过映射关系,找到对应候选框在feature map中映射的区域。

  3. 将每个候选框所对应的feature map通过ROI池化层提取出固定长度的特征向量。

    咱们这块看下ROI池化层的具体实现,ROI池化层,其实就是SPPNet中的空间金字塔池化层的简化版。在ROI池化层中,将输入的不一样ROI(候选框所对应的feature map)划分为H*W个块,而后在每一个块中使用最大池化层提取出一个特征,对应池化操做独立于每一个feature map通道,最终输出H*W*c(c为通道数)的特征。将输入的特征转换为特征向量喂给后面的全链接层。(对于使用的VGG16为基础模型来讲,这块H*W为7*7)

  4. 在进行全链接层时经过SVD分解来下降计算复杂度。

  5. 在图像分类任务中,主要的计算量是在卷积模块中,而在目标检测模块中,对于一张图片来讲,特征提取只须要进行一次,可是须要针对每一个候选框所对应的feature map,分别进行后续的全链接操做(2000次),从而致使近乎一半的前向计算时间被用于全链接层。因此Fast R-CNN中在进行全链接层时经过SVD分解来下降计算复杂度。具体如何操做?

    设某个全链接层的参数为u*v的矩阵W,将W进行SVD分解,并用前t个特征值来近似代替,以下:

     

    从而使计算复杂度变为u*t+v*t,若是t<min(u,v),则这种分解会减小计算量。这个实际意义,至关于把一个参数量比较大的全链接层拆分为两个参数量比较小的全链接层,以下图所示:

    论文中做者经过实验代表,SVD分解全链接层能使mAP只降低0.3%的状况下提高30%的速度,同时该方法也没必要再执行额外的微调操做

    5. 损失函数的构建

    由于有目标分类和候选框回归两个同级任务,因此对应损失函数也应有分类任务的损失函数和回归任务的损失函数构成。

    首先看分类任务,设 u 为真实的类别标签,u属于(0,1,...K),背景类别标签为0,为Softmax层对应的K+1个输出,为K+1个类别的预测几率。最终,分类任务的损失函数为:

    再看下回归任务,回归任务的输出为

    ,预测的bounding box的中心位置,宽度,高度的转换值(和R-CNN相同),真实bounding box中心位置,宽度,高度的转换值(和R-CNN相同)。最终,回归任务的损失函数为:

    smooth L1损失函数曲线以下图所示,相比于L2损失函数,其对离群点、异常值不敏感


    因此最终Fast R-CNN的损失函数为:

    约定u=0为背景分类,那么u>=1函数表示背景候选区域即负样本不参与回归损失,不须要对候选区域进行回归操做; λ控制分类损失和回归损失的平衡,文中全部实验λ=1.

        这就Fast R-CNN模型的整个流程,虽然,Fast R-CNN改进了R-CNN的一些问题,将检测速度和精度都获得和很大的提升,可是,Fast R-CNN中,仍是有一个能够改进的地方,那就是候选框的提取这块,不论是R-CNN,SPP-Net,仍是Fast R-CNN都是采用的传统的selective search算法,而selective search算法中由于用到图像分割和大量的贪心算法,致使候选框的提取很耗时,另外,由于候选框的提取是独立于CNN网络的一个模块,因此致使Fast R-CNN并非真正意义上的端到端的训练模式。

        因此,咱们很天然的会想到,能不能将候选框的提取也加入到CNN网络中,使用一个CNN网络来进行候选框的提取,分类,以及回归操做,从而实现真正意义上的端到端的学习过程,这就是Faster R-CNN的思想,咱们下次介绍。

            欢迎关注个人我的公众号 AI计算机视觉工坊,本公众号不按期推送机器学习,深度学           习,计算机视觉等相关文章,欢迎你们和我一块儿学习,交流。

                                  

相关文章
相关标签/搜索