二阶段目标检测系列文章
目标检测1——二阶段目标检测概述
目标检测2——R-CNN(将CNN网络应用在目标检测领域的开山之作)
目标检测3——SPPNet(空间金字塔池化可以接收任何尺度的图像)
目标检测4——Fast R-CNN(ROI Pooling、SVD、Multi-task Loss等新特性实现端到端的训练并显著提升训练和推理的速度)
目标检测5——Faster R-CNN(RPN网络代替Selective Search来获取候选框)
一、基本介绍
- IEEE-2015:Spatial Pyramid Pooling in DeepConvolutionalNetworks for Visual Recognition
- 由何凯明大神提出,SPP 即 Spatial Pyramid Pooling(空间金字塔池化),为了解决 R-CNN 中速度慢问题
- SPPNet的优势:
- 输入不需要缩放到指定大小,而 R-CNN 中将候选框裁剪和缩放至固定大小的过程中,都在一定程度上导致图片信息的丢失和变形,最终影响模型的性能
- 基于空间金字塔池化,每张图片只需要提取一次特征(卷积复用),而 R-CNN 需要对每个候选框都提取一次特征(~2k/image),因此其速度可提升百倍
- SPPNet的劣势:
- 还是沿用了R-CNN的训练结构,需要分别训练CNN网络,多个 SVM分类器,BB回归器
- SPP-Net 很难通过fine-tuning对SPP-layer之前的网络进行参数微调,效率会很低,在 Fast R-CNN 中会得到改进
二、Spatial Pyramid Pooling
- 需要固定大小的特征图的限制主要来源于全连接层
- 在最后一个卷积层之后,全连接层之前,增加一个金字塔池化层(SPP层),该层对特征进行池化并生成固定大小的输出,以输入给全连接层或分类器
- 以 AlexNet 为例,经过 CNN 得到 Conv5 输出的任意尺寸的 Feature Map,图中 256 是 Conv5 卷积核的数量
- 将最后一个池化层 Pool5 替代成 SPP layer
- 以不同网格提取特征,分别是 4×4,2×2,1×1
- 将这三张网格放到feature map上,就可以得到16+4+1=21种不同的块(Spatial bins)
- 对这21个块应用max pooling,每个块就提取出一个特征值,这样就组成了21维特征向量
总结而言,空间金字塔池化可以使得任意大小的特征图都能够转换成固定大小的特征向量
三、SPPNet的基本步骤
- Region Proposal:提取候选框(~2k/image,Selective Search)
- AlexNet 特征提取:
a. 首先,把整张待测的图片,输入 CNN 中,进行一次特征提取,得到整个图像的 Feature Map
b. 然后,将各个候选框映射到 Conv5 层的 Feature Map
c. 接着,将上述映射特诊通过 SPP Layer,提取出固定长度的特征向量 - 分类:采用 SVM 算法进行特征向量分类识别
四、SPPNet的相关思考问题
- 如何将原图的候选框映射到到feature map上?