SPP(Spatial Pyramid Pooling)详解

一直对Fast RCNN中ROI Pooling层不解,不同大小的窗口输入怎么样才能得到同样大小的窗口输出呢,今天看到一篇博文讲得挺好的,摘录一下,方便查找。

Introduction

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

这样做总是不好的:图像的纵横比(ratio aspect) 和 输入图像的尺寸是被改变的。这样就会扭曲原始的图像。而Kaiming He在这里提出了一个SPP(Spatial Pyramid Pooling)层能很好的解决这样的问题, 但SPP通常连接在最后一层卷基层。

SPP 显著特点

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

其它特点

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

使用SPP的CNN

Convolutional Layers and Feature Maps

作者使用上图意在说明保留原图片的尺寸对实验的特征提取和结果都很重要

The Spatial Pyramid Pooling Layer

为什么会得固定大小的输出? 
注意我们上面曾提到使用多个窗口(pooling窗口,上图中蓝色,青绿,银灰的窗口, 然后对feature maps 进行pooling,将分别得到的结果进行合并就会得到固定长度的输出), 这就是得到固定输出的秘密原因。 
我们接下来用一个例子来弄懂这张图

Single-size network

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

w=?a/n?=?13/3?=5w=?a/n?=?13/3?=5

t=?a/n?=?13/3?=4t=?a/n?=?13/3?=4

n=2,n=1n=2,n=1以此类推,将3个pooling后的结果合并,很容易发现和我们的期望一致。

muti-size training(证明其可能性)

有这一公理以及其推理: 
公理: 任何一个数都可以写成若干个数的平方和。

推理: 任何一个数的平方(为一个数)可以表达成若干个数的平方和

由于我们的输入图像尺寸是多样的,致使我们在最后一层得到的每个featrue-map大小为a×b(a 和 b大小是可变的)且feature-maps数为c,我们全连接层的输入为c×f, 也就是我们每个feature-map 要得到f个特征。 
由公理可得

SPP分类

作者在分类的时候得到如下几个结果 
1) 多窗口的pooling会提高实验的准确率 
2) 输入同一图像的不同尺寸,会提高实验准确率(从尺度空间来看,提高了尺度不变性(scale invariance)) 
3) 用了多View(multi-view)来测试,也提高了测试结果 
4)图像输入的尺寸对实验的结果是有影响的(因为目标特征区域有大有有小) 
5)因为我们替代的是网络的Poooling层,对整个网络结构没有影响,所以可以使得整个网络可以正常训练。

SPP目标检测

是基于RCNN而改进的,现在有比其更快的Fast-RCNN, 和Faster-RCNN。我们在这里主要提出论文中的重要的点。 
  1) 在目标检测中,许多实验可以从feature-maps中使用窗口,来提取目标特征。见原文描述: 
regions of the feature maps, while R-CNN extracts directly from image regions. In previous works, the Deformable Part Model (DPM) [23] extracts features from windows in HOG [24] feature maps, and the Selective Search (SS) method [20] extracts from win- dows in encoded SIFT feature maps. The Overfeat detection method [5] also extracts from windows of deep convolutional feature maps, but needs to pre- define the window size. On the contrary, our method enables feature extraction in arbitrary windows from the deep convolutional feature maps. 
  2)接下来分析目标检测的整体过程:

从上面的描述,我们应该懂了作者的意思。作者是整体先对整张图片进行卷积然后,在把其中的目标窗口拿出来Pooling,得到的结果用作全连接层的输入。 
特点:只需要计算一次卷积层,训练速度快。

文章转自: https://blog.csdn.net/yzf0011/article/details/75212513

原文地址:https://www.cnblogs.com/zongfa/p/9076311.html

时间: 2024-10-12 18:33:22

SPP(Spatial Pyramid Pooling)详解的相关文章

空间金字塔池化(Spatial Pyramid Pooling, SPP)原理和代码实现(Pytorch)

想直接看公式的可跳至第三节 3.公式修正 一.为什么需要SPP 首先需要知道为什么会需要SPP. 我们都知道卷积神经网络(CNN)由卷积层和全连接层组成,其中卷积层对于输入数据的大小并没有要求,唯一对数据大小有要求的则是第一个全连接层,因此基本上所有的CNN都要求输入数据固定大小,例如著名的VGG模型则要求输入数据大小是 (224*224) . 固定输入数据大小有两个问题: 1.很多场景所得到数据并不是固定大小的,例如街景文字基本上其高宽比是不固定的,如下图示红色框出的文字. 2.可能你会说可以

Spatial pyramid pooling (SPP)-net (空间金字塔池化)笔记(转)

在学习r-cnn系列时,一直看到SPP-net的身影,许多有疑问的地方在这篇论文里找到了答案. 论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 转自:http://blog.csdn.net/xzzppp/article/details/51377731 另可参考:http://zhangliliang.com/2014/09/13/paper-note-sppnet/ http:/

空间金字塔池化(Spatial Pyramid Pooling,SPP)

基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文主要讲解大神何凯明2014年的paper:<Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition>,这篇paper主要的创新点在于提出了空间金字塔池化.paper主页:http://researc

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

一.本文的主要思想 考虑到传统的CNN构架的输入图像的尺寸都是固定的(例如:256*256),这种人工改变输入图像的尺寸破坏了输入图像的尺度和长宽比例.作者认为卷积层的输入的尺寸可以是任意,全连接层的输入是固定不变.针对这个问题,作者提出了spatial pyramid pooling(SPP-net)结构,在目标检测方面,比R-CNN快30-170倍. 二.spatial pyramid pooling(SPP-net)的优势 1.针对不同尺寸的输入可以得到相同维度的输出,而siding wi

SPPNet论文翻译-空间金字塔池化Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

http://www.dengfanxin.cn/?p=403 原文地址 我对物体检测的一篇重要著作SPPNet的论文的主要部分进行了翻译工作.SPPNet的初衷非常明晰,就是希望网络对输入的尺寸更加灵活,分析到卷积网络对尺寸并没有要求,固定尺寸的要求完全来源于全连接层部分,因而借助空间金字塔池化的方法来衔接两者,SPPNet在检测领域的重要贡献是避免了R-CNN的变形.重复计算等问题,在效果不衰减的情况下,大幅提高了识别速度. 用于视觉识别的深度卷积网络空间金字塔池化方法 Spatial Py

SPP Net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)论文理解

论文地址:https://arxiv.org/pdf/1406.4729.pdf 论文翻译请移步:http://www.dengfanxin.cn/?p=403 一.背景: 传统的CNN要求输入图像尺寸是固定的(因为全连接网络要求输入大小是固定的) crop处理,可能不包含整个物体,还会丢失上下文信息 warping处理,会导致图像变形 以上都会导致CNN对不同scale/size泛化能力不强 于是SPP做了如下改进,即将SPP层加在最后一个卷积层后面,然后再送入FC网络. 优点 不管输入尺寸为

目标检测论文解读2——Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

背景 用ConvNet方法解决图像分类.检测问题成为热潮,但这些方法都需要先把图片resize到固定的w*h,再丢进网络里,图片经过resize可能会丢失一些信息.论文作者发明了SPP pooling(空间金字塔池化)层,让网络可以接受任意size的输入. 方法 首先思考一个问题,为什么ConvNet需要一个固定size的图片作为输入,我们知道,Conv层只需要channel固定(彩色图片3,灰度图1),但可以接受任意w*h的输入,当然输出的w*h也会跟着变化:然而,后面的FC层却需要固定长度的

第二十九节,目标检测算法之Fast R-CNN算法详解

Girshick, Ross. "Fast r-cnn." Proceedings of the IEEE International Conference on Computer Vision. 2015. 继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度.在Github上提供了源码. 之所以提出Fast R-CNN,主要是因为R-CNN存在以下几个问题: 训练分多步.通过上一篇博文我们知道R-CN

语义分割--全卷积网络FCN详解

语义分割--全卷积网络FCN详解 1.FCN概述 CNN做图像分类甚至做目标检测的效果已经被证明并广泛应用,图像语义分割本质上也可以认为是稠密的目标识别(需要预测每个像素点的类别). 传统的基于CNN的语义分割方法是:将像素周围一个小区域(如25*25)作为CNN输入,做训练和预测.这样做有3个问题: - 像素区域的大小如何确定 - 存储及计算量非常大 - 像素区域的大小限制了感受野的大小,从而只能提取一些局部特征 为什么需要FCN? 我们分类使用的网络通常会在最后连接几层全连接层,它会将原来二