1.深度卷积网络和大规模训练数据库使得计算机视觉领域发生巨大的变革,但是目前的深度卷积网络在训练时存在以下问题
输入的训练图片必须是固定的尺寸,生成固定尺寸的方法有两种一种是crop 另外一种是warp。crop的缺点是裁剪的区域不一定包括整个目标物体,warp的缺点是会导致图像的几何变形,如图所示

为什么CNNS需要一个固定尺寸的输入呢?一个CNNS由两部分组成:卷积层、全连接层。卷积层操作是通过滑动窗口的方式,输出特征图,所以卷积层并不要求输入图片的尺寸。但全连接层根据特定的任务需要固定的长度,生成固定的权重,所以需要固定长度的输入。
这篇论文提出spatial pyramid pooling(spp)实现任意尺寸的图片输入问题。
一般的CNNS处理过程

spp处理过程

SPP有如下几个优点:
(1)输入任何尺寸的图片SPP都能生成固定长度的输出值。
(2)使用多层(multi-level)空域视角(spatial bins)获取特征值
(3)融合多尺度的特征值
作者开发了一个简单的多尺度训练方法。训练过程有多轮(epoch),每一轮训练输入固定尺寸的图片,切换到下一轮训练时输入另外一组固定尺寸的图片。实验结果显示比传统的训练方式精度要高。
SPP最大的优点是和具体的CNN网络正交(对CNN网络具有普适性)。就是说不管具体网络的卷积核大小、步长、深度或其他设计,还是解决目标检测、分类等不同任务都可以使用SPP。
论文中2.2介绍了SPP的工作原理,如下图所示,基本思想是将讲一张特征图按照3种大小不同的窗口进行池化,下图结果是分别池化成1x1,2x2,4x4大小的矩阵,然后将池化矩阵结果拼接在一起,形成一个向量。

论文2.3介绍了SPP的训练过程
一张固定尺寸的特征图,如何池化为不同大小的特征图,计算公式是池化滑动窗口:a/n向上取整,滑动步长为a/n向下取整,其中a为输入特征图的边长,n为池化金字塔的格子(bin)数。如下图所示

如果是多张不同尺寸的特征图呢?由于网络在卷积层参数个数只与卷积核大小和池化窗口大小有关,在全连接层参数只与全连接层向量长度有关,所以不管输入图像的尺寸大小如何,网络的参数是相同的。可以把不同尺寸输入图片训练过程看作是不同轮(epoch)的训练过程,这样经过多次迭代训练出网络参数。
论文的4节介绍了利用SPP实现物体检测
主要思路是首先利用参考文献[20]Segmentation as Selective Search for Object Recognition中的算法生成2K个候选框,然后选择一个成熟的网络模型(例如ZF-5)生成特征图,然后通过公式找到图片候选框对于得特征图相应的位置,接下来使用SPP提取统一长度的特征框,使用SVM进行分类。
其中图片的候选框和特征图的候选框对应关系的公式,在论文的APPENDIX A中有介绍,下面参考博客给出了比较方便的理解方式,如图


参考博客: 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测,该博客有一系列深度学习的文章
浙公网安备 33010602011771号