Faster RCNN论文与原理解读 |
您所在的位置:网站首页 › rcnn详解 › Faster RCNN论文与原理解读 |
论文结构
网络细节 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具体网络结构 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 论文总结 关键点: 候选区域提取——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 |