文章目录
本篇博客将要解析的论文是Faster R-CNN,论文地址为: https://arxiv.org/abs/1506.01497
一、介绍
本文是Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun等人于2016年发表的一篇论文,提出了Faster R-CNN,进一步改进了Fast R-CNN模型,创造性地提出了Region Proposal Nerwork,将卷积神经网络引入目标检测领域的Region Proposal过程,在性能和速度上都获得了较大提升,成为了目标检测领域一个很强的BaseLine。
二、拟解决的关键问题
目前性能较好的目标检测算法大都基于区域推荐来完成。SPPNet以及Fast R-CNN通过共享特征的方法,极大地提升了目标检测算法中检测器的运行速度和性能,但仍然受限于区域推荐的运行速度。
目前目标检测算法中,区域推荐算法主要采用的有Selective Search以及EdgeBoxes等传统方法。
- Selective Search:基于人工设计的低级特征,采用贪心算法,不断合并超像素以获取推荐区域;相较于Fast R-CNN检测网络来说,速度太慢,在CPU上一张图片大致需要2s。
- EdgeBoxes目前能在推荐质量和速度之间取得最好的平衡,但也仍然需要0.2s每张图片。
并且区域推荐算法主要是在CPU上实现,这也限制了其运行速度。
为了提升区域推荐算法的运行速度,一个比较直接的想法是用GPU去实现区域推荐算法,但这种方法忽略了后续的检测器,也失去了与检测器共享计算,进一步提升运行速度的机会。
为了解决这个问题,Faster R-CNN提出了Region Proposal Network(RPN),RPN与检测网络共享特征,从而可以在不增加太多计算量的情况下,更快更好地获取推荐区域。
RPN是一个全卷积网络,在每个位置同时预测边界框以及目标的得分。同时为了使得生成的推荐区域,具有多种尺寸和比例,RPN提出了Anchor Box的概念。将Anchor Box作为参考,RPN可以产生多个尺寸、多个比例的推荐区域。
RPN可以看做是一种Attention机制,通过RPN得到的推荐区域,让后续检测器重点对这些区域进行检测,以提高模型的检测性能。
综上,可知:Faster R-CNN = Region Proposal Network + Fast R-CNN。
三、Faster R-CNN结构
Faster R-CNN包含两个模块:RPN模块和Fast R-CNN检测器。下图为Faster R-CNN的结构图。
1. Region Proposal Network
- RPN输入:一张任意大小的图片
- RPN输出:一系列的矩形推荐框以及每个框对应的分数值(是否属于目标或者是背景)
为了提高运行速度,RPN被设计得与Fast R-CNN共享一组卷积层。
RPN是一个全卷积的小网络,以滑窗的方式在最后一个共享卷积层输出的feature map上滑动,以产生一系列的推荐框。
- 小型网络输入:一个在feature map上尺寸为 n ∗ n n * n n∗n的空间框( n = 3 n=3 n=3,由于共享卷积层的最后的feature map的感受野已经足够大,因此,空间框的大小可稍小一些)
- 小型网络输出:一个低维度的特征向量
该特征向量会送入到两个同级的全连接层(一个框回归层(reg)以及一个框分类层(cls))中;由于该小型网络采用的是滑窗的方式,因此,这两个全连接层在各个滑窗位置上是共享的。
完整的RPN可以采用一个 n ∗ n n*n n∗n的卷积层和两个 1 ∗ 1 1*1 1∗1的卷积层来实现。
(1) Anchors
在每个滑窗位置,同时预测多个推荐框,每个位置所能预测的框的数目最大为 k k k.
- 对于reg层,有 4 k 4k 4k个输出,对应 k k k个框的坐标信息
- 对于cls层,有 2 k 2k 2k个输出,对应每个推荐框是否包含目标的概率
这里的
k
个
k个
k个推荐框,即为所谓的Anchors。
Anchor就是以滑动窗的中心为中心,具有不同尺度和比例的一系列参考框,本文使用3种尺度、3种比例,也就是
k
=
3
∗
3
k = 3 * 3
k=3∗3,对于一个大小为
W
∗
H
W * H
W∗H的feature map来说,共有
W
H
k
WHk
WHk个anchors
(2) Loss Function
为了训练RPN,需要对每个anchor分配一个二元类别标签(是否为目标):
positive label:
- 与一个ground-truth box具有最高的IOU
- 与某个ground-truth box的IOU超过0.7
negative label:
- 非positive且与任意ground-truth box的IOU都小于0.3
除此之外的anchor均抛弃;跨边界的anchor也全部忽略
(3) Training RPN
“image-centric” sampling strategy(此处可以参考我的另一篇博客Fast R-CNN)
- 一张图片上采样256个Anchors
- positive:negative大致为1:1,若positive不够128,则用negative补充
2. RPN与Fast R-CNN间共享特征
训练策略:
- 交替训练
- 首先训练RPN
- 用RPN产生的推荐框去训练Fast R-CNN
- 经过Fast R-CNN微调后的网络再产生RPN
- 循环上述过程
- 近似联合训练
- 将RPN和Fast R-CNN合并为一个网络
- 在每次迭代过程中,训练Fast R-CNN时,将RPN产生的推荐框视作是固定的、提前计算产生的
- 但产生的框实际也是网络的响应,所以这是种近似(emmm,这个部分没太懂)
- 非近似联合训练
- ROI Warping
- 4步交替训练
- 首先训练RPN
- 用RPN产生的推荐框去训练Fast R-CNN,此时不共享卷积层
- 用训练后的Fast R-CNN的卷积层去初始化RPN,并固定共享卷积层,仅微调RPN独有的层,此时RPN与Fast R-CNN共享卷积层
- 固定共享卷积层,仅微调Fast R-CNN独有的层
四、总结
Faster R-CNN完成了Fast R-CNN未完成的任务,将区域推荐也纳入到了一个完整的可训练的简单流程中,RPN的提出也为后续众多目标检测算法所采纳。但个人认为,RPN实际上相当于是用特征图对检测框进行回归,个人感觉非常的“玄学”,不及传统区域推荐算法可解释性强,但其速度较快且性能也好,也就一直被采纳下来。
最后附上一些优秀参考博客。
五、参考文献
[1] https://zhuanlan.zhihu.com/p/31426458
[2] https://blog.csdn.net/v_JULY_v/article/details/80170182
[3] http://noahsnail.com/2018/01/03/2018-01-03-Faster%20R-CNN%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E8%8B%B1%E6%96%87%E5%AF%B9%E7%85%A7/