深度学习——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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 360奇安信天擎卸载不干净_奇安信Ateam

    360奇安信天擎卸载不干净_奇安信Ateam360天擎是什么具体可以参考:百度:360天擎总之,一些单位里为了安全防护,会在单位的电脑上安装360天擎,如果你想用自己的笔记本电脑连上单位的网络的话,也会要求你安装。不安装就连不上网络,但安装之后,卸载又是一个很大的难题。用什么卸载其实网上会有很多强力卸载软件,甚至有些会强力到可以卸载系统文件,这类软件不建议使用(如果用的明白,请自便)。无效方式如,腾讯管家自带的软件管理有效方式如,联想电脑管家,和微软自带的卸载,如下图:点击右键->卸载->完成?不不不,这

    2022年9月25日
  • 伴随矩阵的秩和原矩阵的秩的关系[通俗易懂]

    伴随矩阵的秩和原矩阵的秩的关系[通俗易懂]

    2022年5月20日
  • 协同过滤推荐算法在python上的实现

    1.引言信息大爆炸时代来临,用户在面对大量的信息时无法从中迅速获得对自己真正有用的信息。传统的搜索系统需要用户提供明确需求,从用户提供的需求信息出发,继而给用户展现信息,无法针对不同用户的兴趣爱好提供相应的信息反馈服务。推荐系统相比于搜索系统,不需要提供明确需求,便可以为每个用户实现个性化推荐结果,让每个用户更便捷地获取信息。它是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣…

    2022年4月6日
  • 远程调试部署在容器中的springboot项目「建议收藏」

    远程调试部署在容器中的springboot项目「建议收藏」问题:访问网站,会根据ip判断访客所处位置,但部分ip插入数据库失败。 以为是一次小问题,很快就解决了,没想到最终花了6个小时左右,才搞清楚。分析 :1、将本地程序跑起来,发现一切正常,可以插入到数据库。但问题在线上确实妥妥的出现的,而我现在日志级别是info,没有错误日志。所有准备Debug线上程序,之前只debug过使用基本的tomcat发布。而我现在的jar是使用docker构建的镜像,运行的镜像。 2、问题从线上转化到了,我需要远程debug线上程序发现问题,并将之解决。查各种资料,配置

    2022年6月13日
  • C++的就业,和发展方向

    C++的就业,和发展方向原文:C/C++的就业,发展方向_LoongChang_新浪博客http://blog.sina.com.cn/s/blog_78b2ae1c0101d4o9.htmlC++学习路线从学习C++到现在已经有四个年头了,但是从来没有很深入学习,有人说C++是面向对象的编程语言,但是我在这里想说的是,C++是一个多泛型的编程语言,它既可以面向过程,比如我们完全可以用C++写C的代码,这是没问题…

    2022年6月7日
  • pycharm2021 激活码破解方法

    pycharm2021 激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日

发表回复

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

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