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)


相关推荐

发表回复

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

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