Faster-RCNN的关键点总结

“  要得到,你必须要付出,要付出,你还要学会坚持。如果你真的觉得很难,那你就放弃,但放弃你就不要抱怨。”

 

 

2018年8月31日12:00:00

8月的最后一天了~

真的好累

坚持,再坚持。

一想到上了这么多年学就是为了现在,就~

好吧,不废话了

把自己最近总结的关键点记录下来:

 

              Faster-RCNN的关键点总结

 

先解释下吧(自己总结的):

Faster-RCNN是2015年提出的第一个真正意义上的端到端的深度学习检测算法,其最大的创新之处就在于通过添加RPN网络,基于Anchor机制来生成候选框,(代替selective search),最终将特征提取、候选框选取、边框回归和分类都整合到一个网络中,从而有效的提高检测精度和检测效率。具体的流程就是将输入图像缩放以后进入到卷积层提取特征得到feature map,然后特征图送入RPN网络生成一系列object可能的候选框,接下来将原始的feature maps和RPN输出的所有候选框(ROI矩阵(N*5))输入到ROI pooling层,提取收集proposal,并计算出固定大小7×7的proposal feature maps,送入全连接层进行目标分类与坐标回归。

 

好像只要知道Faster-RCNN的,都知道其创新之处在于RPN网络,但是却有很少真正懂ROI Pooling的,其实Faster-RCNN最关键的就是这两部分,下面分别来说:

 

Region Proposal Networks(RPN):

RPN:RPN的核心思想就是使用”滑动窗口+anchor机制”来生成候选框。具体方法是在前面卷积层卷积得到的40*60的特征图(256)上,利用滑动窗口的方式(也就是3×3卷积核),在每个滑动窗口中心点构造9个不同长宽比不同尺度的候选框(40*60*9≈2万个),并将其映射(映射比例16)到rescale图像中框出来,舍弃超出边界的预proposal,再根据每个区域的softmax score进行从大到小排序,提取前2000个预proposal,对这个2000个进行NMS(非极大值抑制),最后将得到的再次进行排序,输出300个proposal给faster RCNN进行预测。(注意此时rcnn的预测类别不包括背景,因为RPN输出的已经默认是前景了)

RPN是一个卷积层(256维)+ relu(**函数) + 左右两个层的(clc layer 和 reg layer)的小网络。RPN在feature map上用3×3的滑动窗口进行卷积,卷积步长stride=1,填充padding=2得到可以被9个anchor区域共享的256d特征,输给clc layer和reg layer后,也就是只要一次前向,就同时预测k个区域的前景、背景概率(1个区域2个scores,所以得到2k个scores),以及bounding box(1个区域4个coordinates,所以是4k个coordinates),最终每一个bbox都有一个6维的向量,前2维用来判断该框内是否有物体,后面4个维度用来判断该bbox里物体的坐标。另外,在训练RPN筛选候选框时,设定跟任意ground truth(GT) IOU的阈值为0.7,大于0.7的anchor标记为前景(正标签),小于0.3的标定为背景(负样本),然后在分类层,损失函数用softmax loss,RPN只对有标签的区域计算loss,非正非负的区域不算损失,对训练没有作用。

而且,在训练的过程中,FasterRCNN采用交替训练的方式,用初始化的权值训练RPN,再用RPN提取的候选区域训练卷积网络,更新权值。

 

ROI-Pooling

ROI-Polling:Roi pooling其实就是将RPN得到的大约300个候选框映射到卷积特征图上并抠出来的过程,并且最重要的是经过ROI池化,不同大小的方框可以得到固定大小的特征图。具体的操作如下:1)根据输入的image,将Roi映射到feature map对应的位置;2)将映射后的区域划分为7×7大小的sections(sections数量和输出的维度相同7×7); 3)对每个section(可以不一样大)进行max pooling操作。这样我们就可以从不同大小的方框得到固定大小的对应的maps。而且输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling最大的好处就在于极大地提高了训练和测试速度(处理速度)。

 

下面进行补充:(概念性解释)

说说GDA吧

随机梯度下降算法(GDA)成了训练深度网络的主流方法。尽管随机梯度下降法对于训练深度网络简单高效,但是它有个毛病,就是需要我们人为的去选择参数,比如学习率、参数初始化、权重衰减系数、Drop out比例(丢弃)等。这些参数的选择对训练结果至关重要,以至于我们很多时间都浪费在这些的调参上。

什么是BN层?有什么用

BN(Batch Normalization)层的作用 Batch Normalization是由google提出的一种训练优化方法,在网络的每一层输入的时候,插入了一个归一化层,归一化处理以后再进入网络的下一层。这样可以(1)加速收敛(2)控制过拟合,可以少用或不用Dropout和正则(3)降低网络对初始化权重不敏感(4)允许使用较大的学习率。Dropout是在训练期间,将隐含层的一些神经元随机丢弃,防止模型出现过拟合。

什么是过拟合(over-fitting)和欠拟合(under-fitting)?以及解决方法?

所谓过拟合(over-fitting)其实就是在模型训练时,所提取的特征过于丰富,以至于模型在训练集中表现得过于优越而在验证数据集以及测试数据集中表现不佳。举个例子:我要训练一个识别狗的模型,而我的样本中恰好都是泰迪,等样本训练完以后我那一张金毛的测试图片,很可能结果就输出不是一条狗,因为这个模型在训练的时候基本上是按照泰迪的特征来打造的,这就造成了模型的过拟合。欠拟合(under-fitting)则是提取泰迪的特征比较少,导致训练出来的模型不能很好地匹配,表现得很差,甚至泰迪都无法识别。(多增加一些特征提取层或采用更复杂的网络)

方法:正则化(regulation)即在定义的损失函数后面加了一项永不为0的部分,这样采用梯度下降算法就不会使模型中的损失函数趋近0。另外增大训练样本规模同样也可以防止过拟合。

pooling 、Roi pooling 和Roi align的区别:

General Pooling其实就是对卷积层得到的特征图进行降采样,一方面缩小了特征图尺寸(也可以说降低卷积层输出的特征向量),起到了降维的作用,另一方面丢掉了一些特征信息一定程度上提高了模型的泛化能力,可以防止出现过拟合。一般有平均池化mean pooling和最大池化max pooling。ROI Pooling顾名思义,是Pooling层的一种,而且是针对RoIs的Pooling,他的特点是输入特征图尺寸不固定,但是输出特征图尺寸固定。

RoIPooling 采用的是INTER_NEAREST(即最近邻插值),即在resize时,对于 缩放后坐标不能刚好为整数 的情况,采用了 粗暴的四舍五入,相当于选取离目标点最近的点。RoIAlign把最近邻插值换成了双线性插值,即从原图到特征图的ROI映射直接使用双线性插值,不取整,这样误差会小很多,经过池化后再对应回原图的准确性也更高些,可以保证图像的空间对称性(Alignment)。

mAP咋计算的?

平均精度(AP)、平均精度均值(mAP)、精确率(precision)、召回率(recall)、交并比IOU、置信度阈值(confidence thresholds)

那到底啥是准确率 – precision 和召回率 – recall:

若一个待检测的物体为狗,我们将被正确识别的狗,即检测为狗实际也为狗,称为True positives。将被正确识别的猫,即检测为猫实际也为猫,称为True negatives。被错误识别为狗的猫称为 False positives,被错误识别为猫的狗称为 False negatives。 

Faster-RCNN的关键点总结

准确率可以反映一个类别的预测正确率 。
recall 的计算为:

Faster-RCNN的关键点总结

准确率和召回率是互相影响的,因为如果想要提高准确率就会把预测的置信率阈值调高,所有置信率较高的预测才会被显示出来,而那一些正确正预测(True Positive)可能因为置信率比较低而没有被显示了。一般情况下准确率高、召回率就低,召回率低、准确率高,如果两者都低,就是网络出问题了。一般情况,用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:

                Faster-RCNN的关键点总结

Precision其实就是在识别出来的图片中,True positives所占的比率。也就是所有被识别出来的狗中,真正的狗所占的比例。Recall 是测试集中所有正样本样例中,被正确识别为正样本的比例。也就是被正确识别出来的飞机个数与测试集中所有真实飞机的个数的比值。Precision-recall 曲线:改变识别阈值,使得系统依次能够识别前K张图片,阈值的变化同时会导致Precision与Recall值发生变化,从而得到曲线。曲线下的面积就是AP,mAP是多个类别AP的平均值。

具体的呢:

首先设定一组阈值,[0, 0.1, 0.2, …, 1]。然后对于recall大于每一个阈值(比如recall>0.3),我们都会得到一个对应的最大precision。这样,我们就计算出了11个precision。AP即为这11个precision的平均值。这种方法英文叫做11-point interpolated average precision。​

当然PASCAL VOC CHALLENGE自2010年后就换了另一种计算方法。新的计算方法假设这N个样本中有M个正例,那么我们会得到M个recall值(1/M, 2/M, ..., M/M),对于每个recall值r,我们可以计算出对应(r' > r)的最大precision,然后对这M个precision值取平均即得到最后的AP值。

 

好啦~

加油,各位,

自己也加油!