SPPNet的原理[通俗易懂]

SPPNet的原理[通俗易懂]简介SPPNet的英文名称是SpatialPyramidPoolingConvolutionalNetworks,翻译成中文是“空间金字塔池化卷积网络”。paper地址https://arxiv.org/pdf/1406.4729.pdf原理    SPPNet主要做了一件事:将CNN的输入从固定尺寸改进为任意尺寸。例如,在普通的CNN结构中,输入的尺寸往往是固定的(如224*224…

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

简介

SPPNet的英文名称是Spatial Pyramid Pooling Convolutional Networks,翻译成中文是“空间金字塔池化卷积网络”。

paper地址https://arxiv.org/pdf/1406.4729.pdf

原理

       SPPNet主要做了一件事:将CNN的输入从固定尺寸改进为任意尺寸。例如,在普通的CNN结构中,输入的尺寸往往是固定的(如224*224*3),输出可以看做是一个固定维数的向量。SPPNet在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。

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

SPPNet的原理[通俗易懂]

为什么ROI池化层能够把任意大小的卷积特征转换成固定长度的向量

      不妨设卷积层的输出的宽度为w, 高度为h,通道为c。不管输入的图像尺寸是多少,卷积层的通道数都不会变,也就是说c是一个常数。而w,h会随着输入图像尺寸的变化而变化,可以看做是两个变量。以上图中的ROI池化层为例,它首先把卷积层划分为4*4的网格,每个网格的宽度是w/4,高是h/4,通道数为c。当不能整除时,需要取整。接着,对每个网格中的每个通道,都取出其最大值,换句话说,就是说对每个网格内的特征做做最大值池化(Max Pooling)。这个4*4的网格最终就形成可16c维的特征。接着,再把网络划分成2*2的网络,同样的方法提取特征,提取的特征的长度为4c。再把网络划分为1*1的网络,提取的特征的长度就是c,最后的1*1的划分实际是去处卷积中每个通道的最大值。最后,将得到的特征拼接起来,得到的特征是16c+4c+c=21c维的特征。很显然,这个输出特征的长度与w,h两个值无关的,因此ROI池化层可以吧任意宽度,高度的卷积特征转换为固定长度的向量。

可以这样考虑问题:网络的输入是一张图像,中间进过若干卷积形成了卷积特征,这个卷积特征实际上和原始图像在位置上是有一定的关系的。因此,原始图像中的候选框,实际上也可以对应到卷积特征中相同位置的框。由于候选区域框的大小千变万化,对应到卷积特征的区域形状也各不相同,但是不用担心,利用ROI池化层可以把卷积特征中的不同形状的区域对应到同样长度的向量特征。


参考书籍21个项目玩转深度学习

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

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

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


相关推荐

  • java线程join方法

    java线程join方法java线程join方法1.join方法​ join方法的作用是进行线程插队,也就是说调用了join方法的线程相对于调用它的上级线程拥有跟高的执行权。调用join方法的线程的上级线程必须等待调用join方法的线程执行完成才能继续执行。举个小例子:publicclasstestjoin{ publicstaticvoidmain(String[]args)throwsI…

    2022年5月5日
    43
  • django通用视图通俗讲解_工程制图中视图包括哪些种类

    django通用视图通俗讲解_工程制图中视图包括哪些种类前言上篇我们通过mixin可以非常方便的实现一些CURD操作。实际上针对这些mixin,DRF还进一步的进行了封装,放到generics下。有以下generic类视图:generics.ListA

    2022年7月30日
    9
  • 婴儿照片大全可爱萌萌_好萌图片

    婴儿照片大全可爱萌萌_好萌图片萌翻了!这是一组可爱的婴儿照片,你可以从中学习到优秀的婴儿照片拍摄技术。就像我以前说的,婴儿总是持续在运动,因此很难找到一个好的角度。拍摄的时候,试着和婴儿保持同一水平,使用长de焦距。特别在最初几

    2022年8月4日
    10
  • leetcode 回文数_字符串转换为整数

    leetcode 回文数_字符串转换为整数原题链接请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,“1

    2022年8月9日
    5
  • EXT中的apply方法

    EXT中的apply方法Ext.apply=function(o,c,defaults){if(defaults){//no"this"referenceforfriendlyoutofscopecallsExt.apply(o,defaults);}if(o&&c&&typeofc==…

    2022年7月28日
    5
  • 【转载】视频跟踪的研究

    首先,什么是视频跟踪?基于视频的运动目标跟踪技术作为计算机视觉领域的核心研究课题之一, 主要目的是模仿生理视觉系统的运动感知功能,通过对摄像头捕捉到的图像序列进行分析,计算出运动目标在每一帧图像中的二维坐标位置;然后,根据运动目标相关的特征值,将图像序列中连续帧间的同一运动目标关联起来,得到每帧图像中目标的运动参数以及相邻帧图像间运动目标的对应关系,从而得到各个运动目标完整的运动轨迹,即在

    2022年4月10日
    42

发表回复

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

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