SPP Net

9人阅读 评论(0) 收藏 举报
分类:

原文地址:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

SppNet的贡献主要有两个:
+ 引入空间金字塔池化(SPP, Spatial Pyramid Pooling),允许模型接受不同大小的输入,最后能产生相同大小的输出。这样后面就可以进行多尺度训练。
+ 根据ZFNet的思想,将原图像中的某个区域通过变换映射到feature map的固定位置,这样就可以避免每张图片的每个Region Proposal进行训练,能节省时间。

1. SPP的具体过程

这里写图片描述
以上就是SPP和传统的CNN的区别。传统的CNN需要对图像就行截取或者填充,会导致信息丢失或者图像形变。街区可能会导致没有包含到整个物体,而填充会导致不希望看到的几何形变。然而对于CNN而言,其实卷积层是不需要进行固定大小的输入的,只是到了后来的全连阶层,如果大小不固定,甚至连全连接层的参数个数都没法确定。

SPPNet通过可视化Conv5层特征,发现卷积特征其实保存了空间位置信息(数学推理中更容易发现这点),并且每一个卷积核负责提取不同的特征,比如C图175、55卷积核的特征,其中175负责提取窗口特征,55负责提取圆形的类似于车轮的特征。我们可以通过传统的方法聚集这些特征,例如词袋模型或是空间金字塔的方法。
这里写图片描述

SPP的处理过程时,输入时不对图像进行任何处理,到了最后一个卷积层的后面,将所有得到的feature map处理到相同大小。类似于pooling窗口的尺寸及步伐设置为相对值,也就是输出尺寸的一个比例值,这样对于任意输入经过这层后都能得到一个固定的输出。具体做法是:
这里写图片描述

如果使用三层的金字塔池化层pooling,分别设置图片切分成多少块,论文中设置的分别是(1,4,16),然后按照层次对这个特征图feature A进行分别处理(用代码实现就是for(1,2,3层))。

  • 第一层对这个特征图feature A整个特征图进行池化(池化又分为:最大池化,平均池化,随机池化),论文中使用的是最大池化,得到1个特征。
  • 第二层先将这个特征图feature A切分为4个的小的特征图,然后使用对应的大小的池化核对其进行池化得到4个特征。
  • 第三层先将这个特征图feature A切分为16个的小的特征图,然后使用对应大小的池化核对其进行池化得到16个特征.

然后将这(1+4+16)×256=21×256个特征输入到全连接层,进行权重计算. 当然了,这个层数是可以随意设定的,以及这个图片划分也是可以随意的,只要效果好同时最后能组合成我们需要的特征个数即可。

2. 训练过程

作者分别进行了单尺度训练,多尺度训练法。对于每个feature map,如果有l层。则我们进行window pooling时,分别设置窗口大小为:win=[a/n], 滑窗大小:str=[a/n],其中[a/n]分别为向上向下取整。n为pyramid中bin的大小,例如文中作者分别试用了1×1,2×2,4×4的bin。

除此之外,作者分别尝试了多尺度训练。这样的好处是,先在一个尺度上训练好模型之后,然后使用另外一个尺度继续对模型进行调整。此外,还有多层次的金字塔来训练。

3. SPPNet对于Object Detection的贡献

在Object Detection中, 由于每张图片都会提取出2K+的Region, 每个Region的大小都不一样。一来需要进行缩放, 二来需要对每个框都进行一次卷积运算。而其实每个框之间有很多的信息都是相同的。存在着很多重复计算的过程。(这里不考虑crop, 因为crop本质上是一个数据增强的过程,如果数据量不够的话还是应该进行crop操作)。

因此作者采用的方法是,只训练一张图片,但是最后提取Region Proposal在feature map上对应的区域即可。Region Proposal提取左上角和右下角的坐标,然后构建相应的映射函数即可。因为原图片中的像素点最后被弄到了feature map中的哪个位置是固定的。具体的映射函数为:

假设每一层的padding都是p2p为卷积核大小。从第一个卷积层到最后一个卷积层,包括中间的池化层,计算各个层stride的乘积s ; (x,y)表示特征图上的坐标点,(x,y)表示原输入图片上的坐标点,那么每个矩形候选框的左上角、右下角在特征图上的对应点:
左上角:

x=xs+1y=ys+1

右下角:
x=xs+1y=ys+1

其中xx分别表示向下和向上取整。

查看评论

RCNN SPP_net

转载自: rcnn spp_net - 月月鸟在前进 - 博客园 http://www.cnblogs.com/rocbomb/p/4428946.html 在http://...
  • qq_26898461
  • qq_26898461
  • 2016-01-05 15:30:21
  • 1475

SPP-Net论文详解

SPP-Net是出自2015年发表在IEEE上的论文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recogn...
  • v1_vivian
  • v1_vivian
  • 2017-06-18 16:57:05
  • 4960

SPPNet论文笔记和caffe实现说明

SPPNet:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 自己总结的一些收获以及在caf...
  • u013010889
  • u013010889
  • 2016-12-29 15:17:03
  • 3358

spp_net 代码实现过程

参照这两篇步骤,不过中间还是出现一些问题: http://ouxinyu.github.io/Blogs/20150413001.html http://blog.csdn.net/liumaoli...
  • guojingjuan
  • guojingjuan
  • 2016-03-21 17:06:44
  • 2447

SPPNet

CNN网络需要固定尺寸的图像输入,SPPNet将任意大小的图像池化生成固定长度的图像表示,提升R-CNN检测的速度24-102倍。固定图像尺寸输入的问题,截取的区域未涵盖整个目标或者缩放带来图像的扭曲...
  • cv_family_z
  • cv_family_z
  • 2015-07-10 16:57:48
  • 14153

spp_net 在caffe上的实现

caffe上有spp_net 网络实现的源码,路径是caffe/src/caffe/layers/spp_layer.cpp,琢磨下,看能不能直接在caffe上跑起来。 http://blog.csd...
  • guojingjuan
  • guojingjuan
  • 2016-03-29 21:02:11
  • 3141

【目标检测】SPPNet算法详解

转载自 http://blog.csdn.net/u011534057/article/details/51219959 Spatial Pyramid Pooling in Deep Convo...
  • bryant_meng
  • bryant_meng
  • 2017-11-23 15:32:24
  • 290

基于深度学习的目标检测方法:SPP-net

SPP-net        论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition ...
  • u013989576
  • u013989576
  • 2017-05-18 22:03:16
  • 1075

用caffe训练一个spp_net网络

用caffe训练一个spp_net网络
  • guojingjuan
  • guojingjuan
  • 2016-03-30 15:03:42
  • 2170

R-CNN和SPP-net

一、两篇文章的对比 R-CNN这篇文章对每个regionproposal进行cnn特征提取,也可以解决多标签问题,但从下面的框架图可以看到: 需要输入大约2000次的cnn特征提取,在时间上和s...
  • u011148330
  • u011148330
  • 2015-04-29 10:50:47
  • 7315
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 1034
    排名: 4万+
    最新评论