目标检测系列(2):SPP

Object detection 之 SPP

Spatial Pyramid Pooling in Deep convolutional Networks for Visual Recognition

用于视觉识别的卷积神经网络空间金字塔池化

1 引入SPP的原因

之前的CNN网络都要求输入图片的大小是固定的,比如AlexNet要求227x227、VGG要求224x224。这样的话,对于任意一张图片,需要进行剪裁crop或者拉伸warp才能满足网络的输入要求。从下图的车辆和灯塔可以看到,剪裁会丢失部分有用的信息,而拉伸则会曲解图片原来的信息,这些都造成了输入的‘变形’。
那么为什么不设计一种可以接受所有各种图片尺寸的网络呢?
作者发现了,对于任意尺寸的图片,卷积层conv都可以进行操作,只是最后得到的feature maps的尺寸会因为输入的不同而不同。但是,对于全连接层,不同的输入是不可以接受的。
因此,作者想到在卷积层和全连接层中间加一个SPP层,用来将卷积层不同的输出特征图变成全连接层都能接受的输入大小。
目标检测系列(2):SPP_第1张图片

2 什么是SPP

卷积层可以根据不同的输入图片得到不同的输出特征图,但是分类器(SVM或者softmax层)却只能接受固定的输入。Bag-of-Words(BoW)方法将特征图进行池化、组合形成分类器支持的输入向量形式。SPP空间金字塔池化方法通过在空间池化网格中进行池化,相比BoW方法注重图片空间信息的平衡。
目标检测系列(2):SPP_第2张图片
具体的做法是:将卷积网络的最后一个池化层用SPP池化代替,提前设计不同的池化网格SPP spatial local bins。对于卷积层的输出filter numbers x size x size,不同经过不同的bins输出是filtersxnxn,n可以提前设计。
如上图中,卷积层最后的输出是256x?x?,经过SPP后有256x1x1+256x2x2+256x4x4。这样经过卷积层后的特征图尺寸是固定,可以直接连接全连接层。
作者还给出了一个n=1,2,3的SPP示意图,自己可以根据这个推推,感受一下SPP。
对于不同的输入图片,得到的最后一层的特征图尺寸是不同的,所以需要根据特征图尺寸计算SPP里每一个bin的win_size和stride。
目标检测系列(2):SPP_第3张图片

3 SPP在分类任务上的应用

目标检测系列(2):SPP_第4张图片将SPP用在ZF-5、Convnet*-5、 Overfeat-5、 Overfeat-7这四个baseline网络上,实验对比发现:
加入single size SPP能提高0.5%~1%左右,加入multi size SPP能提高1%~到2%。
作者总结的几个提高精度的方式

  1. Multi-level Pooling Improves Accuracy
  2. Multi-size Training Improves Accuracy
  3. Full-image Representations Improve Accuracy

4 SPP在目标检测任务上的应用

作者主要将SPP和R-CNN进行了对比,从耗时上碾压了R-CNN。
目标检测系列(2):SPP_第5张图片

##参考文献
SPP的论文好长,好多细节仅靠一次阅读无法全部把握,训练部分、特征图映射部分需要多看几次才能理解。
RCNN学习笔记(3):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPP-net)
SPP空间金字塔池化(Spatial Pyramid Pooling)

你可能感兴趣的:(目标检测)