目标检测2 SPPnet

来源:互联网 发布:上海惠保数据不发工资 编辑:程序博客网 时间:2024/06/09 00:35

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren

现在的深度卷积神经网络要求输入图像固定大小,这样的要求减小了图像或者随意大小子图像的识别精确度。作者提出空间金字塔池化来解决上边问题。这个新网络叫做SPP-net,能够生成随意大小图片的固定大小的表达。对于变形图片,SPP-net任然具有鲁棒性。由于这些优点,SPP-net能够提高所有基于卷积神经网络的图像分类方法的表现。
那么为什么需要固定大小的图片呢?卷积层不需要,全连接层需要。SPP-net位置如下图:
这里写图片描述
SPP的显著的性质:
1.不管输入图片的大小,可以产生固定大小的输出;
2.滑动窗口池化需要固定大小的窗口,而SPP可以是不同空间尺寸;
由于输入图像大小不一,可以对任意尺度提取的特征进行池化。
使用变化大小的图片进行训练可以减小过拟合。每个周期使用不同大小的图片训练,但一个周期中的训练图片大小相同,通过调整大小,而不是crop或者wrap,所以图像调整后只有分辨率不同,纹理和边界都相同。每个周期的大小从【180,224】中随机均匀选取。
在目标检测领域,使用特征图训练一个检测器,而不直接是图像区域,应用更加广泛。
卷积层的输出是特征图,特征图不仅包含响应的强度,还包含空间位置。不同的滤波器可以被不同的语义纹理激活,而我们需要各种纹理,所以我们在卷积神经网络卷积层上需要很多滤波器。
空间金字塔的原理,看下图便一目了然:
这里写图片描述
那么怎么算窗口大小和步长呢?如下图:
这里写图片描述
比如,特征图大小为13*13,3层金字塔,产生特征向量为3*3,2*2,1*1,那么窗宽win = a/n(ceiling操作),步长str = a/n(floor操作),a此时为13,n分别为3,2,1。

图像识别
作者通过实验证明,在图像识别中,多尺度池化,多尺度图片大小,能够提高精确度。空间金字塔池化能够提高精确度,并不是因为参数多,而是因为鲁棒性好,即使参数少,表现也一样高。如果在卷积后,再加上多尺度views(包括原图和原图的翻转计算的特征图),效果更好。(view的意思是,对最后一层卷积出来的特征图,比如大小为20*20,我们选择15*15进行spp操作,那么我们可以在20*20特征图上不同位置选择15*15大小部分来进行spp操作,然后将所有的特征向量组合起来。)

目标检测
这里写图片描述
相对于Rcnn,作者在每张图片经过最后一个卷积层计算的到的特征图上,选取不同window,对每个window通过spp计算特征向量,这样每张图只需要经过一次卷积网络,从而减少计算时间。而且允许在卷积输出特征图的随意大小的windows上进行spp提取特征。
具体怎么操作呢?首先要明白的是,原图任何一个像素点都可以映射到卷积后得到的特征图上。所以还是使用选择性搜索提取候选区,当原图经过计算得到特征图后,将这些候选区映射到特征图上,从特征图上提取出相应的window,然后经过spp计算相应的特征向量。这样就避免每个候选区通过卷积网络来计算特征向量,从而减少时间。
但是作者训练时只是微调了全连接层,没有微调卷积层。

我发现,网上有的文章对SPPnet在目标检测训练的方法上理解有误。作者通过多尺度特征提取来提高结果,具体方法如下:先将原图resize为min(w,h) = s ∈ S = {480,576,688,864,1200},计算每个尺度的最后一层卷积的输出特征图。这时如何组合?有两种方法:1.将这些所有尺度的所有输出特征图进行池化,然后组合每个特征图上提取的特征;2.选择一个尺度的输出特征图,只将这个尺度输出的特征图池化提取的特征组合,然后进行训练。那么如何选取这个特定的尺度呢?对于每个目标建议块(region proposal),按照不同尺度映射到对应尺度输出的特征图上,如果目标建议块在哪个尺度映射到特征图后的大小接近 224×224,我们就选哪个尺度。作者实验证明方法2较好。

原创粉丝点击