前言
RCNN--->SPPNet--->Fast-RCNN---->Faster-RCNN
Faster RCNN是two stage算法的代表之一,在Faster RCNN提出前作者依次提出了RCNN,Fast RCNN这样一系列的深度学习的目标检测算法,这一过程也是作者对深度学习目标检测算法的不断完善,一直到Faster RCNN才完整的设计出了一个从图像端到检测目标的位置和类别信息输出的完整的网络。直到Faster RCNN的提出,整个深度学习目标检测算法的框架才基本完成,也标志着two stage目标检测算法框架的形成。
传统检测算法大致流程如下:
RCNN主要体现在特征提取部分进行了优化,特征提取部分传统的检测算法通常会提取颜色纹理等特征,深度的特征提取往往通过卷积神经网络来完成特征的提取。
那么究竟是如何对传统的检测算法一步步的进行优化的呢?下面首先让我们看一下RCNN
RCNN
RCNN网络的主要改进在于使用深度神经网络进行特征提取,但整个框架的设计仍然是传统的目标检测算法的框架。因此RCNN网络依然存在传统的目标检测网络存在得那些问题,如:检测速度低下(效率低),精度依然难以满足实际需要。
RCNN介绍
步骤1:训练分类网络AlexNet
步骤2:模型做fine-tuning
类别1000改为20
去掉FC
步骤3:特征提取
提取候选框(选择性搜索)
- 生成区域集R,见论文《Efficient Graph-Based Image Segmentation》
- 计算区域集R里面每个相邻区域的相似度S={s1,s2,..}
- 找出相似度最高的两个区域,将其合并为新集,添加进R
- 从S中移除所有与3中有关的子集
- 计算新集与所有子集的相似度
- 跳至3,直到S为空
这种生成候选区域的个数与滑动窗口相比少了很多,通过这一过程可以提高检测算法整体的速度。
对于每一个区域:修正区域为CNN的输入,利用网络对候选框提取到特征。
步骤4:训练SVM分类器:
每个类别对应一个SVM
步骤5:回归器精修候选框位置(利用线性回归模型判定框的准确度)
RCNN缺点:
- 候选框选择算法耗时严重
- 重叠区域特征重复计算
- 分步骤进行,过程繁琐
针对RCNN网络的这一系列缺点,SPPNet做出了改进,它的改进主要体现在如何对卷积特征进行共享。
SPPNet
简介
SPPNet提出了Spatial Pyramid Pooling,空间金字塔池化层。利用空间金字塔池化层就可以完成卷积特征的共享。
事实上,CNN的卷积层不需要固定尺寸的图像,全连接层是需要固定大小输入的,因此提出了SPP层放到卷积层的后面,改进后的网络如下图所示:
SPP的优点:
1)任意尺寸输入,固定大小输出
2)层多
3)可对任意尺度提取的特征进行池化。
SPPNet核心网络结构
如果像上图那样将reponse map分成4x4 2x2 1x1三张子图,做max pooling后,出来的特征就是固定长度的(16+4+1)x256那么多的维度了。如果原图的输入不是224x224,出来的特征依然是(16+4+1)x256