SPPnet 详解[通俗易懂]

SPPnet 详解[通俗易懂]RCNN系列:RCNN,SPPNet,FastRCNN,FasterRCNN,R-FCN。  前不久刚刚看完rcnn和fastrcnn,对目标检测的学习更进一步。sppNet简介:作者:何凯明  2016年加入成为FAIR(facebook微软研究员),2011年获得博士学位,主要兴趣和研究在计算机视觉和深度学习。获得cpvr和iccv多个奖项。 SP…

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

RCNN系列:RCNN,SPPNet,Fast RCNN,Faster RCNN,R-FCN。

 

  前不久刚刚看完rcnn和fast rcnn,对目标检测的学习更进一步。sppNet简介:

作者: 何凯明

SPPnet 详解[通俗易懂]

   2016年加入成为FAIR(facebook 微软研究员),2011年获得博士学位,主要兴趣和研究在计算机视觉和深度学习。

获得cpvr和iccv多个奖项。

 

SPPNet为何出现?

之前的网络,比如LeNet,AlexNet,ZF,VGG等,它们的输入都是固定大小的,为什么要固定大小呐?原因就在最后连接的全连接层上。全连接层的输入一定是固定大小的。这一点很容易理解,因为全连接层网络就是传统的神经网络,传统的神经网络的输入层必定是固定大小的。而卷积神经网络的conv层的输入并不需要固定大小,

那么conv层不用固定大小,FC层的输入又要固定大小,那么在这两者之间加上一层SPP即可解决这个问题了。

SPPnet 详解[通俗易懂]

spp的实现

SPPnet 详解[通俗易懂]

黑色图片代表卷积之后的特征图,接着我们以不同大小的块来提取特征,分别是4*4,2*2,1*1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial bins),我们从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。这种以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP)。比如,要进行空间金字塔最大池化,其实就是从这21个图片块中,分别计算每个块的最大值,从而得到一个输出单元,最终得到一个21维特征的输出。

输出向量大小为Mk,M=#bins, k=#filters,作为全连接层的输入。

         例如上图,所以Conv5计算出的feature map也是任意大小的,现在经过SPP之后,就可以变成固定大小的输出了,以上图为例,一共可以输出(16+4+1)*256的特征。

 

网络训练阶段:

       论文中将网络的训练分为两种:一种是single-size,一种是Multi-size。

先讲解single-size的训练过程:理论上说,SPP-net支持直接以多尺度的原始图片作为输入后直接BP即可。实际上,caffe等实现中,为了计算的方便,GPU,CUDA等比较适合固定尺寸的输入,所以训练的时候输入是固定了尺度了的。以224*224的输入为例:在conv5之后的特征图为:13×13(a*a)金字塔层bins:   n*n将pooling层作为sliding window pooling。
windows_size=[a/n] 向上取整 , stride_size=[a/n]向下取整。

例如论文中给出的参数如下:

SPPnet 详解[通俗易懂]

对于pool 3*3:      sizeX=5 的计算公式是:[13/3]向上取整=5 ,stride = 4的计算公式是:[13/3]向下取整。

如果输入改成180×180,这时候conv5出来的reponse map为10×10,类似的方法,能够得到新的pooling参数。

       对于Multi-size training即就是:使用两个尺度进行训练:224*224 和180*180

       训练的时候,224×224的图片通过crop得到,180×180的图片通过缩放224×224的图片得到。之后,迭代训练,即用224的图片训练一个epoch,之后180的图片训练一个epoch,交替地进行。

        两种尺度下,在SSP后,输出的特征维度都是(9+4+1)x256,参数是共享的,之后接全连接层即可。

        论文中说,这样训练的好处是可以更快的收敛。

 

  spp_Net:

  1. 首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样。
  2.  特征提取阶段。这一步就是和R-CNN最大的区别了,这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升。
  3. 最后一步也是和R-CNN一样,采用SVM算法进行特征向量分类识别。
  4. 使用nms做极大值抑制处理,获取候选的region proposal
  5. 做回归器精修处理

 

总结:

  1.sppnet的存在可以使CNN输入不同大小的图片,但可以获得相同的特征向量。

  2.RCNN会对每个ss选出来的region proposal 进行cnn处理,占用大量时间,sppNet直接对整张图进行cnn操作,再用每个region proposal 对应conv5后的feature map进行spp处理获得相同大小的特征向量,减少训练时间。

  3.依然会将处理的特征向量放入disk 占用100多G memory

 

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

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

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

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

(0)
blank

相关推荐

  • matlab怎么画二元函数_matlab求解二元方程

    matlab怎么画二元函数_matlab求解二元方程plot:画线(curve,二维空间以及三维空间)surf:画面(surface,一般在三维空间)1.surf绘图函数surf是surface的缩写,表示表面(显然至少三维图像才会有表面);z=3×2+3y2+3xy+1−3x−3y自变量区域的指定比如这样的一个定义域,D={(x,y)|x≥0,y≥0,x+y≤1}…

  • 永恒之蓝 wannacry_永恒之蓝病毒攻击原理

    永恒之蓝 wannacry_永恒之蓝病毒攻击原理1.直接关闭server服务打开cmd执行关闭server服务即可:netstopserver控制面板–管理工具–服务里手动关掉 2.防火墙限制445端口   3.打补丁【KB4012598】:http://www.catalog.update.microsoft.com/Search.aspx?q=KB4012598适用于WindowsXP32位…

    2022年10月16日
  • 10款sublime插件推荐

    10款sublime插件推荐1. PackageControl作为安装SublimeText插件的必备利器,PackageControl是这款编辑器的标配,可以方便开发人员快速安装需要的插件。2. Git在工作中,版本控制软件最常用的软件之一,而最流行的VCS是 Git。你是否厌倦了保存文本文件,并切换回终端运行一些Git命令。如果你能从文本编辑器本身执行Git命令

  • windows 多线程_关于多线程的技术分享

    windows 多线程_关于多线程的技术分享本文内容较为详细,关于更简短的一篇介绍,请看这里:https://blog.csdn.net/weixin_45525272/article/details/105057120多线程同步技术在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进…

  • ubuntu18.04安装虚拟显示器,不接显示器可远程桌面

    ubuntu18.04安装虚拟显示器,不接显示器可远程桌面Overview主机配置启用远程控制安装软件和支持其它注意事项Reference主机配置系统:Ubuntu18.04显卡…

  • pycharm需要安装哪些包_用于引入包的关键字

    pycharm需要安装哪些包_用于引入包的关键字在学习python的时候,被推荐了使用PyCharm这款IDE,但是在import包的时候却发生了问题–无法引入,但是明明通过了pip进行模块的加载,百度之后,了解到,在这款IDE中,要导入包,需要手动进行引入。如下图所示首先在file中找到settings顺带一下,如果有的同学是第一次接触这款IDE,可能对与皮肤颜色不太了解,其实也是在settings中进行设置的,而且该公司旗下的其他产品如…

发表回复

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

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