【深度学习模型】了解一下Faster RCNN

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Faster RCNN 由 论文提出,是继R-CNN和Fast RCNN之后的目标检测上的又一力作。
R-CNN提出selective search(SS)来搜索region proposal(RP);
Fast RCNN指出不必对每个RP各自提CNN特征,可以对原图提好CNN特征,再将SS找到的RP映射到CNN特征层上;
Faster RCNN则提出了RPN层,将特征提取,proposal提取,bounding box整合在了一个网络中,极大地提高了检测速度。

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获得检测框最终的精确位置。

完整的网络图如下。
在这里插入图片描述

  1. 该网络对于一副任意大小PxQ的图像,首先缩放至固定大小MxN,然后将MxN图像送入网络;
  2. Conv layers中包含了13个conv层+13个relu层+4个pooling层;
  3. RPN网络首先经过3x3卷积,再分别生成positive anchors和对应bounding box regression偏移量,然后计算出proposals;
  4. Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification。

2. 模型细节

2.1 Region Proposal Networks(RPN)

从网络总图上可以看出,RPN 层可以分为上下两条支路,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。

2.1.1 anchors

anchors 是一组预设好的矩形。对于缩放至800×600的图,作者预设了9个anchors,坐标如下。

[[ -84.  -40.   99.   55.]
 [-176.  -88.  191.  103.]
 [-360. -184.  375.  199.]
 [ -56.  -56.   71.   71.]
 [-120. -120.  135.  135.]
 [-248. -248.  263.  263.]
 [ -36.  -80.   51.   95.]
 [ -80. -168.   95.  183.]
 [-168. -344.  183.  359.]]

其中每行的4个值表示矩形的左上和右下角点坐标。这9个矩形的长宽比为0.5、1或2,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,这样就可以基本覆盖到整张图。
在这里插入图片描述
有了这些anchors,我们遍历Conv layers计算获得的feature maps,为每一个点都配备这9种anchors作为初始的检测框。这里如果有超出图像边缘的框,我们就对框进行裁剪,丢弃掉框外的部分。那么总共就有 (800//16) (600//16) 9 = 17100个anchor。

2.1.2 softmax分类

一副MxN大小的矩阵送入Faster RCNN网络后,到RPN网络变为(M/16)x(N/16),设为W×H。 在进入reshape与softmax之前,先做了1x1卷积,输出18(即2×9)层feature maps. 9表示九种anchor,2表示该anchor是否含有目标。

扫描二维码关注公众号,回复: 14706391 查看本文章

这里,为了进行softmax输出二分类结果,需要单独把‘2’这个维度孤立出来,因此在softmax前后各有一个reshape。数据的尺寸变化为:[1, 2x9, H, W] -> [1, 2, Hx9, W], softmax -> [1, 2x9, H, W].

2.1.3 bounding box regression

对于窗口一般使用四维向量(x,y,w,h)表示,分别表示窗口的中心点坐标和宽高。
对于positive Anchors(设为A),和groundtruth(设为G’),我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G’。比较简单的思路就是:
在这里插入图片描述
注意,这里的平移dx和dy可以理解为相对于原宽长的平移因子,即相对于原宽长平移了多少倍的距离。缩放dw和dh可以理解为缩放了ln的dw和dh倍。

那么,对应于Faster RCNN原文,positive anchor与ground truth之间的平移量(tx, ty)与尺度因子(tw, th)如下:
在这里插入图片描述

训练bouding box regression网络回归分支时,标签是(tx,ty,tw,th)。 输入cnn feature,输出36(即4×9)层feature maps. 9表示九种anchor,4表示该anchor的平移量和缩放量。
注意这里的平移缩放量是针对原M×N的尺寸的,而输入的feature是pooling后的尺寸。

2.1.4 Proposal Layer

VGG输出 5038512 的特征,对应设置 5038k个anchors,而RPN输出:

  • 大小为 50382k 的positive/negative softmax分类特征矩阵
  • 大小为 50384k 的regression坐标回归特征矩阵

Proposal Layer负责综合所有平移缩放量和positive anchors,计算出精准的proposal,送入后续RoI Pooling Layer。

Proposal Layer forward 按照以下顺序依次处理:

  1. 按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的positive anchors
  2. 限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界
  3. 剔除尺寸非常小的positive anchors
  4. 对剩余的positive anchors进行NMS(nonmaximum suppression),去掉大量重复框

Proposal Layer有3个输入:anchors是否有目标的分类器结果rpn_cls_prob_reshape,对应的bbox坐标(e.g. 300),包含了缩放信息的im_info=[M, N, scale_factor]。然后输出300个 proposal=[x1, y1, x2, y2]。

2.2 RoI pooling

由于RPN层输出的proposal尺寸不一,故提出了RoI pooling变换到统一的尺寸。
Rol pooling层有2个输入:

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

RoI Pooling layer forward过程:

  1. 由于proposal是对应MXN尺度的,所以首先使用spatial_scale=1/16将其映射回(M/16)X(N/16)大小的feature map尺度;
  2. 再将每个proposal对应的feature map区域水平分为 pooled_w × pooled_h 的网格;
  3. 对网格的每一份都进行max pooling处理。

这样处理后,即使大小不同的proposal输出结果都是 pooled_w × pooled_h 固定大小,实现了固定长度输出。

2.3 Classification

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

3. Faster RCNN的训练

Faster RCNN训练过程分为6个步骤:

  1. 在已经训练好的model上,训练RPN网络,对应stage1_rpn_train.pt
  2. 利用步骤1中训练好的RPN网络,收集proposals,对应rpn_test.pt
  3. 第一次训练Fast RCNN网络,对应stage1_fast_rcnn_train.pt
  4. 第二训练RPN网络,对应stage2_rpn_train.pt
  5. 再次利用步骤4中训练好的RPN网络,收集proposals,对应rpn_test.pt
  6. 第二次训练Fast RCNN网络,对应stage2_fast_rcnn_train.pt

可以看到训练过程类似于一种“迭代”的过程,不过只循环了2次。至于只循环了2次的原因是应为作者提到:”A similar alternating training can be run for more iterations, but we have observed negligible improvements”,即循环更多次没有提升了。注意,在第二次训练时,RPN和Fast RCNN共享的网络层是冻结的。

4. 总结

Faster RCNN是目标检测里two-stage的代表性杰作,在这之后还有一款用于目标检测和实例分割的Mask RCNN也为人称道。Mask RCNN类似于Faster RCNN的两个输出(预测框的坐标和类别),但多一条基于特征金字塔FCN网络的实例分割的mask通路,另外还将RoI pooling换成RoI align解决量化带来的边缘像素损失问题。
后来,目标检测又有很多one-stage方法涌现,即一步直接生成预测框的坐标和类别,其中以YOLO和SSD为代表,它们最终输出k×(4+1+c)通道的特征图,其中4是坐标,1是前景、背景的置信度,c是类别数,c是anchor数。两者选择anchor框的策略不同,YOLO的anchor基于训练集所有框聚类得到宽和长,SSD由数学公式得到,且SSD在不同尺度的特征图上选取了不同的anchor数量(从而实现多尺度的检测)。两者的anchor框都只有宽度和高度,坐标x和y都默认在网格中心。

参考文献

https://zhuanlan.zhihu.com/p/31426458

猜你喜欢

转载自blog.csdn.net/tobefans/article/details/125433926
今日推荐