目标定位和检测系列(4): 金字塔池化 (SPP-net)

论文原文链接:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

虽然这篇文章的标题说是将金字塔池化用在目标识别上的。但是文章最后将它进一步用在了目标检测任务上,很好地解决了R-CNN方法在目标检测上的部分问题,最终也取得了不错的效果。所以也很有必要好好学习一下这篇论文。

摘要

现有的卷积神经网络需要固定尺寸的输入图像(比如224*224)。这种需求可能会降低原图像或者子图像(即在任意尺寸的原图上裁剪出指定大小的子图)的识别精度。在本文的工作里,我们引入另一种池化策略:金字塔池化,来消除网络对固定尺寸输入的限制。我们把这种新的网络结构叫SPP-net,不管网络输入图片的尺寸是多大,它都可以产生一个固定长度特征。金字塔池化对目标变形也有一定的鲁棒性。基于这些优势,SPP-net应该会提高所有以卷积神经网络为基础的 图像分类性能。在ImageNet 2012数据集上,我们证实了SPP-net提高了大量卷积神经网络模型的性能(尽管他们的模型设计都不相同)。在Pascal VOC 2007和Caltech 101数据集上,SPP-net只用一个完整图像特征在没有微调的情况下取得了分类结果的最好成绩。SPP-net的能力在目标检测任务上也很突出。我们用SPP-net来训练检测器。这种方法避免了卷积特征的重复计算。在处理测试图片时,我们的方法比R-CNN快24-102倍,但仍然在Pascal 2007上取得了最好或者相当的准确率。在ILSVRC 2014比赛中,我们的方法在目标检测任务上获得第二名,在图像分类上获得第三名(一共38个队伍)。这篇文章中也介绍了一些针对这次比赛做的改进。

动机

文章开始之前先指出了一般的卷积神经网络需要输入图片的尺寸是固定的(比如224*224),当输入图片的尺寸大小不一时,需要将其resize到指定的大小。通常有两种方法: 一是通过裁剪(crop)方式从原图中选择一块子区域, 二是直接把原图变形(warp)成指定大小。 但是这两种方法也会带来新的问题:裁剪可能丢失图片中的关键信息,变形会扭曲图像中的目标信息,进而导致网络性能的下降。如下图所示:


warp_crop

进而文章又分析了为什么卷积神经网络需要制定输入的尺寸. 一般的卷积神经网络分成两大部分:网络前面级联着若干个卷积层,网络后半部分会链接少数全连接层用于分类或者回归.卷及部分对输入尺寸没有要求,只不过不同大小的输入会产生不同大小的特征图。而全连接层需要预先定义好输入输出的个数。因此卷积神经网络对输入固定尺寸的限制也来源于全连接层。

于是我们想到,如果我们能够针对不同尺寸的输入,都能产生固定尺寸的特征图,那么问题自然就解决了。这就是金字塔池化干的事情。

金字塔池化

原理

金字塔池化和常规的池化不同的是它可以产生固定数量的输出特征图。在使用时,用金字塔池化去代替卷积神经网络中最后一层卷积层后的池化层。这样网络就可以接受任意尺寸的输入。以典型的AlexNet为例:


spp_pooling

用金字塔池化去替代AlexNet最后一个池化层(即第5个卷积层后),然后分别将该卷积层后的特征图(共256个)切分成1*1,2*2,4*4的子区域,在每个子区域用最大池化产成一个特征,最终256个特征图共产生256*(1+4+16)个特征。最后将生成的特征连接成固定长度就可以直接作为下面全连接成的输入了。

金字塔池化用于目标检测

用于基于候选区域的目标检测方法会生成很多尺寸不一的矩形框。前面介绍过,如果直接用裁剪或者变形的方法会丢失或者破环图片信息,不利于最终的检测。而金字塔池化刚好可以解决这个问题。
另外,文章还改善了R-CNN在原图上提取候选区域的方法,SPP-net只在原图上进行一次卷积操作,之后在生成的的特征图上提取候选区域用于金字塔池化。这样做的好处是大大缩减了卷积时间(R-CNN大约需要在原图上提取的候选框卷积大概2000次,而2000次的卷积操作的时间成本是非常高的)


spp_feature_map

SPP-net和R-CNN结果对比


detect_result

detect_result

关于金字塔池化的一些文章

猜你喜欢

转载自blog.csdn.net/sinat_34474705/article/details/80076387