Faster RCNN 论文小结

这里写图片描述

背景

原来写好的博客未保存消失了= =。按理解重新写一遍,可能会少内容,以后再补吧…
RCNN系列称为region-based 方法,其准确率非常依赖于region proposal模块。这也是本文改进的重点内容。

名词

top:下一层名
bottom:上一层名
recall:【所谓召回率即候选区域为真的窗口与Ground Truth的比值【IoU大于阈值即为真】】分析实验,发现随着候选区域个数的增加,召回率并没有和mAP成很好的相关性,而是一直不断增加,也就是说更高的召回率并不意味着更高的mAP;
“attention” mechanisms:RPN提示Fast RCNN需要注意的区域。
“image-centric” sampling strategy
ablation experiments:模型简化测试。看看取消掉一些模块后性能有没有影响。根据奥卡姆剃刀法则,简单和复杂的方法能达到一样的效果,那么简单的方法更可靠。从而确定研究模型中所提出的一些结构是否有效而设计的实验。类比生物里的,控制变量法。

过程

RPN

RPN通过添加一些额外的卷积层,同时完成了region bbox回归,和目标score。RPN是一种FCN,全连接网络。
输入:任意尺寸的图片
输出:一组region,及其object score
这里写图片描述
虚线以上得到了feature maps,虚线下面则属于RPN。
对ZF网络而言,将获取51*39*256维的feature maps,通过3*3的卷积核处理(加padding),每次处理,当前window都会生成一个256的低维特征(51*39*256的256)。其将会在稍后被送给两个兄弟全连接层,box回归层和box分类层。
这里写图片描述
RPN这个mini网络是在每个窗口进行的,所以其在feature maps上共享权值。这个结构也自然是由n*n的卷积层实现的,其后的是两个兄弟1*1卷积层。

anchor

需要注意的是,每个window并不一定只有一个proposal。这里将会根据(8,16,32)和(0.5,1,2)的不同大小和比率,尝试预测多个region proposal,这里由k表示,由上k=9。k个proposal不只是原图的region,特征则是feature maps的k个256-d的feature。其输入cls_score得到2k个得分(属于类别的,不属于类别的概率),输入reg得到4k个位置。
所以总共的anchor数大约是 51*39*9个。
这些anchor会经过删减,与原图的ground truth的IoU小于阈值的将不会参与训练。
这时候,剩余的框是IoU能够参加训练的region,但其中仍然有许多重复度较高的region。为了减少冗余,应用NMS算法,NMS算法根据他们得cls_score得分将重复度高的region一一合并。
NMS算法并不会损伤最终的检测精度,反而能大量减少proposal的数量。
然后对剩余的anchor,选取前N个(train:N=2000,test:N=300)anchor,送入后面的Roi层。

训练方法

为了实现训练RPN和FRCN共享卷积层,而不是学习两个分开的网络,有如下训练方法:

轮换训练

先训练RPN,把RPN输出的region作为FRCN的输入,其结果经过FRCN的调整后,再初始化RPN。这个过程是迭代的,也是本篇论文采用的方法。

近似联合训练

这种方法,RPN和FRCN在训练过程中合为一体。每次SGD迭代过程中,RPN计算生成的region,对于下游的FRCN来说,就像是固定的,提前计算好的一样。反向传播的过程和往常类似,前面共享的卷积层,其调整权值的信号同时来自于RPN和FRCN的损失函数。这种方法容易实现,但其忽略了RPN所返回的bbox坐标,这也是网络response的内容,但并不会在反向传播中得到体现,所以本方法被称为近似联合训练。
本方法在代码中得到了实现,其训练时间可以比轮换训练提高50%的效率,而不会损失精度。

联合训练

RPN预测出的region是Roi层的输入,反向传播的过程应当把其坐标也囊括在内,这也是联合训练所做的内容。

4步走

  1. 训练一个RPN网络,其由ImageNet预训练模型初始化。
  2. 训练一个FRCN网络,其由ImageNet预训练模型初始化,且与RPN独立,当前这两个网络不共享卷积层。
  3. 用检测网络初始化RPN,但在这里固定共享的卷积层,只微调RPN。现在这两个网络共享卷积层。
  4. 保持共享的卷积层固定,只微调FRCN,这里两个网络共享同样的卷积层。

问题

如何处理多尺度问题

两种方法。一,基于图片/特征金字塔:图片经过放缩,分别计算feature maps,这种方法很有效,但也很耗时。二,在feature maps上使用多尺度的滑动窗口,这可以看做filter金字塔。第二种方法通常和第一种结合使用。
本文使用的是多尺度anchor。

如何处理边界交叉的anchor

在训练中,对边界交叉的anchor,并不会做出贡献,否则会降低准确度。

结论/技巧

  1. 对特征提取部分,准确度可能会随着一个更小的stride进一步提升。
  2. 提出的region proposal越少,越能减小全连接层的时间消耗。
  3. RPN proposal排名靠前的region越能体现其准确度。
  4. cls_score表征ranked proposal的准确度。
  5. bbox的scale,ratios对结果精度并不是特别重要。

猜你喜欢

转载自blog.csdn.net/san_junipero/article/details/81034400