读论文系列:Object Detection SPP-net

本文为您解读SPP-net:网络

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition.net

Motivation

神经网络在计算机视觉方面的成功得益于卷积神经网络,然而,现有的许多成功的神经网络结构都要求输入为一个固定的尺寸(好比224x224,299x299),传入一张图像,须要对它作拉伸或者裁剪,再输入到网络中进行运算。
image.pngblog

然而,裁剪可能会丢失信息,拉伸会使得图像变形,这些因素都提升了视觉任务的门槛,所以,若是能有一种模型可以接收各类尺度的输入,应当可以让视觉任务更加容易完成。图片

什么限制了输入的尺寸

深度卷积神经网络中的核心组件有两个,一个是CNN,一个是全链接层,卷积是用filter在图像上平移与图像的局部进行逐位乘法,多个filter则产生多个feature map(特征/特征图),而后能够用pooling操做进一步采样,获得更小的feature map;实际上,咱们并不在乎feature map有多大,不一样图像的feature map彻底能够有不一样的尺寸;可是在后边的具体任务中,好比分类任务,为了输出softmax对应的one-hot层,须要输出固定的尺寸,为了让不一样的输入能共用一套权重参数,要求全链接层的输入尺寸是一致的,逆推回去也就限制了feature map的大小必须一致;而不一样尺寸的输入图片在使用同一套卷积核(filter)的时候,会产生不一样尺寸的feature map,所以才须要将不一样尺寸的输入图片经过裁剪、拉伸调整为相同的尺寸。get

Solution

所以突破口有两个,源码

  • 让卷积层能为不一样尺寸的输入产生相同尺寸的输出(SPP)
  • 让全链接层能为不一样尺寸的输入产生相同尺寸的输出(全卷积)

全卷积和卷积的区别在于最后不是用全链接层进行分类, 而是用卷积层,假设咱们要将一个16x16的feature map转为10x1的one-hot分类,则可使用10个1x1卷积核,每一个卷积核对应一个分类,参数数量少了不少,可是…实验结果代表还挺有效的,而且,全卷积+反卷积开辟了图像分割的新思路,能够说是一个开创新的工做了,感兴趣的同窗能够看这篇博客博客

这里咱们详细讲一下SPP
SPP-netit

SPP中SP(Spatial Pyramid)的思想来源于SPM(Spatial Pyramid Matching),能够参考这篇文章,正如论文Conclusion中说的, Our studies also show that many time-proven techniques/insights in computer vision can still play important roles in deep-networks-based recognition.io

SPM是在不一样的分辨率(尺度)下,对图片进行分割,而后对每一个局部提取特征,将这些特征整合成一个最终的特征,这个特征有宏观有微观(多尺度金字塔),保留了区域特性(不一样的区域特征不一样),而后用特征之间的类似度进行图片间的匹配(matching)。先前咱们提到过,每一个filter会获得一个feature map,SPP的输入则是卷积后的这些feature map,每次将一个feature map在不一样尺度下进行分割,尺度L将图片分割为2^L^个小格子(其实格子数也能够本身定,不必定要分红2^L^个),L为0表明全图;对每一个小格子的作pooling,论文中是max pooling, 实际中也能够用其余,这里不像SPM须要作SIFT之类的特征提取,由于feature map已是卷积层提取过的特征了,将pooling获得的结果拼接起来,就能够获得固定尺寸的feature map。ast

Spatial Pyramid

举个例子,一个具备256个filter的卷积层,输出了256个feature map,对于一个640x320的图片,输出的feature map多是32x16的,对于一个640x640的图片,输出的feature map多是32x32的,对256个feature map中的每一个feature map,咱们在4个尺度下对它们作切割,在最粗糙的尺度下切为1个图,次之切为2个子图,接下来是4个子图,8个, 对每一个子图作max pooling,获得其中最大的数,放到最终的特征里,能够获得一个1+2+4+8=15这么长的特征,256个feature则能够获得最终256*15这么长的特征,能够看到,最终的特征尺寸只跟卷积层结构和SP尺度L有关,跟输入图片无关,从而保证了对不一样尺寸的图片都输出同样大小的特征。

其实看到这里,你可能发现了,对不一样尺寸输出相同尺寸特征这个特性,是由pooling操做决定的,像max pooling,sum pooling这些,就是将多个输入聚合为一个值的运算;而Spatial Pyramid只是让特征有更好的组织形式而已。固然,能找到这种有效的特征组织形式也是很值得确定的。但这里有东西仍然值得商榷,max pooling实际上仍是丢了一些信息,虽然经过多层的特征能够将这些信息弥补回来。

实验

而后做者就将这个结构应用到各类网络结构和各类任务里了,而且都取得了很好的效果(说的轻巧,复现一堆论文,改源码,跑大量实验,必定超级累);特别是在检测任务对RCNN的改进上,这个地方比较有意思。在RCNN中,须要将每一个Region Proposal输入卷积层判断属于哪一个分类,而region proposal是方形的,这就致使有不少区域作了重复的卷积运算。

在SPP-net的实验中,

  • 整张图只过一遍卷积层,从conv5获得整张图对应的feature map;
  • 而后将feature map中每一个region proposal对应的部分提取出来,这个位置计算量也不小,但比算卷积自己仍是要快不少,原图中的一个区域惟一对应于feature map中的一个区域,不过feature map中的一个区域实际上对应原图的范围(所谓感觉野)要大于region proposal所在区域,从这个意义上来说,依然是接收了更多不相关信息,可是好在没有裁剪或变形;
  • 因为region proposal形状不一,对应的feature map尺寸也不一致,这时SPP就能充分发挥其特性,将不一样尺寸的feature map转为尺寸一致的feature,传给全链接层进行分类
  • 原图实际上能够保持原图的宽高比缩放到多种尺度(文中将宽或高缩放到{480, 576, 688, 864, 1200}这五个尺寸,),分别算一个特征,将不一样尺度的特征拼接起来进行分类,这种combination的方式能必定程度上提升精度
  • 这里还有一个小trick,能够将原图缩放到面积接近的范围(文中是224x224),再输入到网络中,进一步提高精度,至于缘由…文中没有提,玄学解释是,输入的尺度更接近,模型训练更容易吧。

因为整张图只过了一遍卷积,因此比原来的RCNN快了不少,准确率也不差

Detection results (mAP) on Pascal VOC 2007

Summary

严格来说SPP-net不是为detection而生的模型,可是SPP-net为RCNN进化到Fast-RCNN起了很大的借鉴做用,值得一读。SPP-net的想法颇有意思,SPP(Spatial Pyramid Pooling)是对网络结构的一种改进,可能由于是华人写的论文,感受很好读,含金量我的感受没有RCNN或者DPM的论文高,可是实验很丰富,从分类任务和检测任务上的各类网络结构证实SPP的有效性

相关文章
相关标签/搜索