SPP-Net是何凯明在基于R-CNN的基础上提出来的目标检测模型,使用SPP-Net能够大幅度提高目标检测的速度,检测一样一张图片当中的全部目标,SPP-Net所花费的时间仅仅是RCNN的百分之一,并且检测的准确率甚至会更高。那么SPP-Net是怎么设计的呢?咱们要想理解SPP-Net,先来回顾一下RCNN当中的知识吧。下图为SPP-Net的结构:算法
rcnn进行目标检测的框架以下:网络
所以RCNN的步骤以下:框架
1.将图像输入计算机当中学习
2.利用selective search算法找到图片当中属于同一个物体的区域,并使用Bounding Box圈起来。这个算法不属于深度学习的算法,而是一种传统算法,这个算法不可以在GPU上运行,只能在CPU上运行,所以相比于SPP-Net具备必定的局限性。它是根据图像当中的各个部位的颜色,轮廓,纹理等将图像当中的事物进行分类。一共筛选出1-2k个候选区域,用region proposal来表示。字体
3. 将获得的候选区域所有进行剪裁或者缩放将其变为统一的大小,这样才可使用图像分类神经网络(AlexNet/Google InceptionNet/VGG)对每个候选区域进行图像识别。所以这一步咱们须要进行1-2k次卷积运算,对于时间而言很是不划算。spa
4.最后使用SVM分类器将候选区域当中的全部图片经过全链接层进行分类,查看看是否为咱们所须要检测的目标,而且输出其名称,如:人,飞机,电视机等等。同时进行bounding box的回归,这样可使得预测的bounding box的大小和位置更加准确。在论文当中bounding-box的回归公式以下:设计
最后使用SVM分类器而没有使用softmax分类器的缘由是在RCNN当中使用SVM后分类结果的准确率会更高(根据实验得知),论文当中的说明以下:3d
mAP的大小表示的是目标检测的准确率,是目标检测领域中一种重要的评价指标。总体而言R-CNN的实现仍是颇为简单的,也很容易被人们所想到,这个算法在当时也是很是优越的,使用selective search的方法代替了以前作目标检测所使用的滑动窗口法来生成候选区域,否则的话使用滑动窗口法针对每一个图像进行卷积运算咱们可能不只仅要进行1-2K次运算,最后运算的次数极可能是10k-50k次,这在时间上来讲太不划算了,并且使用滑动窗口法还可能滑动的窗口没有框到目标,所以会丢失掉准确率。SVM分类最后的输出是每一个图像bounding box的形状大小,位置以及每个bounding box内图像分类的结果以及几率。blog
那么咱们的SPP-Net在这之上作了哪些改进呢?教程
SPP-Net发如今RCNN当中使用selective search的方法生成候选区域实在是太耗费时间了,由于全部生成的候选区域都要进行一次卷积运算来进行图像分类,那么咱们能不可以直接只计算一次卷积而非1-2k次卷积呢?所以在SPP-Net当中咱们省略掉了生成候选区域这一步,直接将图像作一次卷积运算,而且在卷积神经网络CNN以后增长了图像空间金字塔池化(SSP-Spatial Pyramid Pooling)的结构,这样就能够根据图像的特征将图像当中的目标区域进行分类。SPP-Net和RCNN的区别以下图所示:
能够从上看出,图像输入到网络中以后,RCNN将候选区域进行了剪裁和缩放,而后再把剪裁好的区域“喂”入到CNN当中,而spp-net则直接将整张图片放入了卷积神经网络当中,而后使用spatial pytamid pooling(空间金字塔池化)提取卷积以后的特征,最后使用全链接神经网络连同最后的输出和空间金字塔池化层。在整个spp-net当中最为重要的结构则是咱们用红色字体标注出的spatial pytamid pooling(空间金字塔池化层)了。那么整个结构是如何实现的呢?
空间金字塔池化层的结构如上所示,Image通过一次卷积以后会获得256个特征图,也就是上面图中最下面的一连串黑色堆叠图,这是整个卷积神经网络的第五层吗,所以称为conv5。而后咱们使用SSP结构对这256个特征图进行处理,将这256张特征图分别进行1*1,2*2,4*4的最大池化,也就是分别选取这256个特征图当中的最大值,而后最后的输出也是256个每一层特征图的最大值。好比咱们作空间金字塔池化最右边的那个1*1池化,计算机仅仅会选取这256个特征图当中最大的值做为输出的结果做为图像的语义特征,这也就是最大池化,2*2的最大池化同理,但咱们会作完2*2的最大池化以后会获得4个数值,每个数值都表明这图像某一区域的特征。所以最后咱们会获得21(21=4*4+1*1+2*2)*256=5376个数值做为图像高度抽象的特征。以后将这5376个特征送入全链接神经网络(fc6和fc7,一共两层全链接神经网络,这个彻底看研究员本身的喜爱来设定了,能够没有,也能够多层),最后用SVM分类器输出bounding box的x,y,w,h以及每个bounding box的图象分类的结果。小编在网上查看了不少教程都没有把空间金字塔池化结构解释清楚,也是本身想了好久认真研读了论文好几遍才明白,毕竟论文上这一点其实也没讲得多清楚。最后输出的结果以下图所示:
那么为何咱们能够做这样的处理呢?咱们来看看论文当中是怎么说的,下图来自于spp-net的论文:
在图的左边,(a)表明了咱们进行目标检测的图像,(b)上面的那张图是卷积神经网络的第175层输出的结果,咱们将其可视化了,下面的那张特征图是卷积神经网络第55层的输出结果,咱们也将其可视化了。咱们发现汽车的窗户正好在第175层的conv layer发现了这个特征,而且高亮的了出来是白色,在图像上表示为这个区域的灰度是很大的(有0-255个数字,所以这个高亮的地方数值可能在200以上)。这个时候第55层的特征图发现了汽车的轮胎这一个特征,在特征图当中也高亮了出来。这也是最后咱们在金字塔池化层作最大池化的缘由,由于最大池化就会将高亮的地方的特征提取出来,咱们只提取图像当中具备物体的特征,从而忽略掉其余没有无体的地方的特征,最后再全链接神经网络当中进行特征融合并归类,就能够获得目标检测的结果了!是否是很神奇呢?
终于写完啦,若是以为读了小编的文章您有收获的话,不要忘记了点击下方的“推荐”哦!您的支持就是对小编创做最大的动力!