第三十节,目标检测算法之 Faster R-CNN算法详解
Posted zyly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三十节,目标检测算法之 Faster R-CNN算法详解相关的知识,希望对你有一定的参考价值。
Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.
本文是继RCNN[1],fast RCNN[2]之后,目标检测界的领军人物Ross Girshick团队在2015年的又一力作。简单网络目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%;复杂网络达到5fps,准确率78.8%。
作者在github上给出了基于matlab和python的源码。
上一节我们介绍到Fast R-CNN网络,Fast R-CNN看似很完美了,但是Fast R-CNN中还存在着一个优点尴尬的问题,它需要先使用Selective Search提取框,这个方法比较慢,有时,检测一张图片,大部分时间不是花费在计算神经网络分类上,而是花在Selective Search提取框上!在Fast R-CNN升级版Faster R-CNN中,使用RPN(Region Proposal Network)网络取代了eSlective Search,不仅速度得到了大大提高,而且还获得了更加精确的结果。
一 Faster R-CNN思路
从R-CNN到Fast R-CNN,再到本文的Faster R-CNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
Faster R-CNN可以简单地看做“区域生成网络(RPN)+Fast RCNN“的系统,用区域生成网络代替Fast R-CNN中的Selective Search方法,网络结构如下图。本篇论文着重解决了这个系统中的三个问题:
- 如何设计区域生成网络
- 如何训练区域生成网络
- 如何让区域生成网络和Fast R-CNN网络共享特征提取网络
步骤如下:
- 首先向CNN网络【ZF或VGG-16】输入任意大小图片;
-
经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图;
- 供RPN网络输入的特征图经过RPN网络得到区域建议和区域得分,并对区域得分采用非极大值抑制【阈值为0.7】,输出其Top-N【文中为300】得分的区域建议给RoI池化层;
- 第2步得到的高维特征图和第3步输出的区域建议同时输入RoI池化层,提取对应区域建议的特征;
- 第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box。
二 RPN详解
基本设想是:在提取好的特征图上,对所有可能的候选框进行判别。由于后续还有位置精修步骤,所以候选框实际比较稀疏。
1、特征提取
RPN还是需要使用一个CNN网络对原始图片提取特征。为了方便读者理解,不妨设这个前置的CNN提取的特征为51x39x256,即高为51,宽为39,通道数为256.对这个卷积特征再进行一次卷积计算,保持宽、高、通道数不变,再次得到一个51x39x256的特征。
为了方便叙述,先来定义一个“位置”的概念:对于一个51x39x256的卷积特征,称它一共有51x39个"位置"。让新的卷积特征的每一个"位置"都"负责”原图中对应位置的9种尺寸框的检测,检测的目标是判断框中是否存在一个物体,因此共用51x29x9个“框”。在Faster R-CNN原论文中,将这些框都统一称为"anchor"。
2、候选区域(anchor)
特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积分别是128x128,256x256,512x512,每种面积又分成3种长宽比,分别是2:1,1:2,1:1 。这些候选窗口称为anchors。下图示出51*39个anchor中心,以及9种anchor示例。
对于这51x39个位置和51x39x9个anchor,下图展示了接下来每个位置的计算步骤。设k为单个位置对应的anchor的个数,此时k=9,。通过增加一个3x3滑动窗口操作以及两个卷积层完成区域建议功能,第一个卷积层将特征图每个滑窗位置编码成一个特征向量,第二个卷积层对应每个滑窗位置输出k个区域得分【表示该位置的anchor为物体的概率,这部分总输出长度为2xk(一个anchor对应两个输出:是物体的概率+不是物体的概率)】和k个回归后的区域建议【框回归,框回归的含义与Fast R-CNN中一样,一个anchor对应4个框回归参数,因此框回归部分的总输出的长度为4xk】,并对得分区域进行非极大值抑制后输出得分Top-N【文中为300】区域,告诉检测网络应该注意哪些区域,本质上实现了Selective Search、EdgeBoxes等方法的功能。
Faster R-CNN使用RPN生成候选框后,剩下的网络结构和Fast R-CNN中的结构一模一样。在训练过程中,需要训练两个网络,一个是RPN网络,一个是在得到框之后使用的分类网络。通常的做法是交替训练,即在一个batch内,先训练RPN网络一次,再训练分类网络一次。
参考文章:Faster R-CNN论文详解
Faster RCNN解析
【目标检测】Faster RCNN算法详解
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
以上是关于第三十节,目标检测算法之 Faster R-CNN算法详解的主要内容,如果未能解决你的问题,请参考以下文章
目标检测算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3)
TensorFlow2深度学习实战(十七):目标检测算法 Faster R-CNN 实战