【论文】SPP(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)

本来是打算总结R-FCN的,但是我发现SPP和Over-Feat在很多地方都有提到,所以先对这两个东西进行一个总结。SPP网络的思想很简单,但是这篇论文却写出了很多东西,这一点很值得学习。

 一、简介

SPP的提出是为了解决CNN固定输入的问题,这导致了在面对不同大小图片的时候,它只能使用裁剪或者缩放的方法获得与CNN输入大小一致的图片,但是这些方法会对物体产生形变,会丢失信息。SPP有几个很好的性质:

1. 能够生成一个与输入size无关(相当范围内无关)的特征

2. 输出中包含了多尺度的信息,对物体变形的不变性更加好。

文中还做了一些实验,实验表明,对于这个网络,多尺度训练能够与传统单尺度训练花费相同的时间,得到更好的结果。SPP对于四种不同的CNN架构都有提升。

另一个实验是在目标检测的任务上应用,也得到了不错的结果

二、结构

基本的结构如下:

其中,feature map就是特征图,对于不同尺寸的输入,feature map的大小也会有不同尺寸,之后,使用不同的pooling来对feature map进行pooling,比如说图中SPP层中的16*256,就是经由Pooling后的结果,大小变成了4*4。具体的做法如下:对于一个a*a的feature map,假如我们要得到一个pyramid level(就是SPP的一层),里头有n*n个bin(也即是它的size),那么,我们取一个sliding window pooling,大小为win=向上取整(a/n),步长为向下取整(a/n)。一个向下,一个向上保证了不会存在feature map中的点被漏pooling了。假如a/n是整数的话,那么这两者相同,可以刚好覆盖。如果不是整数的话,那么pooling window之间会有且正好有一个交叠。但事实上有时候并不能正好的按照这个大小和步长铺满feature map,因此,需要一些调整。举两个例子。假如a = 13,n = 2,则大小为7,步长为6,因此,7+7-1 = 13正好覆盖住feature map。得到了 2*2的spp layer。假如a=11,n=3,则大小为4,步长为3,最终4+4+4-2=10,少了一格,我们可以适当的将最后一次步长设为4,这样刚好。文中有下入的例子:

三、实验

第一个实验:multi-size实验:使用了180-net和224-net,输入大小不同,使用SPP,获得相同大小的特征,因此,我们可以一会儿在224上训练,一会在180上训练,两者使用相同的数据集,只不过图像的大小进行了缩放。主要的目的是模拟那种改变图像大小的数据集扩充技术,当然实际上是使用的同一个网络,因为卷积核都是一样的,FC层的参数也是不变的。结果是这样的确有提升。

第二个实验:对于使用SPP和没有使用SPP的网络进行了比较,有一种情况很值得注意,就是原网络的FC参数量比使用SPP的参数量多,但是这种情况SPP网络依然能做的很好,这说明是因为多level的pooling是对于物体变形和 spatial layout有相当的鲁棒性,而并非简单的是由于更多的参数。

第三个实验:我们将输入统一成最小边为256,宽高比不变的图像,使用三种方法:single view(在这里是指只检测中心的224*224方块)、full view(全部图像)和multiple views(可能这里指的就是第一个实验的那种做法),结果是当然是越来越好啦。

第四个实验:在特征层上的某个窗上使用SPP,如下图:

对于图上的一个view(window),我们将它映射到feature map上,之后使用SPP去pool特征,进行分类任务。之后,将图像进行放大多种尺寸,取多个view,那么我们利用上面的方法得到feature map上的window,再使用SPP,相当于多尺寸训练,而且位置的变化也有了,结果当然是更好啦。其中如何得到feature map上的窗可以学习一下。

第五个实验:在分类任务上面用,提取特征,再训练SVM,这样去做,结果显示当图片进行放大后,SPP的效果会有提升,而相比普通的网络,SPP的效果也会有提升。

第六个实验:在目标检测上面使用。在这里提出了直接一次正传得到所有特征,然后裁剪的思想,还是在R-CNN上做。用到了hard negative mining技巧,还对图像进行了放大。结果当然是好的啦。

四、总结

总之就是这样一个简单的想法,但是作者几乎将它研究到了极致,提出了一种等同于多尺度训练的方法,还提出了在feature map上直接扣window的方法,这些都是有些超出SPP自身范围的东西,很值得我们学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值