Faster R-CNN算法是作者Ross Girshick对Fast R-CNN算法的一种改进。Fast R-CNN在速度和精度上都有了不错的结果,但仍有一些不足之处。Faster R-CNN算法同样使用VGG-16网络结构,检测速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在ILSVRC和COCO 2015竞赛中获得多个项目的第一名。在Faster R-CNN中提出了区域生成网络(Region Proposal Network,RPN),将候选区域的提取和Fast R-CNN中的目标检测网络融合到一起,这样可以在同一个网络中实现目标检测。Faster R-CNN主要是解决Fast R-CNN存在的问题:
- 候选区域提取方法耗时较长;
- 没有真正实现end-to-end训练测试。
Faster R-CNN算法步骤:
- 将图像输入网络得到相应的特征图;
- 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵;
- 将每个特征矩阵通过ROl pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。
上图中各层的主要功能:
1) conv layers提取特征图:
作为一种CNN网络目标检测方法,Faster R-CNN首先使用一组基础的conv+relu+pooling层提取input image的feature maps,该feature maps会用于后续的RPN层和全连接层。2) RPN(Region Proposal Networks):
RPN网络主要用于生成region proposals,首先生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体或者不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)。3) RoI Pooling:
该层利用RPN生成的proposals和VGG16最后一层得到的feature map,得到固定大小的proposal feature map,进入到后面可利用全连接操作来进行目标识别和定位。4) Classifier:
会将RoI Pooling层形成固定大小的feature map进行全连接操作,利用Softmax进行具体类别的分类,同时利用L1 Loss完成bounding box regression回归操作获得物体的精确位置。
Faster R-CNN算法可以看作是由R-CNN和Fast R-CNN演化而来。
Faster R-CNN存在的问题:
- 还是无法达到实时检测目标;
- 获取region proposal,再对每个proposal分类计算量还是比较大。