目标检测——Fast R-CNN(二)
简介
R-CNN的进阶版Fast R-CNN就是在R-CNN的基础上采纳了Spatial Pyramid Pooling(SPP) 方法,对R-CNN作了改进,使得性能进一步提高。
《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》论文地址:https://arxiv.org/pdf/1406.4729.pdf
《Fast R-CNN》论文地址:https://arxiv.org/pdf/1504.08083.pdf
一、铺垫——SPP Net
在目标检测系列文章的上一篇R-CNN中,我们知道R-CNN在当时虽然取得了不错的成绩,但是其需要改进的地方也很多,比如算法步骤比较繁琐,需要大量的时间和内存去训练和测试模型等。
SPP提出来一种Spatial Pyramid Pooling(SPP)结构来解决这种问题,将这种结构放在卷积层与全连接层中间,在多个测试中取得了不错的效果。
如图可以看出上面需要加入一些裁剪、拉伸等操作,才能得到一个固定大小的输入,下面只需要加一个SPP层就可以达到相同作用,并且还有其他优点。
- 在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。
- SPP的核心在于使用多个不同尺寸sliding window pooling(上图中的蓝色44、青色22、灰色1*1窗口)对上层(卷积层)获得的feature maps 进行池化(文中使用最大池化),将分别得到的结果进行合并就会得到固定长度的输出。
SPP优点:
- 解决输入图片大小不一造成的缺陷。
- 由于把一个feature map从不同的尺寸进行pooling特征抽取,再聚合,提高了算法的robust和精度。
- 图像分类、目标检测都可以用,而且效果很棒。
- 一定程度上缓解了R-CNN耗时过多等问题。
二、Fast R-CNN原理
在Fast RCNN之前提出过SPPnet来解决R-CNN中重复卷积问题,但SPPnet仍然存在与R-CNN类似的缺陷:
1.训练分多步骤(需要SVM分类器,额外的regressors)
2.空间开销大
因此,该文提出的Fast R-CNN便是解决上述不足,在保证效果的同时提高效率。基于VGG16的Fast R-CNN模型在训练速度上比R-CNN快大约9倍,比SPPnet快大约3倍;测试速度比R-CNN快大约213倍,比SPPnet快大约10倍,在VOC2012数据集上的mAP大约为66%。
Fast R-CNN框架与R-CNN有两处不同:
- 最后一个卷积层后加了一个ROI pooling layer;
- 损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类。
- 由于卷积层计算针对的是一整张图片,而全连接层需要对每一个region proposal都作用一次,所以全连接层的计算占网络计算的将近一半(如下图)。作者采用SVD来简化全连接层计算。
不足:
region proposal的提取仍然采用selective search,整个检测流程时间大多消耗在这上面(生成region proposal大约2~3s,而特征提取+分类只需要0.32s),之后的Faster RCNN的改进之一便是此点。