0.背景
最早的目标检测算法R-CNN具有一下问题:
1.候选框的数量较多,计算量大,影响计算速度。
2.每个候选框都参与卷积运算,而候选框和候选框间重叠部分较大,造成较多的重复计算。
3.每个候选框送入卷积网络前都得进行剪裁变形,形成固定尺寸,在这个过程会损失原有特征。
1.SPP-Net
正是在上述背景下,诞生了SPP-Net。
SPP-Net做出的主要贡献:
1.1 提出特征的映射。
与原来的R-CNN不同,SPP-Net虽然也先利用搜索算法获得了候选框区域,但它仍然是把整个图像送入到卷积网络中提取特征,形成新的特征图。而利用原图和特征图的卷积操作运算法则,我们可以得到特征图中哪部分是由原图中的某个候选框区域得到的,也即存在映射关系。也即即使是对一整张图片进行卷积,我们也得到了每个候选框区域对应的特征图。
这里涉及一个知识:神经元的感受野。
通俗来说,就是由于卷积运算的性质,特征图中的某个值只和原图中的某几个元素有关,因此选定特征图中的一个区域,把每个点对应的原图中的区域拼起来,就得到了一个映射关系。也即特征图的这个区域的特征只由原图中某个区域得到,也即只和它有关。所以可以理解为特征图的这个区域A是原图中对应区域B的特征(这和只对该区域进行单独卷积得到的特征一样)。
这样子做,只使用了一次卷积,大大加快了计算速度。
1.2 提出SPP池化层
池化层的一大特征就是无论输入是什么尺寸的图像,只要选定池化分割的大小,输出的特征图大小是一定的。经过这个操作,尽管每个候选框的特征图大小不同,经过池化就可以转化为同样大小的特征图,展开就可以送入全连接层中进行后续任务。
这里的SPP层还有个特色是使用了多尺度的融合(金字塔结构),它采用4*4,2*2,1*1不同尺度的池化,再进行拼接形成每个候选框的特征向量。这样子更大可能保留了原有的特征。
1.3 总结
在上述处理下,首先解决了图像变形特征损失与多卷积计算冗余的问题,但计算速度仍然较慢。
2.Fast R-CNN
2.1 对候选区域进行初步的筛选
在Fast R-CNN中,首先使用选择性搜索或其他方法生成候选区域,然后通过非极大值抑制(NMS)过程去除重叠度较高的候选区域。(非极大抑制(NMS)一般就是用来去重的)
2.2 延续SPP-Net映射和池化操作
解决图片变形特征损失与卷积计算冗余问题。
2.3 真正实现“two-stage",优化R-CNN结构
Fast R-CNN做出的最大贡献在于把卷积网络,图像分类,边界框回归三个R-CNN独立的部分整合成了一个整体,可以整体进行训练,大大加快的计算速度。
过程概述:经过类似SPP-Net的特征提取操作,得到每个候选框区域对应的特征向量,同时送到softmax分类网络和边界框回归网络进行操作。
具体的训练过程标签设置在笔者Faster R-CNN的文章中有提到。
损失函数即两个回归分别对应的softmax和均方差损失函数加权和。
2.4 总结
相较于R-CNN,Fast R-CNN真正实现了”two-stage",即一阶段:选定候选框;二阶段:把候选框送入网络,得到其类别与修正后的边界框。(训练也只用训练后面整个网络)。
2.5 补充
对于测试过程,与训练过程不同,为了满足真正目标检测的需求,需要在最后网络输出的结果上增加NMS操作,即去除重叠度高的同类检测框。
非极大值抑制(NMS)具体过程:
对于同一类别的预测框(如分类都是猫)
先找出概率最大的,也即分类得分最高的,设置一个iou阈值,遍历同类别(即猫)所有预测框,删除与其iou大于该阈值的框。
接着在剩下的框中,同样选取得分最高的,重复上述操作,直到遍历完所有猫的预测框。
则得到了猫这个类别最终所有的预测框。
接着对于其他类,如狗,猴,按上述猫的方法重复进行即可。
最终得到精简版的预测结果。