概述

Fast R-CNN是对R-CNN和SPP-Net的改进,一方面借助SPP的思想,使得骨干网络只需要对原图做一次特征提取就好了,大大减少时间开销;另一方面将bbox的回归器和分类器都整合到了网络当中,简化了训练流程,也减少了特征存储的开销;还有一方面就是采用了新的训练策略,解决了SPP-Net中难以更新SPP模块之前的卷积层参数的问题。

细节

检测流程

流程概述:

  • 在原图上进行选择性搜索,获得2000个候选框
  • 原图进行缩放,通过网络进行特征提取,得到共享特征图,将每个候选框都映射到特征图中,得到候选框特征
  • 将候选框特征通过ROI池化层得到统一尺寸(如7x7)的候选框特征,对其进行展平并经过一系列全连接层之后,送入并行的softmax分类器和bbox回归器(bbox回归可以参考这里)。
    在这里插入图片描述

补充1:
补充2:ROI池化相当于是SPP的一个特例。SPP是对特征图进行多级池化,如将特征图划分为 4 ∗ 4 , 2 ∗ 2 , 1 ∗ 1 4*4,2*2,1*1 44,22,11的网格,每个网格内进行最大池化并得到一个特征图,当然,通道数保持不变。ROI的话,只有一级池化,论文中说的话划分为 7 ∗ 7 7*7 77的网格。
补充3:softmax分类器输出21个类别的条件类别概率(20个voc的类别+1个背景类),bbox回归器输出n+1个类别的回归参数,也就是输出 ( n + 1 ) ∗ 4 (n+1)*4 (n+1)4个参数

训练模型

预训练模型的处理:1、将最后一个池化层改成ROI池化;2、将原模型最后的全连接层和softmax改成两个并行的;3、网络除了接受图片之外,还会接受这些图片对应的候选框。

损失函数

损失函数:这里的参数 p , u , t u , v p,u,t^{u},v p,u,tu,v指的分别是预测的类别、真实的类别、对于这个真实类别的bbox回归参数的预测 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)、真实的bbox回归参数的预测 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)。第一项是softmax损失,第二项是bbox回归参数的正则化项, λ \lambda λ是权重因子,而 [ u ≥ 1 ] [u\geq1] [u1]表示只有u>=1返回1,否则返回0,也就意味着只有真实标签为1,才会有这一项边界框损失。
在这里插入图片描述
第一项作者说的是 − l o g ( p u ) -log (p_{u}) log(pu),其中u是真实标签。其实就是多分类的损失的化简, L c l s ( p , u ) = − ∑ i = 1 n u i ∗ l o g ( p i ) L_{cls}(p,u)=-\sum_{i=1}^nu_{i}*log(p_{i}) Lcls(p,u)=i=1nuilog(pi),因为多分类的标签是独热编码,也就是一个1剩下全是0,所以只剩下一项了。

第二项是smooth L1函数,相关介绍可以看链接
在这里插入图片描述
正负样本:当候选框与任一GT box的IOU大于0.5就是前景,与所有的GT box计算IOU都属于 [ 0.1 , 0.5 ] [0.1,0.5] [0.1,0.5]的就是负样本。前者对应的标记 u = 1 u=1 u=1,后者对应的标记 u = 0 u=0 u=0。而那些IoU<0.1的候选框不参与最开始的训练。训练好一个模型后,使用这些IoU<0.1的候选框进行难例挖掘以进一步调优训练。

采样策略

为什么SPP-Net中难以更新SPP模块之前的卷积层参数?采样N张图片,每张图片随机采样候选框,当然总共的采样个数要和我们设定的Mini-batch size相同。也就是,这些候选框可以来自若干张图片,另外我们知道,候选框对应的感受野是比较大的,也就是这两点,导致反向传播非常的困难。

当前策略:有了一个规则,不再是随机采样。采样N张图片,每张图片采样 R / N R/N R/N个候选框,这个R就是我们需要的候选框的个数。实际上,减小N的数量可以相对减小计算量,但是如果我们取N=1的话,也就是所有候选框都来自同一个原始图像,各个候选框的相关度会过高,不利于模型收敛。论文中的例子是,我们设置Mini-batch size=128,也就是需要128个候选框,就采样两张图片比较合适一些,每张图片采用64个,那么这64个候选框就可以共享同一张图片的特征了。在这64个候选框中,25%是前景作为正样本,75%是背景负样本。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐