SPP

SPP(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)

https://blog.csdn.net/yzf0011/article/details/75212513
https://blog.csdn.net/qq_35451572/article/details/80273222
https://blog.csdn.net/bryant_meng/article/details/78615353?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf

1、 背景

在一般的CNN结构中,在卷积层后面通常连接着全连接。而全连接层的特征数是固定的,所以在网络输入的时候,会固定输入的大小(fixed-size)。但在现实中,我们的输入的图像尺寸总是不能满足输入时要求的大小。然而通常的手法就是裁剪(crop)和拉伸(warp)。

这样做总是不好的:图像的纵横比(ratio aspect) 和 输入图像的尺寸是被改变的,这样就会扭曲原始的图像。而Kaiming He在这里提出了一个SPP(Spatial Pyramid Pooling空间金字塔池化)层能很好的解决这样的问题, 大大提高了产生候选框的速度,且节省了计算成本。

在这里插入图片描述

2、特点

  1. 不管输入尺寸是怎样,SPP 可以产生固定大小的输出
  2. 使用多个窗口(pooling window)
  3. SPP 可以使用同一图像不同尺寸(scale)作为输入, 得到同样长度的池化特征。

优点

  1. 由于对输入图像的不同纵横比和不同尺寸,SPP同样可以处理,所以提高了图像的尺度不变(scale-invariance)和降低了过拟合(over-fitting)
  2. 实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛(convergence)
  3. SPP 对于特定的CNN网络设计和结构是独立的。(也就是说,只要把SPP放在最后一层卷积层后面,对网络的结构是没有影响的, 它只是替换了原来的pooling层)
  4. 不仅可以用于图像分类而且可以用来目标检测

缺点:
1)虽然解决了R-CNN许多大量冗余计算的问题,但是还是沿用了R-CNN的训练结构,也训练了SVM分类器, 单独进行BBox regression。
2)SPP-Net 很难通过fine-tuning对SPP-layer之前的网络进行参数微调,效率会很低,原因具体是(Fast-RCNN中的解释): SPP做fine-tuning时输入是多个不同的图片,这样对于每一个图片都要重新产出新的feature map,效率很低,而Fast-RCNN对其进行了改进

3、SPP目标检测具体内容

SPP是基于RCNN而改进的,现在有比其更快的Fast-RCNN, 和Faster-RCNN。

3.1算法流程:

1)首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样。

2)特征提取阶段。这一步就是和R-CNN最大的区别了,同样是用卷积神经网络进行特征提取,但是SPP-Net用的是金字塔池化。这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度是大大地快啊。江湖传说可一个提高100倍的速度,因为R-CNN就相当于遍历一个CNN两千次,而SPP-Net只需要遍历1次。

直接使用特征图代替原图来检测目标
在这里插入图片描述
3)最后一步也是和R-CNN一样,采用SVM算法进行特征向量分类识别
在这里插入图片描述

3.2 一次特征提取

RCNN是多个regions+多次CNN+单个pooling,而SPP则是单个图像+单次CNN+多个region+多个pooling
在这里插入图片描述在特征提取上,速度提升了好多,R-CNN是直接从原始图片中提取特征,它在每张原始图片上提取2000个Region Proposal,然后对每一个候选区域框进行一次卷积计算,差不多要重复2000次,而SPP-net则是在卷积原始图像之后的特征图上提取候选区域的特征。所有的卷积计算只进行了一次,效率大大提高。结合EdgeBoxes提取的proposal,系统处理一幅图像需要0.5s

3.2 multi-size训练网络训练

直觉地说,可以理解成将原来固定大小为(3x3)窗口的pool5改成了自适应窗口大小,窗口的大小和reponse map成比例,保证了经过pooling后出来的feature的长度是一致的。 

1)原理
我们先假定固定输入图像的尺寸s=224, 而此网络卷积层最后输出256层feature-maps, 且每个feature-map大小为13×13(a=13),全连接层总共256×(9+4+1)个神经元, 即输全连接层输入大小为256×(9+4+1)。即我们需要在每个feature-map的到一个数目为(f=9+4+1)的特征。
由于pooling窗口(w×w)很明显如果我们用一个pooling窗口怎么也很难得到f=9+4+1,再加上如果输入图像尺度变化的话,是根本不可能。
这里用了3个pooling窗口(w×w), 而对应的pooling stride 为t, 经多这3个窗口pooling池化得到3个n×n,n=3,2,1的结果。
饼画好了,怎么得到我们的窗口大小w和stride t呢?
在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值