目标检测经典论文:faster R-CNN论文详解

Faster R-CNN

目标检测经典论文:faster R-CNN论文详解_第1张图片

上图展示了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)。

1 卷积层

Conv layers部分共有13个conv层,13个relu层,4个pooling层。这里有一个非常容易被忽略但是又无比重要的信息,在Conv layers中:

所有的conv层都是:kernel_size=3,pad=1,stride=1
所有的pooling层都是:kernel_size=2,pad=0,stride=2

正是这种设置,导致Conv layers中的conv层不改变输入和输出矩阵大小。
目标检测经典论文:faster R-CNN论文详解_第2张图片
综上所述,在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长宽都变为输入的1/2。
那么,一个MxN大小的矩阵经过Conv layers固定变为(M/16)x(N/16)!这样Conv layers生成的feature map中都可以和原图对应起来。

2 RPN网络

Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。

目标检测经典论文:faster R-CNN论文详解_第3张图片
可以看到RPN网络实际分为2条线:

  • 上面一条通过softmax分类anchors获得positive和negative分类
  • 下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。
  • 而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

2.1 anchor

anchor的4个值 x1,y1,x2,y2表矩形左上和右下角点坐标。9个矩形共有3种形状,长宽比为大约为 1:1,1:2,2:1 三种,如下图。实际上通过anchors就引入了检测中常用到的多尺度方法。
目标检测经典论文:faster R-CNN论文详解_第4张图片
目标检测经典论文:faster R-CNN论文详解_第5张图片
其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。

2.2 bounding box regression原理

如图所示绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得positive anchors和GT更加接近。
目标检测经典论文:faster R-CNN论文详解_第6张图片
目标检测经典论文:faster R-CNN论文详解_第7张图片
对于训练bouding box regression网络回归分支,输入是cnn feature Φ,监督信号是Anchor与GT的差距(tx,ty,tw,th),即训练目标是:输入 Φ的情况下使网络输出与监督信号尽可能接近。那么当bouding box regression工作时,再输入Φ时,回归网络分支的输出就是每个Anchor的平移量和变换尺度 (tx,ty,tw,th),显然即可用来修正Anchor位置了。

2.3 对proposals进行bounding box regression

在了解bounding box regression后,再回头来看RPN网络第二条线路
目标检测经典论文:faster R-CNN论文详解_第8张图片
目标检测经典论文:faster R-CNN论文详解_第9张图片

2.4 Proposal Layer

Proposal Layer负责综合所有(dx(A),dy(A),dw(A),dh(A)) 变换量和positive anchors,计算出精准的proposal,送入后续RoI Pooling Layer
Proposal Layer有3个输入:

  • positive vs negative anchors分类器结果rpn_cls_prob_reshape
  • 对应的bbox reg的(tx,ty,tw,th)变换量rpn_bbox_pred
  • 以及im_info;另外还有参数feat_stride=16

目标检测经典论文:faster R-CNN论文详解_第10张图片

  1. 首先解释im_info。对于一副任意大小PxQ图像,传入Faster RCNN前首先reshape到固定MxN,im_info=[M, N, scale_factor]则保存了此次缩放的所有信息。然后经过Conv Layers,经过4次pooling变为WxH=(M/16)x(N/16)大小,其中feature_stride=16则保存了该信息,用于计算anchor偏移量

RPN网络结构就介绍到这里,总结起来就是:
生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals

3 RoI pooling

而RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。从图2中可以看到Rol pooling层有2个输入:

  • 原始的feature maps
  • RPN输出的proposal boxes(大小各不相同)

目标检测经典论文:faster R-CNN论文详解_第11张图片

  • 由于proposal是对应MxN尺度的,所以首先使用spatial_scale参数将其映射回(M/16)x(N/16)大小的feature map尺度;
  • 再将每个proposal对应的feature map区域水平分为pooled_w X pooled_h 的网格;
  • 对网格的每一份都进行max pooling处理。
    这样处理后,即使大小不同的proposal输出结果都是 [公式] 固定大小,实现了固定长度输出。

4 Classification

目标检测经典论文:faster R-CNN论文详解_第12张图片

Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框

5 faster R-CNN 训练

目标检测经典论文:faster R-CNN论文详解_第13张图片

参考文献

你可能感兴趣的:(论文笔记,cnn,深度学习,神经网络)