目标检测模型——SPP (空间金字塔池化)

SPP 在 SPP-net 中的应用:

SPP-net全名为Spatial Pyramid Pooling 结构(空间金字塔池化结构),2015年由微软研究院的何恺明提出。

主要解决两个问题:

有效避免了R-CNN算法对图像区域剪裁、缩放操作导致的图像物体剪裁不全以及形状扭曲等问题。
解决了卷积神经网络对图像重复特征提取的问题,大大提高了产生候选框的速度,且节省了计算成本。
  • 问题1具体解释:

在含有全连接层的分类网络中,严格要求输入分辨率和全连接层的特征维度相匹配。所以就会对图像进行裁剪和变形操作,也就出现了问题1。如下图展示的就是通过spp模块将任意分辨率的featherMap转换为设计好的和全连接层相同维度的特征向量。

目标检测模型——SPP (空间金字塔池化)_第1张图片
具体做法是,在conv5层得到的特征图是256层,每层都做一次spatial pyramid pooling。先把每个特征图分割成多个不同尺寸的网格,比如网格分别为44、22、11,然后每个网格做max pooling,这样256层特征图就形成了16256,4256,1256维特征,他们连起来就形成了一个固定长度的特征向量,将这个向量输入到后面的全连接层。

  • 问题2具体解释:

R-CNN是先对输入图像进行2k个候选框选择后,把候选框内的图像wrap到227*277后,再放到cnn里边进行提取,这2k个候选框很多地方都是重叠的,会带来大量重复的计算,因此SPP就先对输入图像进行特征提取之后,在提取后的feature map上在选取候选框,然后使用spatial pyramid pooling,对对应候选框的feature map区域提到到fixed-length representation。

目标检测模型——SPP (空间金字塔池化)_第2张图片
对卷积层可视化发现:输入图片的某个位置的特征反应在特征图上也是在相同位置。基于这一事实,对某个ROI区域的特征提取只需要在特征图上的相应位置提取就可以了。

注:ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域

目标检测模型——SPP (空间金字塔池化)_第3张图片

一张任意尺寸的图片,在最后的卷积层conv5可以得到特征图。根据Region proposal步骤可以得到很多候选区域,这个候选区域可以在特征图上找到相同位置对应的窗口,然后使用SPP,每个窗口都可以得到一个固定长度的输出。将这个输出输入到全连接层里面。这样,图片只需要经过一次CNN,候选区域特征直接从整张图片特征图上提取。

在检测的后面模块,仍然和R-CNN一样,使用SVM和边框回归。SVM的特征输入是FC层,边框回归特征使用SPP层。

  • 总结:

SPP-net对R-CNN最大的改进就是特征提取步骤做了修改,其他模块仍然和R-CNN一样。特征提取不再需要每个候选区域都经过CNN,只需要将整张图片输入到CNN就可以了,ROI特征直接从特征图获取。和R-CNN相比,速度提高了百倍。

SPP-net缺点也很明显,CNN中的conv层在微调时是不能继续训练的。它仍然是R-CNN的框架,离我们需要的端到端的检测还差很多。既然端到端如此困难,那就先统一后面的几个模块吧,把SVM和边框回归去掉,由CNN直接得到类别和边框可不可以?于是就有了Fast R-CNN。

SPP 在yolo中的应用:

yolov3-spp 和 yolo v4中的spp模块不是解决以上的两个问题,但是借鉴了空间金字塔池化思想,主要是通过spp模块实现局部特征和全局特征的featherMap级别的融合,丰富最终特征图的表达能力,从而提高MAP。

官方coco数据集效果
目标检测模型——SPP (空间金字塔池化)_第4张图片

自己数据集验证效果

YOLOv3-SPP比YOLOV3的MAP提高了2.4个点,且自己样本中类别存在严重的类别不均衡的问题。

————————
目标检测:SPP-net
yolov3-spp深度剖析
如何理解yolov3中的spp模块?

你可能感兴趣的:(模型,深度学习)