SPPNet

Paper : Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Code :

摘要

文中作者提出“空间金字塔池化”(spatial pyramid pooling)的池化策略,用来解决卷积神经网络的输入必须是固定大小的图片的限制。SPP-net结构能够产生固定大小的表示,而不关心输入图像的尺寸或比例。金字塔池化对物体形变具有很强的鲁棒性。因此,SPP-net可普遍改进各种基于CNN的图像分类方法。而且,使用SPP-net结构,可以只对整张图片计算一次特征图,然后对任意尺寸的区域进行特征池化,以产生一个固定尺寸的表示用于训练检测器。 这个方法避免了目标检测中,R-CNN反复计算不同区域相交部分的卷积特征。

网络结构

作者首先分析了为什么CNN网络的输入大小是固定的,对于Conv层和Pool层来说,使用的是平移窗口的方法进行计算,所以Conv和Pool层可以接受任意大小的输入,但是对于fc层来说,根据fc层的定义,因为参数的量是固定的,所以fc层的输入维度是固定,这限制了图片的尺寸。作者提出SPP层来将任意大小的输入转化为固定大小的输出,替代最后一个池化层,使CNN可以接受任何尺寸的输入图片。使用SPP结构的CNN具有以下几个优势

  • SPP能在输入尺寸任意的情况下产生固定大小的输出,而以前的深度网络中的滑窗池化则不能
  • SPP使用了多级别的空间箱(bin),而滑窗池化则只用了一个窗口尺寸。多级池化对于物体的变形十分鲁棒
  • 由于其对输入的灵活性,SPP可以池化从各种尺度抽取出来的特征

SPP层结构如下所示

在这里插入图片描述
直观来看,我们从不同尺度对多层卷积后的输出进行池化操作,对于4*4的尺度,我们首先将卷积后的特征图平均分成4*4个部分,然后对每部分计算一个特征,例如最大池化就是计算最大值,这样该尺度下生成的特征大小是固定的,为 16*C,其中C表示多层卷积后特征图的通道个数,对于图例,池化后特征大小为21*C

SPP结构支持我们使用多尺度的图片进行训练,多尺寸训练的主要目的是在保证已经充分利用现在被较好优化的固定尺寸网络实现的同时,模拟不同的输入尺寸。注意,单尺寸或多尺寸方法只用于训练阶段。在测试阶段,是直接对各种尺寸的图像应用SPP-net的。

SPP结构不仅可以使CNN网络接受多尺度的训练集和测试集,还可以优化R-CNN的运算速度。SPP-Net只需要对整张图片进行一次多层的卷积操作,并对多个的卷积层的输出根据候选框的对应位置进行空间金字塔池化和全连接计算,避免了多个候选框重叠时需要对交集部分进行重复卷积,减小了R-CNN的计算量。

简单来说,对于原图中的每个候选框的位置,我们都可以计算出在经过了若干次卷积之后在特征图上对应的空间位置。我们只需要提前计算好特征图,然后直接在特征图上进行SPP操作和FC操作即可。如下图所示

在这里插入图片描述

具体实现时,将图像缩放成 min ⁡ ( w , h ) = s ∈ S = { 480 ; 576 ; 688 ; 864 ; 1200 } \min(w,h) = s \in S = \{480; 576; 688; 864; 1200 \} min(w,h)=sS={480;576;688;864;1200},然后针对每个尺度计算多个卷积层输出的特征图。对于每个候选窗口,我们选择一个单一尺度 s ∈ S s \in S sS,令缩放后的候选窗口的像素数量接近与224×224。然后我们从这个尺度抽取的特征图去计算窗口的特征。如果这个预定义的尺度足够密集,窗口近似于正方形。我们的方法粗略地等效于将窗口缩放到224×224,然后再从中抽取特征。但我们的方法在每个尺度只计算一次特征图,不管有多少个候选窗口。

总结

作者提出的SPP结构可以有效的将Conv层的输出转化为固定大小的特征向量,但是随着网络层数的加深和Conv Pool层的混用,计算原图和feature map之间候选框位置的对应关系会变得粗糙,可能会影响定位效果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值