阅读论文(5)SPPNet:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
arxiv:1406.4729
初读
传统CNN要求固定输入图片的大小,因此若输入图片不符合要求,需要对输入的图片进行大小变换,包括剪裁和长宽变形,这样的处理有可能会使得模型的性能下降。提出空间金字塔池化层(spatial pyramid polling),可以实现直接输入任意大小图片,通过SPP输出同一维度的特征。
该项技术不仅可以使得图像分类的各种模型的性能提升,也对目标检测有帮助。
再读
为什么对图片进行剪裁和宽高比变形会影响模型准确度?
-
剪裁:损失了原始图片中的一些内容
-
变形:使原始图片发生了扭曲
什么是SPP layer?
![image-20230210093727736](https://gitee.com/dctwan/blog-image/raw/master/image-20230210093727736.png)
SPP layer为什么可行?
CNN整体上来说包括两大部分,卷积层提取特征,然后将特征送入全连接层,输出分类结果。对于卷积层来说,通过卷积核与滑动窗口提取特征,这一部分并不需要固定的输入图片大小。真正需要固定输入数据大小的是全连接层,需要根据网络模型结构为全连接层提供同一大小的输入特征。SPP layer的出发点是,全连接层在网络模型的较深层,因此不必在卷积层输入的时候就要求固定大小的图片,可以在最后一个卷积层输出时进行操作,使得对于全连接层的输入保持固定小大的数据即可。
其实SPP layer在CNN出现之前已经被经常在分类和识别竞赛中使用了,并且地位还非常重要,这篇论文其实就是将之前的技术和现在的CNN结合了起来。
论文对目标检测的贡献
将SPP layer应用在R-CNN上,相对于R-CNN对每个候选框送入CNN进行特征提取,相当于一个图片需要多次进行卷积草族谱,论文只将原始图片做1次卷积操作,在特征图上选候选框,大大减少了时间开销。比R-CNN快100倍。
SPP层的原理
![image-20230210101803024](https://gitee.com/dctwan/blog-image/raw/master/image-20230210101803024.png)
最后一层卷积层输出图像大小不固定,通道数为256,也就是说经过卷积提取特征之后输出的特征图为:HxWx256,其中H和W是可变的。SPP要做的事就是对特征图中每一个通道的图片划分3个做max pooling,然后再拼接起来作为全连接层的输入。
- 第1个:对整个图做max pooling,得出1个最大值,特征图256个通道,即为1x256个值
- 第2个:将整个图划分为4个部分,每个部分做max pooling,得出4x256个值
- 第3个:将整个图划分为16个部分,得出16x256个值
将其拼接得到1x256 + 4x256 + 16x256 = 5376的向量,作为全连接层输入