SPP-net详解:

简要概述:SPP-net网络是基于R-CNN结构改进,且仅在候选区域特征提取,以及特征向量大小转化两个方面做出改进,如详细理解SPP-net请先阅读目标检测开山之作R-CNN详解,文章链接:。

由于R-CNN速度慢的特征,每张图片分割为2000个大小不等的候选区域,每个候选区域经过CNN进行特征提出,是一个非常耗时的过程。针对R-CNN,SPP-net提出两点改进来提高速度,下面一一介绍。

PSPnet 源码 pytorch pspnet详解_计算机视觉

1.减少卷积运算

(1)卷积过程

一张图片经过选择性搜索(Selective Search)算法得到2000个候选区域,在R-CNN中,这2000个候选区域经过大小变化之后进入CNN网络进行特征提取,需经过2000次卷积运算,而在SPP-net中,图片首先进行卷积操作得到一个Feature map,再将这2000个候选区域一一映射到Feature map中,只进行一次卷积运算,R-CNN、SSP-net网络结构对比如下:

PSPnet 源码 pytorch pspnet详解_计算机视觉_02

 (2)映射过程

    原始图片经过CNN变成了Feature map,原始图片通过选择搜索(SS)得到候选区域,现需要将基于原始图片的候选区域映射到Feature map中的特征向量,具体流程图如下(蓝色区域为候选区域,黄色区域为映射到Feature map中的区域):

PSPnet 源码 pytorch pspnet详解_PSPnet 源码 pytorch_03

   具体映射公式如下:

   

PSPnet 源码 pytorch pspnet详解_目标检测_04

 为原图中候选区域的坐标, 

PSPnet 源码 pytorch pspnet详解_计算机视觉_05

为Feature map中对应的候选区域坐标   

PSPnet 源码 pytorch pspnet详解_计算机视觉_06

   

PSPnet 源码 pytorch pspnet详解_计算机视觉_07

   其中S就是CNN中所有stride的乘积,包括卷积,池化的stride,在论文中S=2*2*2*2

2.增加SPP层(Spatail Pyramid Pooling)

通过SPP层将特征图转化为固定大小的特征向量,SPP层将每个候选区域分成4*4,2*2,1*1三个子图,将每个子图每个区域做Max pooling,假设原图输入是224*224,CNN卷积输出通道为256,得到到特征图连接在一起就是(16+4+1)*256=5376个结果,将这个结果传给特征向量训练分类器SVM进行后续步骤。

PSPnet 源码 pytorch pspnet详解_目标检测_08

Spatial bins(空间盒子个数):16+4+1=21

总结:

优点:SPPNet在R-CNN的基础上提出了改进,通过候选区域和Feature,map的映射,配合SPP层的使用从而达到了CNN层的共享计算,减少了运算时间,后面的FastR-CNN等也是受SPPNet的启发

缺点:训练依然过慢、效率低,特征需要写入磁盘(因为SVM的存在),分阶段训练网络:选取候选区域训练CNN、训练SVM、训练bbox回归器