1.RCNN的缺点
- CNN要求输入图片尺寸具有统一的尺寸
- 不同尺度和长宽比的区域被变换到相同大小
- 裁剪会导致信息丢失或引入过多背景),缩放会导致物体变形
2.SPPNet结构
应该是一目了然吧
3. 关于SPP的理解
由于论文中用的基础网络ZF-5中含有全连接层,这就要求全连接层输入的尺寸必须一致,如RCNN中将每个区域框送入CNN网络前,需要调整为227x227的大小就是这个道理
但是HeKaiming大神的想法就是不太一样。作者觉得每个区域框单独训练太麻烦了,最好是对整张图片做特征提取。但是映射后的区域框的大小不一样,全连接层的输入的尺寸不固定,怎么办呢?那就想办法让每个区域框输出固定的特征向量,所以就出现了SSP
原理:
将不同大小的ROI特征图,通过1x1,2x2,4x4的网格划分成不同尺度的共21个区域,每个区域用最大池化,获得一个值,最后就是固定输出21个特征值,然后将所有区域框的特征向量合并起来,送入全连接层。结合上图看
当然,这些网格的划分方式并不是固定的,根据具体问题来选择合适的划分方式
4. SPP与RCNN的异同
可以发现,SSP相对于RCNN的最主要改进就是特征提取方式不同。
不在对每个Selective Search获得区域框进行分别的提取特征,而是对整个图像提取特征,然后将原图中的区域框映射到最后一层卷积的feature map。在将这些ROI区域送给SPP,其他都差不多。
- 首先,Selective Search,选出候选框,这一步相同
- 然后,特征提取是不同的
- RCNN->每个候选框调整成固定大小,输入CNN提取特征
- SPPNet->将整个图片输入CNN,并将原图的ROI映射到,最后一个卷积层,并对每个ROI,作用一次SPP输出21个特征值,最后concat到一起
- 最后都是用SVM进行分类
5.如何将原图的候选框映射到特征图上
假设(x’,y’)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系:
其中S的就是CNN中所有的strides的乘积。比如paper所用的ZF-5:
S=2*2*2*2=16