Faster R-CNN理解

背景

经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显,如下所示:

在这里插入图片描述
在这里插入图片描述

主要结构

  1. Conv Layers - 输入是 image,输出是提取的图片的 feature maps,被用作 RPN 和全连接层的共享特征;

  2. RPN -基于 feature maps 来生成 region proposals. 主要是对 anchors 采用 softmax 来确定其是 foreground 或 background,并对 anchors 进行 bounding box 回归,进而获得理想的 proposals;

  3. RoI Pooling - 输入是 feature map 和 proposals,输出是提取的 proposal feature maps,被用于全连接层对类别判定;

  4. Classifier- 基于 proposal feature
    maps 来对 proposal 的类别进行计算,并再次进行
    bounding box 回归,以得到准确的 object 检测框位置.

说明:下述预测的位置信息均为偏移量,这里为了理解方便才说为准确信息。

大体流程

在这里插入图片描述

  1. Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。

  2. Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。

  3. Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。

  4. Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

必要知识点

点一:卷积提取特征部分。

以论文中选用VGG16,其中卷积、激活部分不改变图片尺寸,但是在池化层会导致尺寸缩放到原来的一半。那么对于输入为(M*N),经过了四个池化,那么此时的特征图变为原来的(M/16 * N/16)。注意这一部分内容是因为在RPN提取anchors部分需要映射回原图。

点二:Region Proposal Networks(RPN)给出候选框

在这里插入图片描述

上图展示了RPN网络的具体结构。其中输入为特征图,输出为一系列候选框。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

记录2.1:为什么这里采用映射的思想产生候选框?

为了应对原图中存在对于同一类别物体,可能会有尺寸的区别,比如在一张图中由于拍照的远近,会有近处的“车”尺寸大,远处的“车”尺寸小。为了应对这个问题,原始已有的办法,比如:多尺度训练,即将一张原图进行尺寸缩放,再喂给网络,例如SPP-Net、fast-Rcnn等;还有的采用多尺寸卷积核的方法。但是这些方法都会造成网络训练时间加长的问题。在本论文中,提出基于映射产生候选框的方法,可以解决上述问题。

记录2.2:何为anchors?

anchors说白了就是一组框的位置信息,每一个框的位置信息由左上角和右下角的信息组成。在特征图上的每一个点,对应原图一个区域(大小为16*16)。这个时候我们对于anchors的设计提出3种尺寸和3种长宽比,进而得到九种,其中长宽比分别为(1:2)(2:1) (1:1),尺寸分别有128、256、512(如下图右下角的蓝、红、绿)。也就是特征图上一个点,对应9个anchors,其中anchors在原图上抠取。这种设计使框尽量覆盖足够多的区域,并且考虑网络时间效率。

在这里插入图片描述

当然此时只是初步提出可能的anchors,后面还需要进行过滤,否则anchors太多。

记录2.3:如何设计选取初步的anchors?

在这里插入图片描述

上图左边最底层是通过主卷积干架提取的特征图“conv feature map”,然后先进行一个3*3的卷积操作(此时得到的特征图尺寸不变,只是又糅合了周围的特征),然后对于该特征图上的每一个点,映射到原图上,得到k个anchors,该点为锚点。

这里描述一下如何映射:首先假设主卷积采用VGG16,这个时候涉及到感受野的问题,我们知道在进行卷积时,其中conv、relu不改变图的尺寸,进行pool将尺寸变为远来的一半,假设经过了四个卷积,则此时得到的特征图是原来原图的1/16,则此时一个锚点映射到原图上对应一个16*16的区域,此时提出:对于映射得到的区域进行尺寸变换和长宽比变换,从而得到原图上的多个区域,即为anchors。

在原图上对框进行设计时,考虑:使框尽量覆盖足够多的区域,并且考虑网络的时间效率。对于框的设计提出3种尺寸和3种长宽比,进而得到九种,其中长宽比分别为(1:2)(2:1) (1:1),尺寸分别有1282、2562、512^2(如上图右侧的红、绿、蓝)。

记录2.4:得到anchors之后,如何对其进行分类,判断是前景还是背景?

在这里插入图片描述

该部分输入的特征图为原始图片的1/16,不妨记为W、H。对于大约2W个候选框,需要对这些候选框进行打标签(标签为2维,即该框是前景还是背景),才能进行有监督训练。那么如何进行打标签,论文中对于前景给出了两种标记方式,其一对于原图上的每一个ground truth,选取与其IOU最大的候选框,标记为前景,对于原图上的ground truth,只要与其IOU大于0.7,标记为前景;论文中对于背景,选取与ground truth的IOU小于0.3的候选框标记为背景。那么在0.3到0.7之间的候选框我们就不管了。从而对于每一个anchors标出前景或背景的标签。记得删去越界的候选框,然后从中选取256个数据进行训练,尽量保持1:1。

首先进行11的卷积,融合不同通道的特征,输出为:WH*(2*9)。这也正好对应输出特征图上每一个点对应9个anchors,每一个anchor分为两类。然后进行softmax分类,至于为什么前后进行reshape论文中提到和caffe的存储有关,这里不再赘述。

记录2.5:bounding box regression的原理?

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

记录2.6:现在我们来看RPN层的回归部分。

在这里插入图片描述
在这里插入图片描述

记录2.7:对于RPN如何设计设计损失函数?

在这里插入图片描述

记录2.8:Proposal 层的作用?

在这里插入图片描述

点3:ROI Pooling层作用

该层用于将proposals在原图上对应的区域映射到特征图上的区域,再将尺寸不同的区域,通过roi
pooling将尺寸固定(也就是将区域分割成固定网格形式,在每一个小网格上进行最大池化操作)。如下图:

在这里插入图片描述

其中M、N分别为原图长、宽,77代表固定到77的尺寸。该部分和fast rcnn对应部分相同,具体就不进行赘述。

点4:最后的分类和回归

该部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量,这里有20+1个类别;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。后面会进行nms等过滤操作。

在这里插入图片描述

该部分和fast rcnn对应部分相同,具体就不进行赘述。

训练过程

RPN层的训练

  1. 我们得到feature map,首先进行3*3卷积,尺寸不变,仅仅是再次融合周围特征,得到新的特征图;

  2. 对于新特征图上每一个点,映射回原图上的一个区域。生成候选框按照size=128128,256256,512*512,长宽比为1:2,2:1,1:1,对于新特征图上每一个点在原图上生成9个anchors,共大约2W个;

  3. 对候选框进行删除和打标签,分别为:
    a) 删去越界候选框;
    b) 对于每一个真实框,选取与其的IOU最大的候选框,标记为1;候选框与真实框IOU大于0.7,标记为1;候选框与真实框IOU小于0.3为0;其余舍去;
    c) 然后在剩下的候选框中随机选取256个进行训练,比例为1:1,假若正样本个数不够,只能利用负样本填充;

  4. 现在分为两个分支,分别进行分类训练和回归训练:
    a) 其中分类训练为二分类,损失函数为softmaxLoss;
    b) 其中回归训练,为线性训练,只需要得到偏移量;其中损失函数为smoothL1;
    c) 综合上两步得到整体损失函数:

在这里插入图片描述

  1. 训练好分类和回归两部分之后,源码中会重新生成2W个候选框,进行分类和位置回归。然后进行如下过滤:
    a) 首先对于候选框与grounf truth的IOU小的直接删去;
    b) 这个时候再对候选框进行一个NMS过滤,阈值取0.7(也就是如果两个候选框IOU大于0.7,就代表其重叠率比较高,此时再看这两个候选框属于物体的概率(这个概率就是与ground truth的IOU),选取概率大的框,删去概率小的框);
    c) 这个时候在进行一个topN的选取,也就是按照每个候选框属于物体的概率(这个概率就是与ground truth的IOU)进行由大到小进行排序,选取前N个候选框 。

注:所有参数初始化使用高斯初始化,标准差选择0.01;

RPN测试部分

  1. 我们得到feature map,首先进行3*3卷积,尺寸不变,仅仅是再次融合周围特征,得到新的特征图;

  2. 对于新特征图上每一个点,映射回原图上的一个区域。生成候选框按照size=128128,256256,512*512,长宽比为1:2,2:1,1:1,对于新特征图上每一个点在原图上生成9个anchors,共大约2W个;

  3. 对于越界的候选框进行clip操作(直接删去是在训练时采用的,但是在测试的时候,我们进行的是clip操作,就是将候选框中越界的部分剪去,留下剩下的部分);

  4. 过分类和回归两步,得到候选框的类别概率和坐标偏移量,得到预测框;

  5. 在proposal层对预测框进行过滤:
    a) 首先对于预测框与grounf truth的IOU小的直接删去;
    b) 这个时候再对预测框进行一个NMS过滤,阈值取0.7(也就是如果两个候选框IOU大于0.7,就代表其重叠率比较高,此时再看这两个候选框属于物体的概率(这个概率就是与ground truth的IOU),选取概率大的框,删去概率小的框);
    c) 这个时候在进行一个topN的选取,也就是按照每个候选框属于物体的概率(这个概率就是与ground truth的IOU)进行由大到小进行排序,选取前N个预测框 。

整体训练流程

  1. 单独训练RPN网络,结构如下:

在这里插入图片描述

  1. 单独训练fast-rcnn,其中候选框利用RPN生成的候选框,网络结构如下:

在这里插入图片描述

  1. 再次训练RPN网络,只不过这次固定卷积部分,只迭代RPN独有部分参数,也就是虚线以下部分参数;

  2. 再次利用RPN网络结果微调fast-rcnn,固定卷积部分参数,只迭代roi pooling层以后的参数;

至此网络训练完成。

整体测试流程

在这里插入图片描述

RPN提取候选框,会进行筛选,如下:

  1. 对于IOU较小的框进行删去;

  2. 这个时候对候选框再进行一个NMS过滤,阈值取0.7(也就是如果两个候选框U大于0.7,就代表其重叠率比较高,此时再看这两个候选框属于物体的概率(这个概率就是通过分类层判断每个框属于前景和背景的概率),选取概率大的框,删去概率小的框)这时候大约剩2000个左右;

  3. 对于过界的框删除(在测试时是对越界的候选框,对于越界的部分删去,保留未越界的部分);

  4. 这个时候在进行一个topN的选取,也就是按照每个候选框属于物体的概率(这个概率就是与ground truth的IOU)进行由大到小进行排序,选取前N个候选框。

在fast-rcnn进行最终提供候选框时,也会进行NMS等精删选。

视频:

https://www.bilibili.com/video/av61747592

下面为添加的训练和测试流程图:

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值