在RCNN与Fast RCNN之后,它们的作者Ross又推出了“Faster RCNN”,进一步提升了速度与准确率,并在2015年的coco等多个竞赛中夺魁。
算法步骤
首先回顾下Fast RCNN的步骤:
——在图像上使用Selective Search生成1k~2k个候选区域。
——将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。
——将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。
而下面是Faster RCNN的步骤
——将图像输入网络得到相应的特征图。
——使用RPN生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵。
——将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。
对比来看,可以发现Faster RCNN相比较Fast RCNN的区别在于候选区域的生成方法,Fast RCNN继承自RCNN,使用的依旧是传统的机器学习的SS算法,而Faster RCNN使用的则是RPN,那么下面就将重点介绍RPN
RPN
RPN,全称:RegionProposal Network,可翻译成区域生成网络 ,是Faster RCNN的核心。
上面是原论文中有观RPN的图像说明。从下到上的步骤如下:
首先在已经生成的特征图(conv feature map)上使用滑动窗口(sliding window),得到一个一维向量作为中间层(intermediate layer),图片中输出的维度(256-d)由所使用的卷积网络确定。接着我们将intermediate layer连接全连接层得到了目标概率(2k scores)和边界框回归参数(4k coordinates)。
anchor boxes
当我们在特征图上选取了一点后,我们会在对应位置的原图像上生成K个anchor boxes,k在原论文中给出的数字为9,3种比例的anchor(1:1、1:2、2:1)*3种不同的面积( 12 8 2 , 25 6 2 , 51 2 2 128^2,256^2,512^2 1282,2562,5122),共计9种。
RPN所生成的2k个目标概率和4k个边界框回归参数与k个anchor boxes刚好是相互对应的。
目标概率以两个为一组表示这个anchor是背景与不是背景的概率。
回归参数以4个为一组,表示anchor修正的偏移量,使修正后的anchor能更准确的框出目标。
对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略掉跨越边界的anchor以后,剩下约6k个anchor。将这6k个anchor调整成6k个候选框,对于RPN生成的候选框之间还存在大量重叠,基于候选框的cls得分,采用非极大值抑制,把IoU设为0.7来筛选候选框,这样每张图片只剩2k个候选框。
正样本与负样本
在训练的过程中,会挑选正负样本进行训练,用于训练RPN网络的正负样本,在在所有的anchor的基础上进行筛选,而用于之后的Fast RCNN网络训练的候选框则是在挑选的2k个候选框上筛选。论文中在用于训练Fast RCNN的样本数量大概为256,正负比(有目标:背景)为1:1。筛选的标准为proposals(候选框)与ground truth(真实边界框)的iou。
RPN损失函数
RPN本身是神经网络,所有其也有相应的损失函数,公式如下:
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(\lbrace p_{i} \rbrace, \lbrace t_{i} \rbrace )=\cfrac{1}{N_{cls}} \sum\limits_{i} L_{cls}(p_{i},p_{i}^*)+\lambda\cfrac{1}{N_{reg}} \sum\limits_{i}p_{i}^* L_{reg}(t_{i},t_{i}^*) L({ pi},{ ti})=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,t