基于深度学习的目标检测技术演进:
R-CNN -> SPP-Net -> Fast-RCNN -> Faster-RCNN -> R-FCN
SPP Net真是个好方法,R-CNN的进阶版Fast R-CNN就是在RCNN的基础上采纳了SPP Net方法,对RCNN作了改进,使得性能进一步提高。
R-CNN与Fast RCNN的区别有哪些呢?
先说RCNN的缺点:即使使用了selective search等预处理步骤来提取潜在的bounding box作为输入,但是RCNN仍会有严重的速度瓶颈,原因也很明显,就是计算机对所有region进行特征提取时会有重复计算,Fast-RCNN正是为了解决这个问题诞生的。
改进:
Fast-RCNN在SPP-Net的基础上,将SPP层简化为ROI Pooling层,并将全连接层的输出做SVD分解,得到两个输出向量:softmax的分类得分以及Bounding box外接矩形的窗口回归。
具体描述如下:
大牛提出了一个可以看做单层sppnet的网络层,叫做ROI Pooling,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量。
而我们知道,conv、pooling、relu等操作都不需要固定size的输入,因此,在原始图片上执行这些操作后,虽然输入图片size不同导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。
另外,之前RCNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression,而在Fast-RCNN中,作者巧妙的把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。
Fast-RCNN很重要的一个贡献是成功的让人们看到了Region Proposal+CNN这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度,也为后来的Faster-RCNN做下了铺垫。
这种改进:
1.将分类问题和边框回归问题进行了合并。
2.用softmax代替SVM,将所有的特征都存储在显存中,减少了磁盘空间的占用。
3.SVD分解则在几乎不影响精度的情况下,极大加快检测速度。
Fast-RCNN使用VGG16代替AlexNet,平均准确率达到70%,且速度叫R-CNN提升9倍,检测速度达到每幅图片0.3s(除去region proposal阶段)。
画一画重点:
R-CNN有一些相当大的缺点(把这些缺点都改掉了,就成了Fast R-CNN)。
大缺点:由于每一个候选框都要独自经过CNN,这使得花费的时间非常多。
解决:共享卷积层,现在不是每一个候选框都当做输入进入CNN了,而是输入一张完整的图片,在第五个卷积层再得到每个候选框的特征
原来的方法:许多候选框(比如两千个)-->CNN-->得到每个候选框的特征-->分类+回归
现在的方法:一张完整图片-->CNN-->得到每张候选框的特征-->分类+回归
所以容易看见,Fast RCNN相对于RCNN的提速原因就在于:不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,而SPP只需要计算一次特征,剩下的只需要在conv5层上操作就可以了。
在性能上提升也是相当明显的:
缺点:
Fast-RCNN依然使用selective search方法选取候选区域,这一步骤包含大量计算。
因而,改进selective search是Fast-RCNN速度提升的关键。