经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。
如图1,Faster RCNN其实可以分为4个主要内容:
- Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
- Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
- Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
- Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。
如图2展示了python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构,可以清晰的看到该网络对于一副任意大小PxQ的图像:
- 首先缩放至固定大小MxN,然后将MxN图像送入网络;
- 而Conv layers中包含了13个conv层+13个relu层+4个pooling层;
- RPN网络首先经过3x3卷积,再分别生成positive anchors和对应bounding box regression偏移量,然后计算出proposals;
- 而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。
经典的检测方法生成检测框都非常耗时,如OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;或如R-CNN使用SS(Selective Search)方法生成检测框。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。
上图展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
RPN网络的基本结构
RPN(Region Proposal Network)是Faster R-CNN中的一个关键组件,其主要功能是从特征图中生成候选区域。RPN网络的基本结构包括以下几个部分:
- 卷积层:RPN通过一个卷积层(例如3×3的卷积核)接在分类网络的特征层输出上,用于提取特征图。
- 锚点(Anchors):在特征图上设置不同大小和比例的锚点,通常有9种方案(3种长宽比和3种尺寸)。
- 分类层:通过softmax分类器判断锚点是属于前景(包含物体)还是背景。
- 回归层:通过边界框回归修正锚点的位置,以更精确地定位物体。
RPN网络的工作原理
- 特征提取:输入图像通过卷积神经网络(例如VGG16)提取特征图。
- 锚点生成:在特征图上设置9种方案的锚点,每个像素位置都有9个锚点。
- 分类:通过softmax分类器判断每个锚点是属于前景还是背景,即判断该锚点是否包含物体。
- 回归:通过边界框回归修正锚点的位置,以适应物体的实际边界。
- 候选区域生成:根据分类和回归的结果,生成最终的候选区域。
- ROI池化:通过ROI池化层将候选区域的特征图规范到相同尺寸,以便进行后续的分类和边界框回归。
原文链接 : 一文读懂Faster RCNN - 知乎 (zhihu.com)