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

SPP网络解决了CNN输入固定的问题,通过多级池化保持特征不变性,适用于不同大小的输入图像,增强了物体检测和分类任务的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来是打算总结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自身范围的东西,很值得我们学习。

### 关于SPPSpatial Pyramid Pooling)原论文的信息 SPPSpatial Pyramid Pooling)的概念首次被引入到深度卷积神经网络中,用于解决传统CNN模型对输入图像尺寸的严格要求问题。该方法允许任意尺寸的输入图像经过处理后生成固定大小的特征表示,从而可以直接接入全连接层进行分类或其他任务[^1]。 #### 原论文信息 SPP的核心思想来源于论文Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,由Kaiming He等人发表于2015年。这篇论文详细描述了如何利用空间金字塔池化技术改进深度卷积网络的性能,并展示了其在目标检测和其他视觉识别任务中的优势。 - **论文标题**: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition - **作者**: Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun - **会议**: ECCV 2014 #### 获取方式 以下是获取该论文的一些常见途径: 1. **官方出版平台**:可以通过ECCV官方网站或者SpringerLink检索并下载原文。 2. **学术搜索引擎**:Google Scholar是一个免费的资源,可以在其中搜索论文标题以找到PDF版本或在线阅读链接。 3. **开源网站**:arXiv.org也可能提供预印本形式的访问权限。 4. **机构库**:部分大学图书馆订阅了相关数据库,学生和教职工可通过校园网访问全文。 如果无法直接获得付费墙后的文档,尝试联系研究者本人或查阅是否有合法共享副本存在社交平台上也是一个可行的办法。 ```python import requests def fetch_paper_info(title): url = f"https://api.semanticscholar.org/graph/v1/paper/search?query={title}&limit=1" response = requests.get(url).json() paper_data = response['data'][0] return { 'title': paper_data['title'], 'doi': paper_data['doi'] if 'doi' in paper_data else None, 'url': paper_data['url'] } # Example usage info = fetch_paper_info("Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition") print(info) ``` 上述代码片段展示了一个简单的API请求示例,可用于查询Semantic Scholar上的论文元数据,包括DOI编号以及公开URL地址等重要字段。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值