原文链接:https://arxiv.org/abs/1406.4729
自制PPT与讲解视频链接:https://github.com/DHUB721/Object-Detection (注:仅个人理解,如有错误请多多指正,轻喷,谢谢!)
1. 论文背景
目前,主流的CNN方法需要固定尺寸的输入图片,所以应用到任意尺寸的图片是,就需要对输入图片进行裁剪(Crop)或变形(Wrap),显然这种内容丢失或者变形将会降低识别准确率。(注意与缩放resize区别)
但是大神肯定不甘于这种限制,然后分析了一下为什么CNN需要一个固定尺寸的输入,发现卷积操作并不需要固定尺寸输入,只是全连接层需要固定尺寸,于是作者就提出了在最后一个卷积层“动手脚”的想法来消除固定尺寸的限制——SPP layer。
2.混淆术语区分
(1)Multi-level:多级别,使用不同大小与步长的filter产生不同级别的抽象特征,本论文中即3 × 3, 2 × 2, 1 × 1的bins。
(2)Multi-size:多尺寸,主要是指在SPPnet中使用不同的图片尺寸作为输入。多尺寸训练的主要目的是在借助目前优化较好的固定尺寸网络实现的同时,模拟不同的输入尺寸。
(3)Variable-size:训练阶段用的变化尺寸的输入图片。Training with variable-size images increases scale-invariance and reduces over-fitting.
(4)Single full-image:相对于multiple views来说的,we find that the combination of multiple views is substantially better than the single full-image view. (sec 3.1.4) 即将全图作为输入进行训练。
(5)Multi-view:Thanks to the flexibility of SPP, we can easily extract the features from == windows (views) == of arbitrary sizes from the convolutional feature maps. 我认为是在一张整图上进行裁剪下几个不同的区域(大小固定),那么这样训练岂不是太耗时了,这是我一个不明白的点!
3. 论文亮点
(1)对于深度网络SPP有以下显著优点:
- 任意输入大小都能产生固定长度的输出,而之前的滑动窗口池化是做不到这一点的。
- SPP使用了多级别的空间箱(multi-level spatial bins),这对识别变形照片是有利的。
- SPP可以池化从各种尺度抽取出来的特征。
(2)SPPnet在测试阶段对任何大小图片都能产生表示,并且在训练阶段也能接受变化大小和尺度的输入图片。使用各种尺寸的图像进行训练可以提高缩放不变性,以及减少过拟合。(Multi-size training是如何进行的?)
(3)对RCNN(时间)性能的提升
重复使用神经网络是耗时的,所以作者希望一次提取完特征,然后根据映射关系提取proposals的特征。这样在时间性能上必然是有大大提升的。
4. 论文细节
(1)空间金字塔池化(SPP)是如何提取固定长度特征向量的?
传统的池化方法是采用一个filter对卷积层提取的特征进行池化,然后产生一个与卷积层feature map大小有关的池化后feature map。那么我们能不能产生一个固定大小的feature map,不受上一层卷积结果尺寸(或者说是输入图片尺寸)而影响呢?答案是肯定的。只要我们根据上一层卷积结果尺寸反推设计不同的卷积核大小与步长就可以产生固定大小的特征向量了。这就是SPP的基本思想。另外,SPP 使用了multi-level的池化特征,于是就将若干个卷积核池化提取的特征作为最终的固定长度的特征向量了。作者设计了两种类型的训练方法:Single-size与Multi-size。
如上,SPP使用了3个级别的特征图,其中每个级别256个filter,生成了256张feature map。注意,这里并不是使用1 × 1、2 × 2、3 × 3的窗口去卷积一张图片,而是把一张整图池化成一个1 × 1、2 × 2、3 × 3大小的feature map,至于用到的卷积核是需要反推计算的,计算公式如下;
这里有个疑问,1. 如果输入图片不是个正方形区域(即Full-Image)怎么反推计算呢?反推公式是不是要作改变?
To our knowledge, our method is the first one that trains a single network with input images of multiple sizes.
(2)SPPnet对RCNN的改进
读完RCNN一个很明显的感觉就是SS生成的region proposal太多,而且CNN重复提取proposals的特征太耗时。我们能感觉到的东西,大神必然也能洞察,并且善于去寻找解决办法,于是将SPP用到RCNN中显著提高了计算速度。基本思想:使用ss生成~2k个候选框,缩放图像min(w,h)=s之后提取特征,将原图上的proposal映射到卷积之后得到的特征图上,每个候选框使用一个4层的空间金字塔池化特征。
关于映射:
最后,我还有一个疑问,论文都是将输入裁剪成224 × 224,这种裁剪与传统CNN有啥区别呢?就因为他多裁了几次?