深度学习——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进行分类。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SPSS 实现KMO和Bartlett的球形度检验[通俗易懂]

    SPSS 实现KMO和Bartlett的球形度检验[通俗易懂]第一步:选择“因子分析”导入数据后,按顺序选择就好:“分析”-“降维”-“因子”第二步:选择变量如果只有一个变量,选中之后,再点击一下中间向右边的那个箭头多个变量的话,比如,我这里选择x1-x8,就是选择x1变量后,按住shift键不放,再点击x8变量,就可以一下子选择8个变量。第三步:选择KMO和巴特利特球形度检验这里,先不要急着点“确定”,先选择“描述”,接着在“相关性矩阵”那里勾选“KMO和巴特利特球形度检验”输出结果KMO统计量值大于0.5,可以看出变量间的相关程度无太

  • PHP 7.2警告: “Cannot change session name when session is active”[通俗易懂]

    PHP 7.2警告: “Cannot change session name when session is active”

  • oracle srvctl命令,用srvctl命令配置service

    oracle srvctl命令,用srvctl命令配置service.用srvctl命令配置service除了用DBCA图形方式,还可以使用命令方式配置service,这种方法对于维护远程尤其有用。无论是创建还是维护都是用一个命令srvctl,先看一下srvctl命令和service相关的语法,如下:创建service[oracle@felix1~]$srvctladdservi.用srvctl命令配置service除了用DBCA图形方式,还可以使用…

  • C#生成Excel出现8000401a的错误的另一种解决办法。「建议收藏」

    C#生成Excel出现8000401a的错误的另一种解决办法。「建议收藏」网上能搜到的解决办法,常见的就是以下3种,比如参考这个博客https://www.cnblogs.com/gavindou/archive/2012/08/29/2661757.html1,增加虚拟权限:在web.config里面增加的键值;要求administrator具有管理员权限,这种方案使用后确实可行,可是不利于部署,因为有经验的人都知道把一个最高权限的服务器帐号密码公开显示在配置…

  • c语言 xff占几个字节,xff

    c语言 xff占几个字节,xff知识点:《xff》收集:充腾谑编辑:百合仙子本知识点包括:1、在计算机中,“a\xff”在内存中占用多少字节数?为什…2、C语言中printf(“%d\n”,strlen(“\t\”\065\xff\n”));…3、问个问题,printf(“%d”,strlen(“\t\”\065\xff\n”)…4、已知ch是字符型变量,下面正确的赋值语句是。A.ch…5、c程里…

  • blast+本地化中blastp操作(基于PDB库)—linux[通俗易懂]

    blast+本地化中blastp操作(基于PDB库)—linux[通俗易懂]blast+本地化的构建对于流程化处理大量数据序列很方便,blast+是将blast模块化,分为了蛋白质序列比对蛋白数据库(blastp)、核酸序列比对核酸数据库(blastn)、核酸序列比对蛋白质数

发表回复

您的电子邮箱地址不会被公开。

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