目标检测之SPP-net

前言

本节将要介绍对R-CNN的改进,SPP-net。

R-CNN优化

首先我们回顾上节中R-CNN流程框架,通过selective search方法得到2000左右的候选框,然后通过crop/warp重塑成227*227的固定大小,再将每个region proposal送入CNN中进行特征提取,最后利用这些特征训练SVM得出结果。我们会发现,对于2000左右的候选框,每一个都需要一个CNN网络,计算效率会很慢。还有对于候选框进行重塑,会造成图像信息的缺失、变形失真,降低了准确率。

针对上述两种情况,能不能想办法进行优化。

1)将整张图片送入CNN中进行特征提取,那候选框如何表现呢?我们将候选框映射到最后的特征层上,形成每个候选框的feature maps,进而加速特征的提取;这样就只需一个CNN网络

2)卷积层和池化层与输入大小无关,它仅仅是一个卷积核在图像上滑动,不管输入图像多大都没关系。但是全连接层就和输入图像大小有关,需要指定输入层神经元个数和输出层神经元个数。那是不是可以在最后一个卷积层和全连接层之间接入一个特殊层,而不用管输入图片大小为多少,而产生固定大小的输出,传给全连接层。这就是金字塔池化层的概念(spatial pyramid pooling)

那么R-CNN优化后的结构如下:

下面对这两种优化进行详细阐述。

feature maps

在输入图片中的候选框,经过多层卷积之后,得到的feature maps大小和输入图片大小不一样,但相对位置是不会发生改变的。那现在需要解决的问题就是,如何能够将根据输入图片中的候选框位置计算出映射在卷积上的位置。论文中给出了计算公式:

假设(x’,y’)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系:

(x,y)=(S*x’,S*y’)

其中S的就是CNN中所有的strides的乘积。比如paper所用的ZF-5:

S=2*2*2*2=16

而对于Overfeat-5/7就是S=12,网络结构表格:

需要注意的是Strides包含了池化、卷积的stride。

而我们希望通过(x,y)坐标求解(x’,y’),那么计算公式如下:

左上,右下:

spatial pyramid pooling

接着讲如何利用空间金字塔池化解决输入图片尺寸要求。

我们假设一个很简单两层网络:

输入层:一张任意大小的图片,假设其大小为(w,h)。

输出层:21个神经元。

也就是说无论输入图片大小,我们始终输出固定大小为21的向量

如上图所示,当我们输入一张图片的时候,利用不同大小的刻度,对一张图片进行了划分。上面示意图中,利用了三种不同大小的刻度(从左至右,分别为16,4,1),对一张输入的图片进行了划分,最后总共可以得到16+4+1=21个块,我们即从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。

第一张图片,我们把一张完整的图片,分成了16个块,也就是每个块的大小就是(w/4,h/4);

第二张图片,划分了4个块,每个块的大小就是(w/2,h/2);

第三张图片,把一整张图片作为了一个块,也就是块的大小为(w,h)

空间金字塔最大池化的过程,其实就是从这21个图片块中,分别计算每个块的最大值,从而得到一个输出神经元。最后把输出神经元拼凑在一起,就成立一个固定大小的21维特征(当然你可以更改输出维数,如增加金字塔的层数,或是改变划分网格的大小)。上面的三种不同刻度的划分,每一种刻度我们称之为:金字塔的一层,每一个图片块大小我们称之为:windows size。如果你希望,金字塔的某一层输出n*n个特征,那么你就要用windows size大小为:(w/n,h/n)进行池化。

而当有很多层网络的时候,当网络输入的是一张任意大小的图片,这个时候我们可以一直进行卷积、池化,直到卷积层与全连接层连接的时候,插入空间金字塔池化层,使得任意大小的特征图都能够转换成固定大小的特征向量

具体过程如下:

总结

SPP-net针对R-CNN的优化

1、 解决了R-CNN速度慢的问题,不需要对每个Proposal(2000个左右)进行Wrap或Crop输入CNN提取Feature Map,只需要对整图提取一次Feature Map,然后将Proposal区域映射到卷积特征层得到全连接层的输入特征。

2、通过Spatial Pyramid Pooling解决了深度网络固定输入层尺寸的这个限制,使得网络可以享受不限制输入尺寸带来的好处。

两者对比:

自身缺点

SPP-net存在的问题是最后还有需要使用SVM进行分类,下节将要介绍fast-rcnn来实现端到端的训练。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值