想直接看公式的可跳至第三节 3.公式修正
一、为什么需要SPP
首先需要知道为什么会需要SPP。
我们都知道卷积神经网络(CNN)由卷积层和全连接层组成,其中卷积层对于输入数据的大小并没有要求,唯一对数据大小有要求的则是第一个全连接层,因此基本上所有的CNN都要求输入数据固定大小,例如著名的VGG模型则要求输入数据大小是 (224*224) 。
固定输入数据大小有两个问题:
1.很多场景所得到数据并不是固定大小的,例如街景文字基本上其高宽比是不固定的,如下图示红色框出的文字。
2.可能你会说可以对图片进行切割,但是切割的话很可能会丢失到重要信息。
综上,SPP的提出就是为了解决CNN输入图像大小必须固定的问题,从而可以使得输入图像高宽比和大小任意。
二、SPP原理
更加具体的原理可查阅原论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
上图是原文中给出的示意图,需要从下往上看:
- 首先是输入层(input image),其大小可以是任意的
- 进行卷积运算,到最后一个卷积层(图中是)输出得到该层的特征映射(feature maps),其大小也是任意的
- 下面进入SPP层
- 我们先看最左边有16个蓝色小格子的图,它的意思是将从得到的特征映射分成16份