论文名:Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks
论文作者:Shaoqing Ren et.al.
期刊/会议名:NIPS 2015
发表时间:2016-1
论文地址:https://arxiv.org/abs/1506.01497
源码:https://github.com/rbgirshick/py-faster-rcnn
1.引言
Faster R-CNN是在Fast R-CNN的基础上进一步加速的。
2.相关工作
Fast R-CNN接收一整张输出图片后,通过一些卷积层来得到这一整张图片的一个特征图,然后通过RoI投影得到这个候选区域的一个候选区域特征图,然后通过RoI池化层来将这个候选区域的特征图,转换成一个特定大小的一个候选区域特征图,再利用这个候选区域特征来识别出这个候选区域的类别和一个精确的坐标并且Fast R-CNN实现了几乎实时的一个检测帧率。然而这个实时是有一个前提的,因为它忽略了花费在region proposals上的时间,也就是这个候选区域的生成过程。因为对于Fast R-CNN算法来说除了这一整个流程之外,它还需要一个额外的模块就是从原图中产生这一个个的候选区域,有了这一大堆候选区域之后才能够使用RoI投影,把某一个候选区域的这个特征给投影出来。如果只看这一个过程,Fast R-CNN确实能够实时检测了。真正拿一张图片去测的时候肯定是要先去产生这个候选区域的,也就是先要通过这个算法产生一堆的候选区域。所以这一部分时间也应该考虑在内,但是它恰恰又是一个非常耗时的过程,所以这一步也就是proposals成为了测试时的一个计算瓶颈。因此这一整篇Faster R-CNN的论文最核心的内容就是在解决这个问题,怎么减少这一步的时间,让整个算法真正能够去实时的部署。
3.Faster R-CNN
之前的R-CNN,SPPnet,Fast R-CNN在这一步用的都是一个叫selective search的区域建议方法。由于它太慢就换为edge boxes算法,但edge boxes也并不是很快。在这里考虑的这两个方法都是一些传统的方法,一般都是在CPU上去进行实现。既然卷积神经网络能用GPU加速,那么就可以考虑使用CNN来利用GPU来实现这个过程的加速,这确实是一个有效的解决思路。但是它忽略了共享计算,也就是使用CNN来实现这个过程的时候肯定是需要先提取这幅图片上的图片特征,才能得到这些区域。右边这个过程也是先提取这个图片上的图片特征然后再实现后续的过程,那么这两个CNN的特征提取部分,是不是就可以合并到一起来实现共享计算了,这样就只能提取一次特征,实现两个功能,而不用两个CNN都提一遍特征了。因此这篇Faster R-CNN的解决思路就出来了,它使用一个深度卷积神经网络来实现计算proposal的过程并给它起了一个名字叫region proposal network,区域建议网络缩写就是RPN,并且这个RPN可以通过和原来的Fast R-CNN共享卷积层从而使得候选区域生成算法的时间降低到10ms,之前的方法是一张图需要两秒,现在一张图只需要10ms。这个提升是非常非常大的,可以根据这一段的描述把Faster R-CNN的结构画出来。