目标检测——Fast R-CNN(二)

简介
R-CNN的进阶版Fast R-CNN就是在R-CNN的基础上采纳了Spatial Pyramid Pooling(SPP) 方法,对R-CNN作了改进,使得性能进一步提高。
《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》论文地址:https://arxiv.org/pdf/1406.4729.pdf
《Fast R-CNN》论文地址:https://arxiv.org/pdf/1504.08083.pdf

一、铺垫——SPP Net
在目标检测系列文章的上一篇R-CNN中,我们知道R-CNN在当时虽然取得了不错的成绩,但是其需要改进的地方也很多,比如算法步骤比较繁琐,需要大量的时间和内存去训练和测试模型等。
SPP提出来一种Spatial Pyramid Pooling(SPP)结构来解决这种问题,将这种结构放在卷积层与全连接层中间,在多个测试中取得了不错的效果。在这里插入图片描述
如图可以看出上面需要加入一些裁剪、拉伸等操作,才能得到一个固定大小的输入,下面只需要加一个SPP层就可以达到相同作用,并且还有其他优点。
在这里插入图片描述

  1. 在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。
  2. SPP的核心在于使用多个不同尺寸的窗口来对CNN提取的特征图进行最大池化(上图中的蓝色4x4、青色2x2、灰色1x1窗口),将分别得到的结果进行合并就会得到固定长度的输出(16+4+1维特征向量),作为后面全连接层的输入。

SPP优点:

  • 解决输入图片大小不一造成的缺陷。
  • 由于把一个feature map从不同的尺寸进行pooling特征抽取,再聚合,提高了算法的robust和精度。
  • 图像分类、目标检测都可以用,而且效果很棒。
  • 一定程度上缓解了R-CNN耗时过多等问题。

二、Fast R-CNN原理
在Fast RCNN之前提出过SPPnet来解决R-CNN中重复卷积问题,但SPPnet仍然存在与R-CNN类似的缺陷:
1.训练分多步骤(需要SVM分类器,额外的regressors)
2.空间开销大
因此,该文提出的Fast R-CNN便是解决上述不足,在保证效果的同时提高效率。基于VGG16的Fast R-CNN模型在训练速度上比R-CNN快大约9倍,比SPPnet快大约3倍;测试速度比R-CNN快大约213倍,比SPPnet快大约10倍,在VOC2012数据集上的mAP大约为66%。在这里插入图片描述
具体步骤:
1:输入一张任意尺度的图像。
2:利用Selective Search方法提取候选框,并把这些候选框的位置关系映射到卷积后提取的0特征图。
3:进行RoI Pooling操作,得到4x4维的特征向量。
4:输入进Softmax进行分类,对候选框的位置进行回归。

Fast R-CNN框架与R-CNN有两处不同:

  • 最后一个卷积层后加了一个ROI pooling layer(算是SPP pooling layer的简化版,采用单一尺度的窗口4x4);
  • 损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类。
  • 由于卷积层计算针对的是一整张图片,而全连接层需要对每一个region proposal都作用一次,所以全连接层的计算占网络计算的将近一半(如下图)。作者采用SVD来简化全连接层计算。在这里插入图片描述
    不足:
    region proposal的提取仍然采用selective search,整个检测流程时间大多消耗在这上面(生成region proposal大约2~3s,而特征提取+分类只需要0.32s),之后的Faster RCNN的改进之一便是此点。

系列传送门:
目标检测——R-CNN(一)
目标检测——Faster R-CNN(三)
目标检测——Mask R-CNN(四)
目标检测——R-FCN(五)
目标检测——YOLOv3(六)
目标检测——YOLOv4(七)

猜你喜欢

转载自blog.csdn.net/qq_42823043/article/details/90705769