作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun

以前的CNNs都要求输入图像尺寸固定,这种硬性要求也许会降低识别任意尺寸图像的准确度。为避免这个问题,何凯明等人在该论文中提出了一种池化策略,“spatial pyramid pooling(SSP)“,即空间金字塔池化。带有该池化层的网络被称为SPPnet,对任何尺寸的输入图像都能生成固定长度的特征表示。由此可见,理论上SPPnet可以改进所有基于CNN的图像分类等方法中。在性能上,SPPnert能够大幅提升CNN的准确度。同样,在object detection方面也有重要应用。使用SPPnet时可以只计算一次整个图像的feature maps,然后在featrue maps中选择任意region(sub-images)进行pooling以产生固定长度的特征给后面的detectors。这样就可以避免重复地计算卷积特征。因此,使用SPPnet的话可以大幅降低网络的训练和测试时间。

以下对论文部分内容进行记录:

2.2 The Spatial Pyramid Pooling Layer

卷积层的输入是任意size的,输出的尺寸会与之对应,因为也是一个变化的size。但是分类器(SVM/softmax)或者全连接层的输入需要是fixed-length vectors。这样的vectors可以使用Bag-of-Words(BoW)法池化特征得到,但是该方法会带来空间信息丢失的问题,而论文中提出的空间金字塔则可以通过在本地空间容器中池化从而保留空间信息。那些容器与图像的size成正比,且不管图像的尺寸如何变化,容器的数量都是固定的。

在CNN中使用Spatial Pyramid Pooling Layer时需要将网络的最后一个池化层换成一个空间金字塔池化层。Figure 3说明了具体的方法。

从图中可以看出,在每个容器(bin, 每个含多通道的小方格,图中有21个bins)中我们池化每个filter(Figure 3中单通道的小方格)的响应(论文中使用的都是max pooling);空间池化的输出是kM-dimentional vectors,其中M是bins的数量,k是最后一个卷积层中filters的数量,即通道数;fixed-dimentional vectors被输入到全连接层。

上图中最终提取的特征长度为16x256+4x256+256,即16c+4c+c

4. SPP-net for Object Detection

作者回顾了最近在目标检测领域最顶尖的R-CNN算法,发现由于R-CNN重复将深度卷积网络应用于每幅图像的数千个windows,导致R-CNN在训练和测试时耗时较长。SPPnet正好可以有效地缓解该问题。方法大致如下:先计算一次整幅图像的feature maps(可能是多通道),然后对每个candidate window在feature maps中的映射区域进行空间金字塔池化,以得到该window的固定长度特征(Figrure)。由此可见,卷积网络只进行一次耗时的卷积计算,这让R-CNN快几个数量级。

论文中的方法从feature maps(可能是multi-scale,即多通道)的rigion中得到windows的features,而R-CNN直接从所有Image regions中提取。

4.1 Detection Algorithm

算法过程:

  • 使用selective search的‘fast’模式从每一幅图像产生大约2000个candidate windows
  • 调整图像的大小使得min(w,h)=s,即图像的最短边长度为s,并且计算整幅图像的feature maps
  • 暂时使用single-size trained(指输入图像是固定尺寸的,还有一种multi-size训练),在每个candidate window中使用4级空间金字塔进行池化(1x1,2x2,3x3,6,x6,总共有50 bins),得到一个12800-d(256x50)的representation。
  • 将上一步得到的所有candidate windows的representations提供给网络的全连接层(R-CNN也有全连接层)计算得到features
  • 使用线性SVMs根据features给candidate windows打分,然后对scored windows使用非极大值抑制,阈值取0.3(每一类的二值线性SVM classifier是使用上一步得到的features训练的)
  • 利用features进行bounding-box regression

SVMs的训练:将ground-truth windows标记为Positive examples,将与一个positive example交叉比最多0.3的candidate Windows标记为negative examples。和R-CNN中SVMs的训练类似,IoU大于0.3且不是positive examples的windows会被忽略。同时,那些与另一个negative example的IoU大于0.7的negative examples会被移除,不再被视为negative examples。论文中训练SVMs使用的是standard hard negative mining。在测试时,SVMs classifier被用来给candidate windows打分,然后对打过分的windows使用非极大值抑制。

multi-scale feature extraction 能够进一步改善算法:论文中将image 尺度调整为min(w,h)=s,s属于{480,576,688,864,1200},并且计算每个scale的feature maps。可以通过逐个通道池化的方法结合从每个尺度提取到的特征,也就是训练的时候在epoch中首先训练一个尺寸产生一个Model,然后加载该Model训练第二个尺度,直到训练完所有的尺寸为止。但是作者根据经验发现了另一种可以带来更好效果的方法:先将image resize到五个尺度:480,576,688,864,1200,加自己6个。然后在map window to feature map一步中,选择ROI框尺度在{6个尺度}中大小最接近224x224的那个尺度下的feature maps中提取对应的roi feature。这样做可以提高系统的准确率。同样,该方法也只需要在每个scale上计算一次卷积,不管candidate Windows的数量。

window 到Feature maps的映射关系:

假设(x’,y’)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系,这种映射关心与网络结构有关: (x,y)=(S*x’,S*y’)。那么通过(x,y)坐标求解(x’,y’)的计算公式如下:

式中S就是CNN中所有的strides的乘积,包含了池化、卷积的stride

SPPnet与R-CNN的相同点:它们都遵循着提取候选框、提取特征、分类几个步骤;在提取特征后都使用了SVM进行分类;训练都分为多个阶段,复杂且耗时;features都需要写入硬盘。

SPPnet与R-CNN的不同点:R-CNN要对每个缩放后的region proposal计算卷积,而SPPnet只需要计算一次整幅图像的卷积,因此SPPnet的效率比R-CNN高得多

SPPnet明显的缺陷:与R-CNN一样,SPPnet的训练分为多个阶段,涉及到提取特征、微调网络、训练SVMs和最后的bounding-box regressors拟合;特征需要写入硬盘;另外,不像R-CNN,SPPnet在微调时不能更新空间金字塔池化层之前的卷积层参数,这一点限制了深度网络的精度。关于最后一点其实不准确,SPPnet也可以反向传播,但是会很复杂,可以参见知乎。本文作者给出的解释如下图:

而Ross Girshick在论文《Fast R-CNN》中认为SPPnet在微调时不能更新卷积层参数,给出的解释如下:

显然,Ross Girshick其实是认为当训练来自不同图像的ROIs时反向传播经过SPP 层的效率非常低下,这时更新卷积层参数耗时较长,不能更新卷积层参数,而不是不可以更新。

至于Ross Girshick为什么说SPP层反向时效率非常低,网上的解释如下:

SPP-Net中fine-tuning的样本是来自所有图像的所有RoI打散后均匀采样的,即RoI-centric sampling,这就导致SGD的每个batch的样本来自不同的图像,需要同时计算和存储这些图像的Feature Map,过程变得expensive. Fast R-CNN采用分层采样思想,先采样出N张图像(image-centric sampling),在这N张图像中再采样出R个RoI,具体到实际中,N=2,R=128,同一图像的RoI共享计算和内存,也就是只用计算和存储2张图像,消耗就大大减少了

完整的SPPnet模型示意图:

参考链接:

目标检测(二)SSPnet--Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognotion的更多相关文章

  1. 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)

    Spatial pyramid pooling in deep convolutional networks for visual recognition 作者: Kaiming He, Xiangy ...

  2. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Kaiming He, Xiangyu Zh ...

  3. 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...

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

    http://www.dengfanxin.cn/?p=403 原文地址 我对物体检测的一篇重要著作SPPNet的论文的主要部分进行了翻译工作.SPPNet的初衷非常明晰,就是希望网络对输入的尺寸更加 ...

  5. 论文阅读笔记二十五:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPPNet CVPR2014)

    论文源址:https://arxiv.org/abs/1406.4729 tensorflow相关代码:https://github.com/peace195/sppnet 摘要 深度卷积网络需要输入 ...

  6. 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要求输入图像尺 ...

  7. 论文解读2——Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    背景 用ConvNet方法解决图像分类.检测问题成为热潮,但这些方法都需要先把图片resize到固定的w*h,再丢进网络里,图片经过resize可能会丢失一些信息.论文作者发明了SPP pooling ...

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

    1. https://www.cnblogs.com/gongxijun/p/7172134.html (SPP 原理) 2.https://www.cnblogs.com/chaofn/p/9305 ...

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

    基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...

随机推荐

  1. 树莓派进阶之路 (038) - P2P 文件下载机

    硬件要求: 树莓派开发板 USB外接硬盘 一. Together 1. 更新安装程序 sudo apt-get update sudo apt-get upgrade sudo apt-get ins ...

  2. Redis 学习之路 (011) - redis 多数据库

    一台服务器上都快开启200个redis实例了,看着就崩溃了.这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开. 那么,redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的 ...

  3. 机智的MySQL优化器 --- is null

    [介绍] 工作的越久越到的的问题越多,就越是觉得一些“老话”历久弥新:由于最近的学习计划是深入的学习一遍MySQL优化器:学习过程中的一些成果 也会发布到这里,一来是为了整理自己已经知道的和新学到的, ...

  4. 检查linux的磁盘空间占用

    先初步看看哪个目录占用最大$ df -h 然后细看遍历某目录的占用情况:$ sudo du -a /data  | sort -nr | less(单位是KB)

  5. redis的事务不是原子性

    Reference: https://blog.csdn.net/u011692780/article/details/81213010 一.事务的四大特性 关系型数据库的事务具有四个特性: 1. 原 ...

  6. 【转】WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要针对WPF项目 ...

  7. 给你的app添加桌面widget

    首先,什么是桌面widget,桌面widget是一种桌面插件,如下图: 这种类型的控件叫做widget,一般长按桌面会弹出一个界面让你选择控件,选择完了拖到桌面就能使用了. 下面我们为这个app来添加 ...

  8. 【2019年04月09日】A股净资产收益率ROE最高排名

    个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名. 沈阳机床(SZ000410) - 滚动ROE:251.45% - ...

  9. Kafka 2.1.0压缩算法性能测试

    Apache Kafka 2.1.0正式支持ZStandard —— ZStandard是Facebook开源的压缩算法,旨在提供超高的压缩比(compression ratio),具体细节参见htt ...

  10. Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子

    转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...