3. Fast RCNN

227 阅读3分钟

Fast RCNN 的主要创新点:将最后一个卷积层的SSP Layer改成ROI Pooling Layer;另外提出了多任务损失函数(Multi-task Loss),将边框回归直接加入到CNN网络中训练,同时包含了候选区域分类损失和位置回归损失。 图片.png

算法流程

一、 SS:一张图片生成1K~2K个候选区域(使用Selective Search方法)。

二、 提取特征:将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。

图片.png

图2-1 候选框投影得到特征矩阵

划分正负样本:在训练Fast R-CNN时,如果数据中全部都是正样本,那么即使这个框明明框住的是背景,但网络仍会认为这个被框住的背景是有用的,是一个前景,这时网络肯定会出问题。所以数据要分为正样本和负样本

在原论文中,对于每一张图片,从2000个候选框中采集64个候选框。这64个候选框,一部分框的是正样本,一部分框的是负样本。那么正样本是如何定义的呢?

只要候选框与真实框(GT)的IoU大于0.5,则认定为正样本,反之认定为负样本

三、区域归一化:将每个特征矩阵通过ROI Pooling层缩放7×7大小的特征图。

图片.png

图2-3 RoI Pooling层下采样缩放特征矩阵尺寸

ROI Pooling的实现过程:

将特征矩阵不用care尺寸然后划分7×7等份,通过RoI Pooling层,每一块下采样,最终得到7×7大小的特征图。

图2-4其实是一个经过特征提取的特征图,本身可视化出来也是很抽象的,这里只是为了方便理解,使用了RGB图像。

图片.png

图2-3 RoI Pooling层下采样缩放特征矩阵尺寸

四、分类和回归:经过两个维度都为4096的全连接层,再经过维度为21维的全连接层(分类)和84维的全连接层(回归),这两个层看图是并联的。最后接上两个损失层(分类是softmax,回归是smoothL1)。

SVD:由于一张图像约产生2000个ROI,将近一半多的时间用在全连接层计算,可以用SVD对全连接层进行变换来提高运算速度。

分类器: 这21个概率是经过softmax输出的,因此和为1。

图片.png

图2-4 分类器输出N+1个类别概率

边界框回归器:某个物体对应的预测的每个类别都有边界框以及边界框参数。

图片.png

图2-5 边界框回归器的(N+1)×4个回归参数

那么边界框回归参数该如何使用呢?

图片.png

图2-6 边界框回归器回归参数的矫正公式

损失函数

图片.png

图2-7 Fast RCNN损失函数

  • 分类损失参数:p,up,u
  • 分类损失: Lcls(p,u)=ulogpu=logpuL_{cls}(p,u)=-ulogp_u=-logp_u

对于真实标签u=1u=1,和softmax运算出来的最高概率pup_u进行多分类交叉熵损失计算。

  • 边界框回归损失参数:分类中预测最高概率的对应类别uu,它的回归参数(txu,tyu,twu,thu)(t^u_x,t^u_y,t^u_w,t^u_h)。真实目标的边界框回归参数(vx,vu,vw,vh)(v_x,v_u,v_w,v_h),这个viv_i是通过图1-5反推P得到的。
  • 边界框回归损失: Lloc(tu,v)=ΣsmoothL1(tiuvi)L_{loc}(t^u,v)=Σsmooth_{L_1}(t^u_i-v_i)

下标为x,y,w,hx,y,w,htt和相应的vv分别相减,再经smooth函数,最后相加。

图片.png

  • λλ是平衡两项损失的系数。
  • [uu>1]是艾弗森括号,满足则1,不满足则0.