深度学习——SPPNet原理[通俗易懂]

深度学习——SPPNet原理[通俗易懂]从R-CNN到FastR-CNN,有必要了解下SPPNet,其全称为SpatialPyramidPoolingConvolutionalNetworks(空间金字塔池化卷积网络)。它将CNN的输入从固定尺寸改进为任意尺寸,例如在CNN结构中,输入图像的尺寸往往固定的(如224×224像素),输出可看做固定维数的向量。SPPNet在普通的CNN结构中加入了ROI池化层(ROIPo…

大家好,又见面了,我是你们的朋友全栈君。

从R-CNN 到Fast R-CNN,有必要了解下SPPNet,其全称为Spatial Pyramid Pooling Convolutional Networks(空间金字塔池化卷积网络)。

它将CNN的输入从固定尺寸改进为任意尺寸,例如在CNN结构中,输入图像的尺寸往往固定的(如224×224像素),输出可看做固定维数的向量。 SPPNet在普通的CNN结构中加入了ROI池化层(ROI Pooling)使得网络输入图像可以为任意size,而保证了输出维度是固定的向量。

ROI池化一般放在卷积层后,它的输入是任意大小的卷积,输出是固定维数向量,如下图为ROI池化:

深度学习——SPPNet原理[通俗易懂]

 

 

 

 

 

 


ROI池化层是如何能把任意输入大小的卷积特征转换为固定长度的向量的呢?

设传入池化层的卷积层宽w,高h,通道c 。不管输入的图像尺寸是多大,卷积层的通道c不变,是个常数。而w,h会随着input image尺寸的变化而变化,是变量。以上图中的ROI池化层为例,它首先把卷积层划分为4×4的网格,每个网格宽高分别为:w/4, h/4,通道数为c 。若不能整除则需取整。然后对每个每个通道中每个网格做最大池化(Max Pooling),这个4×4的网格最终变为16c维度的特征向量了。再然后把卷积层划分为2×2网格,同样用最大池化提取特征,得到4c维度的向量。同样把卷积层划分为1×1网格,得到1c维向量。最后将输出特征拼接成16c+4c+c=21c维度的特征。显然这个维度特征与输入图像(换句话说输入卷积层尺寸)w,h两个数据无关,因此ROI池化层可以把任意宽度和高度的卷积特征转换为固定长度的向量。

ROI池化层怎么用到目标检测呢?

网络的输入是一张图像,经过若干卷积得到卷积特征,这个卷积特征实际上和原始图像在位置上有一定对应关系(即卷积特征在同样位置会产生激活)。因此原始图像中的候选框,实际上也可以对应到卷积特征中相同位置的框。由于候选框大小千变万化,对应到卷积特征的区域形状也形状各异,利用ROI层可以把卷积特征中不同形状区域对应到同样长度的向量特征。这样就可以将原始图像中的不同长宽的区域都对应到一个固定长度的向量特征,这就完成了各个区域特征提取工作。

在R-CNN中对于原始图像的各种候选区域框,必须把框中的图像缩放到统一大小,再对每一张缩放后的图像提取特征。使用ROI池化层后,就可以先对图像进行一遍卷积计算,得到整个图像的卷积特征;接着对于原始图像中的各种候选框,只需要在卷积特征中找到对应的位置框,再使用ROI池化层对位置框中的卷积提取特征,就完成提取特征的工作。

R-CNN和SPPNet的不同点在于,R-CNN要对每个区域计算卷积,而SPPNet只需要计算一次,因此SPPNet的效率比R-CNN高得多。

R-CNN和SPPNet的相同点在于,他们都遵循着提取候选框,提取特征,分类几个步骤,提取特征后都使用SVM进行分类。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131867.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat for mac激活码【中文破解版】

    (navicat for mac激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    43
  • Mysql 备份的三种方式

    Mysql 备份的三种方式备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能回复到数据变化之前的数据。那变化之后的呢?所以制定一个好的备份策略很重要。一、备份的目的做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用二、备份需要考虑的问题可以容忍丢失多长时间的数据;恢复数据要在多长时间内完;恢复的时候是否需要持续提供服务;恢复的对象,是整个库,多个表,还是单个…

    2022年6月15日
    35
  • 移位运算用法总结

    移位运算用法总结位运算总结原文一、位运算应用口诀清零取位要用与,某位置一可用或若要取反和交换,轻轻松松用异或二、移位运算它们都是双目运算符,两个运算分量都是整形,结果也是整形。‘<<’左移:右边空出的位置补0,其值相当于乘以2。‘>>’右移:左边空出的位,如果是正数则补0,若为负数则补0或1,取决于所用的计算机系统OSX中补1。其值相当于除以2。…

    2022年7月13日
    18
  • 状况与状态区别_402状态码

    状况与状态区别_402状态码http状态码301和302详解及区别一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解。这里记录下,希望能有新的认识。大家也共勉。官方的比较简洁的说明:301redirect:301代表永久性转移(PermanentlyMoved)302redirect:302代表…

    2022年10月3日
    7
  • Handler和HandlerThread

    Handler和HandlerThread

    2021年12月9日
    46
  • Python初识模块之正则表达式

    Python初识模块之正则表达式什么是正则表达式  正则表达式是字符串匹配的一种规则,在线测试工具http://tool.chinaz.com/regex/[字符组]在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字、字母、标点等等。假如你现在要求一个位置”只能出现一个数字”,那么这个位置上的字符只能是0、1、2…9这10个数之一。[0-9]、[a-z]、[A…

    2022年7月13日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号