Faster RCNN是Fast RCNN的优化版本,二者主要的不同在于感兴趣区域的生成方法,Fast RCNN使用的是选择性搜索,而Faster RCNN用的是Region Proposal网络(RPN)。RPN将图像特征映射作为输入,生成一系列object proposals,每个都带有相应的分数。如下图
Faster R-CNN是2-stage方法的奠基性工作,提出的RPN网络取代Selective Search算法使得检测任务可以由神经网络端到端地完成。如图
其主要步骤为:
1、输入图像到卷积网络中,生成该图像的特征映射。
2、在特征映射上应用Region Proposal Network,返回object proposals和相应分数。
3、应用Rol池化层,将所有proposals修正到同样尺寸。
4、最后,将proposals传递到完全连接层,生成目标物体的边界框。
主要贡献是提出Regional Proposal Networks,替代之前的SS算法。RPN网络将Proposal这一任务建模为二分类(是否为物体)的问题。
(1)RPN网络
在最后卷积得到的特征图上,使用一个 3x3的窗口在特征图上滑动,然后将其映射到一个更低的维度上(如 256 维,通过全连接运算等),在每个滑动窗口的位置上,RPN 都可以基于 k 个固定比例的 anchor box(默认的边界框)生成多个可能的区域。(对于W*H的特征图,每个位置生成k个anchor,可以生成W*H*K个anchor)
每个 region proposal 都由两部分组成:
a)该区域的objectness 分数。
b)4个表征该区域边界框的坐标。每个anchor都有[x, y, w, h]对应4个偏移量
如图
RPN网络实际分为2条线,上面一条通过softmax分类anchors获得foreground和background(检测目标是foreground),下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。
最后的Proposal层则负责综合foreground anchors和bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。
其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
上图中的红色边框部分详细如下图所示:
Layers中最后的conv5层num_output=256(256个通道),对应生成256张特征图,所以相当于feature map每个点都是256-d。这里通过3*3的卷积结果仍是256-d,表示考虑了周边3*3的区域。假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k coordinates
前景和背景的区分方法为:
和所有的ground-truth的IoU(Intersection-over-union)小于0.3视为negative(背景);和任意的ground-truth的IoU大于0.7视为positive(前景);不属于以上两种情况的proposal直接丢掉,不进行训练使用。
1、对于第一条线
softmax判定foreground与background
在进入reshape与softmax之前,先做了1x1卷积;该层输出:WxHx18;feature maps每一个点都有9个anchors,同时每个anchors又有可能是foreground和background;相当于初步提取了检测目标候选区域box(一般认为目标在foreground anchors中);在softmax前后都接一个reshape layer目的是为了便于softmax分类
在caffe基本数据结构blob中以如下形式保存数据:blob=[batch_size, channel,height,width] ; 对应至上面的保存bg/fg anchors的矩阵,其在caffe blob中的存储形式为[1, 2*9, H, W]。
而在softmax分类时需要进行fg/bg二分类,所以reshape layer会将其变为[1, 2, 9*H, W]大小,即单独“腾空”出来一个维度以便softmax分类,之后再reshape回复原状。
2、对于第二条线
可以看到其num_output=36,即经过该卷积输出图像为WxHx36,在caffe blob存储为[1, 36, H, W],这里相当于feature maps每个点都有9个anchors,每个anchors又都有4个用于回归的[dx(A),dy(A),dw(A),dh(A)]变换量。
3、Proposal
Proposal Layer负责综合所有[dx(A),dy(A),dw(A),dh(A)]变换量和foreground anchors,计算出精准的proposal,送入后续RoI Pooling Layer。
Proposal Layer网络的前向过程大致如下:
1.生成anchors ,利用[dx(A),dy(A),dw(A),dh(A)]对所有的anchors做bbox regression回归
注意这里才生成anchors,即生成在原图中anchors的坐标
2.按照输入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的foreground anchors。
3.利用im_info将fg anchors从MxN尺度映射回PxQ原图,判断fg anchors是否大范围超过边界,剔除严重超出边界fg anchors
4.进行nms
5.再次按照nms后的foreground softmax scores由大到小排序fg anchors,提取前post_nms_topN(e.g. 300)结果作为proposal输出
4、边框回归
给定anchor A=(Ax, Ay, Aw, Ah),GT=[Gx, Gy, Gw, Gh],寻找一种变换F:使得F(Ax, Ay, Aw, Ah)=(G’x, G’y, G’w, G’h),其中(G’x, G’y, G’w, G’h)≈(Gx, Gy, Gw, Gh)。
变换F的思路一般就是先做平移; 再做缩放;需要学习的是dx(A),dy(A),dw(A),dh(A)这四个变换。可通过相应的数学公式求得(线性回归)。
(2)ROI池化和分类回归
(3)Fatser-RCNN 的训练
可以将RPN和Fast-RCNN分来训练(一般训练两次就行);也可以直接一起训练;