两阶段目标检测原理详解--SPPNet

目录

一、RCNN的瓶颈

二、SPP的改进

(一)共享卷积网络

(二)SSP模块

三、SPPNet训练

四、SPP缺点


SPP-Net是2014年有名的两阶段目标检测算法。论文:https://arxiv.org/pdf/1406.4729.pdf

两阶段目标检测原理详解--SPPNet_第1张图片

一、RCNN的瓶颈

在RCNN思路的基础上,我们继续探索目标检测的痛点,其中RCNN使用CNN作为特征提取器,首次使得目标检测跨入深度学习的阶段。

但是RCNN对于每一个区域候选都需要首先将图片放缩到固定的尺寸(224*224),然后为每个区域候选提取CNN特征。容易看出这里面存在的一些性能瓶颈:

  • 速度瓶颈:重复为每个region proposal提取特征是极其费时的,Selective Search对于每幅图片产生2K左右个region proposal,也就是意味着一幅图片需要经过2K次的完整的CNN计算得到最终的结果。
    • 性能瓶颈:对于所有的region proposal防缩到固定的尺寸会导致我们不期望看到的几何形变,而且由于速度瓶颈的存在,不可能采用多尺度或者是大量的数据增强去训练模型。

二、SPP的改进

(一)共享卷积网络

  •         RCNN是先提取候选框,然后把每个候选框的图片固定尺寸到224x224,输入到卷积网络进行提取特征,输入全连接层,SVM分类和Bbox回归。
    •         SPPNet是整张输入图像提取特征,然后再特征图上提取候选框,再经过SPP模块得到固定大小的特征向量,输入全连接层,SVM分类和Bbox回归。

如下图:

两阶段目标检测原理详解--SPPNet_第2张图片

改进:

  1. 使用公用卷积网络提取图像特征,较少了计算;
  2. 输入卷积网络的图像不需要固定大小(即减少了图像变形的信息损失);
  3. 使用SPPNet模块,后面详细介绍。

        ** RCNN的卷积网络输入为什么需要固定大小?**

        CNN网络可以分解为卷积网络部分以及全连接网络部分,卷积网络的参数主要是卷积核,完全能够适用任意大小的输入,并且能够产生任意大小的输出;但是全连接层部分的参数是神经元对于所有输入的连接权重,输入尺寸固定,全连接层参数才是固定的。

(二)SSP模块

  • 卷积层和特征图Convolutional Layers and Feature Maps

        SPPNet通过可视化Conv5层特征,发现卷积特征其实保存了空间位置信息,并且每一个卷积核负责提取不同的特征。

两阶段目标检测原理详解--SPPNet_第3张图片

         比如左图C图175、55卷积核的特征,其中175负责提取窗口特征,55负责提取圆形的类似于车轮的特征。我们可以通过传统的方法聚集这些特征,例如词袋模型或是空间金字塔的方法。

  • 空间金字塔池化层SPP

        SPP的核心结构,目的是对于任意尺寸的输入产生固定大小的输出。

        如下图的方框内结构:

两阶段目标检测原理详解--SPPNet_第4张图片

         

        思路:在feature Map上进行SS找出候选框,候选框区域最后经过一个3*3的卷积层,固定输出256个特征图,feature map首先分成16、4、1个块,然后在每个块上最大池化,池化后的特征拼接得到一个固定维度的输出,以满足全连接层固定输入。

        总结:

  • (1)以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP);
  • (2)目的,多尺度特征提取出固定大小的特征向量。

三、SPPNet训练

SSPNet的基本结构如下:

两阶段目标检测原理详解--SPPNet_第5张图片

包含:共享的卷积神经网络、SSP模块、全连接层、SVM分类器、Bbox边框回归。

模型计算过程如下:

  1. 共享卷积神经网络,计算出特征图feature maps;
  2. 使用SS在 feature maps 筛选出约2000个候选区域;
  3. 对各个候选框采用SPP,提取固定长度的特征向量(256d);
  4. 256d的特征向量输入全链接网络;
  5. 最后输入分类器SVMs、Bbox边框回归。

注意:

  1. SPP层之前的所有卷积层参数不能fine-tune;
  2. 在全连接层上进行fine-tune,有且只能fine-tune全连接层,主要是因为SPP网络的反向传播率低,因此将两个网络分开。

四、SPP缺点

  1. 卷积特征提取和全连接、SVM分类器是独立的,因此SVM的训练损失无法更新SPP层之前的卷积层参数,也无法保证SVM分类器的准确率一定能够提升。
  2. 继承了R-CNN的一些问题:
    1. 需要存储大量特征;
    2. 复杂的多阶段训练;
    3. 训练时间仍然长,但比R-CNN少。

    3. 新问题:SPP层之前的所有卷积层参数不能fine-tune。

你可能感兴趣的:(目标检测,目标检测)