(SPP-net)Spatial Pyramid Pooling in deep convolutional networks for visual recognition

这篇文章很有意思,它解决了在卷积神经网络中一直存在的一个问题,那就是输入图片的大小必须统一大小的问题,在一开始训练和检验的图片大小一般都是固定的,这里有两个方法的原因,第一卷积作用,第二就是最后输入的全连接的图片大小需要进行分类操作。第一个问题基本不算问题,因为在进行滑动窗口操作的卷积操作对于图片大小基本没有什么要求,第二个问题才是最主要的问题,因为当你输出的大小不一样,在后面的softmax,SVM 等分类操作时,会导致这个分类的结果受影响。这篇论文解决的就是这个问题。
(SPP-net)Spatial Pyramid Pooling in deep convolutional networks for visual recognition_第1张图片
从上面的图片我们可以看到在进行统一大小操作时有时候会影响整个图片的质量,会导致一些图片信息的丢失。这个文章解决了这个问题,可以看到它把 crop/warp这操作去掉了,在最后的卷积层后面加上了spp池化操作,这样就解决了整个网络的问题。
那么现在我们来看看这个是怎么解决这个问题的。

(SPP-net)Spatial Pyramid Pooling in deep convolutional networks for visual recognition_第2张图片

上面的图片就是整个SPP-net的关键部分。这个金字塔的池化的操作,在整个卷积层最后进行,替换了整个网络进行最后进行池化操作的部分。它的具体操作是,先把整个特征图分成n*n大小的部分。上图分成了 4*4 、2*2 和1*1这三个部分。在论文中每一个小的区域称为spatial bins .最后在每一个小的bins里面进行max pooling 操作。这样操作下来就可以得到固定大小的特征了最后把这些特征带入全连接层里面进行操作,这样就可以得到结果了。这里的2*2 1*1这样比较大的一下操作是为了保证整个网络的鲁棒性。
这样整个论文的主要部分就讲完了。这篇论文后面作者注重讲了和R-CNN进行结合进行目标检测的相关操作。在这里R-CNN 算法具体方法就不说明了。现在说一下SPP-net网络大的具体方法。
首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样。
特征提取阶段。这一步就是和R-CNN最大的区别了,这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升。
最后一步也是和R-CNN一样,采用SVM算法进行特征向量分类识别。
这里的结果是可以大大减少了这个网络的效率。但是有一个问题是在最后提取到的特征上面怎么找到原来选择的区域块呢。在论文的最后作者给出了一个方法。
我们知道,在原图中的proposal,经过多层卷积之后,位置还是相对于原图不变的(如下图所示),那现在需要解决的问题就是,如何能够将原图上的proposal,映射到卷积之后得到的特征图上,因为在此之后我们要对proposal进行金字塔池化
(SPP-net)Spatial Pyramid Pooling in deep convolutional networks for visual recognition_第3张图片
所以下面需要找到相关的映射关系了。
在论文中作者给出了一个公式:
假设(x’,y’)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系,这种映射关心与网络结构有关: (x,y)=(S*x’,S*y’)
反过来,我们希望通过(x,y)坐标求解(x’,y’),那么计算公式如下:
left(top) 这里写图片描述
rigt(bottom) 这里写图片描述
其中S就是CNN中所有的strides的乘积,包含了池化、卷积的stride。

你可能感兴趣的:(DL)