Faster RCNN论文与原理解读

您所在的位置:网站首页 rcnn详解 Faster RCNN论文与原理解读

Faster RCNN论文与原理解读

#Faster RCNN论文与原理解读| 来源: 网络整理| 查看: 265

论文结构

摘要核心 候选区域提取是已有检测方法实时性低的主要瓶颈 提出了候选区域网络,通过共享特征,提取候选区域,极大提升了计算效率,可以进行端到端训练 FastRCNN和VGG通过迭代优化可以实现特征共享 FasterRCNN是一个实用系统,在单GPU上达5fps 在Pascal VOC2012上达到4% mAP

 

 

 

网络细节

Faster RCNN主要有4个重要部分:

共享卷积层:用于提取feature maps被共享用于后续RPN层和全连接层。 Region Proposal Network(RPN):生成region proposals RoI Pooling:收集feature maps和proposals,提取proposal feature maps后送入全连接层判定目标类别。 Classification:利用proposal feature maps计算proposal的类别,同时再次bbox回归获得精确位置。

 

抽象网络结构

 

具体网络结果

 

共享卷积层

Conv layers(VGG网络)共有13个conv层,13个relu层,4个pooling层。

在FasterRCNN的Conv layers中对所有的卷积都做了扩边处理(pad=1,即填充一圈0),导致原图变为(M+2)x(N+2)大小,再做3x3卷积后输出MxN。 pooling层kernel_size=2,stride=2。这样每个经过pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。 一个MxN大小的矩阵经过Convlayers固定变为(M/16)x(N/16)

 

Anchors Anchors的产生

 

假设原图800x600 下采样16倍,feature map每个点设置9个Anchor

所以:ceil(800/16) x ceil(600/16) x 9 = 50 *38 * 9 = 17100 个框。

 

Anchor 正负例定义与分配 区分前景与背景Anchor,标记标签(1正例,0负例,-1忽略) 正例:对于每一gtbox,交并比最大的anchor以及与任一gtbox交并比超过一定阈值(0.7) 负例:与所有gtboxes交并比小于一定阈值(0.3)其他忽略 对每一前景anchor,根据对应的gtbox计算回归值。

 

 

Region Proposal Networks

目的:判定哪些anchors有可能包含物体

输入:

提取的特征 原图信息(缩放比例,以及resize后尺寸)

输出:

rpn_box 偏移量(hh*ww*9,4) rpn_score(hh*ww*9,2) rois(2000,4)

 

RPN具体网络结构

上面一条用softmax分类anchors获得positive和negative 下面一条用于计算对于anchors的bounding box regression偏移量 最后的proposal进一步剔除太小和超出边界的proposal,并综合变换量和positive anchors,计算出精准的proposal。

 

Bounding Box Regression

目标:寻找一种关系使得输入原始的anchor A 经过映射得到一个跟真实窗口G更接近的回归窗口G’。

其中绿色为GroundTruth,红色为positive anchor。

 

Positive anchor 与ground truth之间的平移计算方法:

先平移:

再缩放:

通过观察上面4个公式可知,需要学习的是dx(A), dy(A), dw(A), dh(A)这四个变换。当anchorA 与GT相差较小时,可认为这是一种线性变换。

 

如何通过线性回归获得dx(A), dy(A), dw(A), dh(A)?

线性回归就是给定输入特征向量X,学习一组参数W,使得经过线性回归后的值跟真实值Y非常接近。即Y=WX。对于该问题,输入X是feature map定义为φ;同时还有训练传入A与GT之间的变换量即(tx,ty,tw,th),输出是dx(A), dy(A), dw(A), dh(A)这四个变换那么目标函数可以表示为:

在FasterRCNN中 foreground anchor与ground truth之间的平移量(tx, ty)与尺度缩放因子(tw,th)关系如下:

 

 

Proposal Layer

对于每张图片,利用它的feature map,计算(H/16)x(W/16)x9(大概20000)个anchor属于前景的概率,然后从中选取概率较大的12000张,利用位置回归参数,修正这大约12000个anchor的位置, 利用非极大值抑制,选出大约2000个ROIS以及对应的位置参数。

 

输入:anchors分类结果,对应的bbox变换量和缩放信息

处理流程:

依据变换量对所有的anchors做bbox regression回归。 根据fg anchor scores由大到小排序anchors,提取前pre_nms_topN(e.g.

12000)个anchors。

 限定超出图像边界的positive anchors为图像边界,防止后续roipooling时proposal超出图像边界。 剔除尺寸非常小的positive anchors。 对剩余的positive anchors进行NMS。 之后输出proposal=[x1,y1,x2,y2],对应的是MxN的图像尺度。

 

即如下流程:

生成anchors->softmax分类器提取foreground anchors->bbox 回归positive anchors->Proposal Layer生成proposals

 

ROIPooling

输入:

原始的feature maps RPN输出的proposal boxes

 

由于目前的proposals还没有具体的物体信息,因此需要从已有的bounding boxes中提取特征。

 

不同于CNN 网络中的池化层,这里通过分块池化的方法得到固定尺寸的输出。

假设ROI Pooling层的输出大小为w2*h2,输入候选区域的大小为 w*h,ROI Pooling的过程如下:

1) 把输入候选区域划分为 w2*h2,大小的子网格窗口,每个窗口的大小为(w/w2)*(h/h2)

2) 对每个子网格窗口取最大元素作为输出,从而得到大小为w2*h2的输出。

 

如上图所示,假设Feature Map大小为4x4,候选ROI区域大小为3x3,通过2x2的ROI Pooling Layer得到2x2的归一化输出。4个划分后子窗口分别为1、2、3、5(5最大),3、7(7最大),9、10(10最大),11(11最大),然后对每个子窗口做Max Pooling。

为什么需要ROI pooling

这其实来自于更早提出的SPP Net,RPN网络提取出的proposal大小是会变化的,而分类用的全连接层输入必须固定长度,所以必须有个从可变尺寸变换成固定尺寸输入的过程。在较早的R-CNN和Fast R-CNN结构中都通过对proposal进行拉升(warp)或裁减(crop)到固定尺寸来实现,拉升、裁减的副作用就是原始的输入发生变形或信息量丢失(图7),以致分类不准确。而ROI Pooling就完全规避掉了这个问题,proposal能完整的pooling成全连接的输入,而且没有变形,长度也固定。

 

执行流程:

由于proposal对应的尺寸为MxN,所以首先使用spatial_scale参数将其映射回(M/16)x(N/16)大小的feature map。 再将每个proposal对应的feature map分为 pooled_w x pooled_h的网络; 对网格的每一份都进行max pooling处理,以保证结果都是pooled_w x pooled_h固定大小。

 

 

分类Classification 通过全连接和softmax对proposals进行分类 再次对proposals进行bounding box regression,获取更高精度的bbox

Loss

 

论文总结

关键点:

候选区域提取——RPN 特征共享计算——RPN和FastRCNN共享骨干网络特征

 

创新点:

多尺度与纵横比Anchor解决目标多尺度问题 RPN提取候选区域,实现端到端检测 多任务损失函数 两阶段目标检测,提高检测精度

 

启发点:

Anchor定义是否在不同数据集及不同场景下是否应有所变化 是否有必要在整幅图中均匀分布Anchor Anchor定义的多尺度是否能够满足实际物体尺度变化要求

 

 

Faster RCNN代码复现

代码地址:

https://github.com/chenyuntc/simple-faster-rcnn-pytorch

 

博客《逐字理解目标检测simple-faster-rcnn-pytorch-master代码》地址:

https://blog.csdn.net/qq_32678471/article/details/84776144

https://blog.csdn.net/qq_32678471/article/details/84792307

https://blog.csdn.net/qq_32678471/article/details/84882277?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-6&spm=1001.2101.3001.4242

https://blog.csdn.net/qq_32678471/article/details/85678921

注:该博客虽然有很多理解不对或不到位的地方,但注释比较详细,能帮助新手快速理解每个模块的具体含义。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3