部分一:背景
SPP-Net是何凯明2015年发表在IEEE上的论文-《Spatial Pyramid Pooling in Deep
ConvolutionalNetworks for Visual Recognition》,主要的创新点在于提出了空间金字塔池化。
相较于R-CNN的两处缺点:
-
R-CNN对于每个region proposal都重复的使用CNN提取特征,这是非常消耗时间的,使得特征提取成为测试时的一个时间瓶颈;
-
对于不同size的region
proposal的feature map,都需要resize(crop or warp)到固定大小才能输入到FC layer或SVM分类器,resize会导致图片形变,影响最终的结果。
SPP-Net通过添加空间金字塔池化操作对R-CNN进行过改进,解决上述两点缺点。但是SPP-Net缺点也比较明显,并不能微调卷积层(这一步是由于卷积层和全连接层之间的SPP层导致),且并不是端到端网络。
整体图为:
R-CNN & SPP-Net
不同点在于SPP-Net直接对原图进行整体卷积,而不是对每个候选框挨个卷积,并且SPP-Net添加金字塔池化(SPP)层,适合任意尺寸的输入,可以看出与R-CNN的改进仅仅只在CNN特征提取部分,其余未变。整体流程经历:候选框提取-CNN层提取特征-SVM分类-回归器位置微调,仍然没有达到端到端。
部分二:知识点
空间金字塔池化层(Spatital Pyramid Pooling,SPP层)
首先解释一下什么是空间金字塔?
以不同大小的块来对图片提取特征,比如下面这张图:
利用三张网格,大小分别为44,22,1*1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的分割方式,分别在每一个区域(每个区域会含有多个像素)取最大池化,那么就可以得到21组特征。
那么SPP就是以不同的大小格子的组合方式来池化的过程,如下
具体来说就是把输入的feature map按照不同尺度进行分割,比如图中(4, 4) (2, 2) (1, 1)三种不同的尺度分割,然后会产生不同的bin,比如分成(4, 4)就16个bins,然后在每个bin中使用max pooling,然后就变成固定长度为16的向量。例如下图中,经过SPP层之后可以得到相同长度的向量,之后再输入FC layer,
候选区域在原图上与在feature map上的位置映射关系
首先给出坐标点的对应公式及符号意思,如下(公式未推导,基本和验证相吻合。i表示第几层):
直观表示如下:
其次在特定SPP-Net网络中,SPP层的输入为:与候选区域对应的在feature map上的一块区域
(可以理解为一张原图通过SS算法大约提取含有2000个候选区域的集合
,在对原图做完卷积后,得到的feature map上的区域
与候选区域中的区域
是一一对应的。由于在将该区域提取的特征向量进行SVM分类时,我们必须知道该特征向量所对应的原图上的哪一个候选区域,才能对原图上的候选区域进行分类,所以才需要了解“位置映射关系”。)(这一段可能较难理解)
论文做法如下:
SPP-Net对上面对应的坐标关系进行了简化,如下:
下图中把原始ROI的左上角和右下角 映射到 feature map上的两个对应点。 有了feature map上的两对角点就确定了对应的
feature map 区域(下图中橙色)。
部分三:实际流程
训练阶段
分为固定尺寸(signal-size)训练和多尺寸(multi-size)训练
一.固定尺寸训练
-
候选区域生成:将原图通过SS算法,提取候选框,记为集合
-
特征提取(分为预训练和微调两个阶段)
预训练阶段
训练数据选取-ImageNet ILSVC 2012,包含一千万张图像,1000类。
微调阶段(仅仅对全连接层进行微调,记得将最后的种类由1000变为21)
训练数据:PASCAL VOC 2007(包含物体的类别和位置。一万图像,20类)
二.多尺寸训练
顾名思义就是将一张原图resize到224224、180180两种尺寸大小。在训练时两种尺寸原图交替喂给网络,其余与单尺寸训练相同。论文中说这样可以加快网络收敛速度,并且由于对于同一类别原图中可能含有大小的区别,此时resize原图尺寸,有助于网络框出不同尺寸的同一类别物体。(也有的理解说是训练两个网络)
测试阶段
-
首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样。
-
特征提取阶段。这一步就是和R-CNN最大的区别了,这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升。
-
这一步也是和R-CNN一样,采用SVM算法进行特征向量分类识别。
-
进行利用NMS,阈值为0.3,对提取出的候选框进行挑选。
-
最后进行位置微调,得到预测框。