赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
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整合在了一个网络中,极大地提高了检测速度。
Faster RCNN的模型框架如图。
可以分为4个主要内容:
完整的网络图如下。
从网络总图上可以看出,RPN 层可以分为上下两条支路,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。
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。
一副MxN大小的矩阵送入Faster RCNN网络后,到RPN网络变为(M/16)x(N/16),设为W×H。 在进入reshape与softmax之前,先做了1x1卷积,输出18(即2×9)层feature maps. 9表示九种anchor,2表示该anchor是否含有目标。
这里,为了进行softmax输出二分类结果,需要单独把‘2’这个维度孤立出来,因此在softmax前后各有一个reshape。数据的尺寸变化为:[1, 2x9, H, W] -> [1, 2, Hx9, W], softmax -> [1, 2x9, H, W].
对于窗口一般使用四维向量(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后的尺寸。
VGG输出 5038512 的特征,对应设置 5038k个anchors,而RPN输出:
Proposal Layer负责综合所有平移缩放量和positive anchors,计算出精准的proposal,送入后续RoI Pooling Layer。
Proposal Layer forward 按照以下顺序依次处理:
Proposal Layer有3个输入:anchors是否有目标的分类器结果rpn_cls_prob_reshape,对应的bbox坐标(e.g. 300),包含了缩放信息的im_info=[M, N, scale_factor]。然后输出300个 proposal=[x1, y1, x2, y2]。
由于RPN层输出的proposal尺寸不一,故提出了RoI pooling变换到统一的尺寸。
Rol pooling层有2个输入:
RoI Pooling layer forward过程:
这样处理后,即使大小不同的proposal输出结果都是 pooled_w × pooled_h 固定大小,实现了固定长度输出。
Classification环节,利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。
Faster RCNN训练过程分为6个步骤:
可以看到训练过程类似于一种“迭代”的过程,不过只循环了2次。至于只循环了2次的原因是应为作者提到:”A similar alternating training can be run for more iterations, but we have observed negligible improvements”,即循环更多次没有提升了。注意,在第二次训练时,RPN和Fast RCNN共享的网络层是冻结的。
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都默认在网格中心。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。