FasterRCNN

算法步骤

  • 使用深度神经网络来提取特征,得到特征图
  • 使用RPN网络生成候选框,将RPN网络生成的候选框投影到特征图上获得相应的特征矩阵
  • 使用ROI池化缩放到7×7大小的特征图,展平之后通过一系列全连接层得到预测结果(和FastRCNN一样)

FasterRCNN_第1张图片

FasterRCNN可以说是Region Proposal Network(RPN)和FastRCNN和结合。

RPN结构

FasterRCNN_第2张图片
使用3×3的滑动窗口来生成anchor(在特征图上,滑动窗口的中心就是anchor的中心),实现使用的是3×3的卷积,其中padding=1,stride=1,也就是不改变维度,同时卷积的中心能够遍历特征图的所有位置。卷积核的个数为256,也就是256-d。然后再通过两个1×1的卷积来得到2k个score(包含不包含物体的概率,实现中可以只使用其中一个,也就是k个score)和4k个coordinate(每一个anchor包含x,y,w,h4个值)。

将特征图映射回原图时,计算两个的宽高比作为步距,那么用步距乘以特征图的坐标即可得到原图的坐标。

锚框

锚框使用三种尺度:128、256和512,比例有1:1、1:2和2:1三种,于是总共可以得到9个锚框。
FasterRCNN_第3张图片
对于一张输入图片,使用上面的方法得到很多anchor之后,首先忽略掉超出边界的anchor,然后基于候选框的类别概率,使用非极大值抑制,IoU设置为0.7。

训练

训练RPN网络时,从众多anchor中随机采样256个,包含了一半的正样本和一半的负样本(1:1)。如果正或者负样本少于一半,用另一种填充。

如果判断是否为正样本?当使用下面第二个条件找不到anchor的时候,采用第一个条件:
(1) 和ground-truth有最大的IoU
(2) 和ground-truth的IoU高于0.7

如何判断是否为负样本?和任何ground-truth的IoU都小于0.3。

IoU处于0.3到0.7之间的直接舍弃。

RPN损失函数

FasterRCNN_第4张图片
其中, p i p_i pi为anchor包含物体的概率, p i ∗ p_i^* pi为1或者0(正样本为1), t i t_i ti表示预测为第i个anchor的边界框回归参数, t i ∗ t_i^* ti为第i个anchor的ground truth, N c l s N_cls Ncls为一个小批量的样本数量256, N r e g N_reg Nreg表示anchor位置的个数。

两个损失函数的形式和fast RCNN一致。

整个Faster RCNN训练时,可以直接采用RPN loss和Fast-RCNN loss联合训练,两个加起来作为损失然后反向传播。

你可能感兴趣的:(深度学习,计算机视觉,深度学习,目标检测)