目标检测篇-Faster-RCNN论文精读

1、Faster RCNN网络结构

① 首先缩放至固定大小MxN。
② 放入共享Conv layers
③ RPN计算proposals
④ Roi Pooling层则利用proposals从feature maps中提取proposal features
⑤ 送入后续全连接和softmax网络作classification。

上面一条用softmax分类anchors得到positive以及negative的概率, 下面一条计算anchors的bounding box regression偏移量 两个分支的结果作为Proposal的输入

Proposal layer: 依照位置参数对所有的positive anchor做位置调整 按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(如6000)个anchors 对超出图像边界的positive anchors做裁剪 之后输出proposal = [x1, y1, x2, y2],对应的是M * N图像尺寸

     

 因为Proposal对应为M*N尺度,首先使用spatial_scale将其映射回(M/16)*(N/16)大小的feature map尺度 再将每个proposal对应的feature map区域水平分为pooled_w * pooled_h的网格 对网格每一份做max pooling处理 这样处理后,即使大小不同的proposal输出结果都为pooled_w * pooled_h固定大小

最后通过全连接层的softmax对proposals进行分类 再次对proposals进行bounding box regression,获取更高精度的bbox

2、RPN
RPN包括如下几步:
1. 生成anchor box    
2. 判断anchor里面的物体是前景还是背景    
3. 回归学习anchor boxes和ground truth的标注的位置差,来精确定位物体

注:anchor: backbone网络最后一层卷积层feature map上的元素点。anchor box是以每个anchor为中心而生成的一系列boxes。一个anchor对应的框的具体数量是由scales和aspect ratio两个参数控制。

假设每个anchor生成了k个box,每个anchor box会输入到2个卷积网络,分别是cls layer和reg layer cls layer是前景判断任务,最后会输出每个anchor boxes的前景分数和背景分数。假设anchor boxes数量是9,经过cls layer的1*1*18卷积输出后就是H * W * 18的feature map,每个anchor的维度是18 = 2 * 9,就代表了每个anchor作为前景和背景的分数

 reg layer输出的是boxes与GT的(x,y,w,h)的offsets,(x, y)为中心点坐标。 经过reg layer的1 * 1 * 36的卷积核输出的是H * W * 36的feature map,每个anchor的维度36 = 4 * 9,代表了(x,y,w,h)的offsets。anchor boxes会根据模型预测输出来的offset来调整尺寸,作为RPN的输出。

3、ROI(Region of Interest)

RoI pooling首先应用在fast RCNN里面。

举例: input size:512 * 512 * 3 feature map size : 16 * 16 * 512 这里的缩小因子factor = 32 后续的RoI在缩小的时候,都需要除以32,得到缩小后的尺寸

如何从feature map上提取RoI?将原图上的RoI映射到VGG16输出的feature map上即可

原图上的RoI都有其原始坐标和尺寸 红框size是145*200,左上角坐标(192,296),factor = 32 将原图上的RoI映射到feature map上,其尺寸需要缩小32倍:      width: 200 / 32 = 6.25,  height: 145 / 32 = 4.53       x: 296 / 32 = 9.25, height: 192 / 32 = 6

注:在feature map上的坐标值量化(quantization of coordinates)就是将输入从一个大的值集(如实数)限制为离散的值集(如整数)的过程。

为什么需要量化?是因为我们不能直接在这个RoI上应用RoI pooling操作。有些cell没有与网格线对齐,要么多了一点,要么少了一点。解决措施就是量化操作,即向上取整。

4、RoI pooling

将原图上的RoI映射到feature map上之后,可以开始pooling操作。

为什么使用pooling:在RoI pooling层后,有固定尺寸的全连接层。由于成百上千的RoI有不同的尺寸,因而需要将它们pooling到相同的尺寸,如3 * 3 * 512 在上例中计算了量化后的RoI,size = 4 * 6 * 512。这里4无法被3整除,故需要再次量化(即去掉小数点)。 4 / 3 = 1.33,6/3 = 2,向下取整后,得到1 * 2的向量表示。

 5、损失函数

使用Smooth L1 Loss

对边框的预测是一个回归问题。通常可以选择平方损失函数(L2损失)f(x) = x2,但是L2损失对比较大的误差的惩罚很高。本文采用的是稍微缓和一点的绝对损失函数(L1损失),f(x) = |x|,它随着误差线性增长,而不是平方增长。但是这个函数在0处是不可导的,故有可能会影响收敛。解决办法是采用分段函数,在0附近使用平方函数使得它更加平滑,也称为Smooth L1 loss。它通过参数𝒷来控制平滑区域。在faster-cnn里,参数取3。

Faster-RCNN损失函数:由RPN和fast rcnn两部分组成,两部分损失都包括分类损失(cls loss)和回归损失(bbox regression loss)。

其中,RPN分类损失:RPN网络产生的anchor只分为前景和背景两类,其中前景标签为1,背景标签为0。在RPN训练过程中,会选择256个anchor,256即公式中的Ncls。 

 分类损失为经典的二分类交叉熵损失,对每一个anchor计算对数损失,然后除以anchor数量Ncls

Fast RCNN分类损失:RPN的分类损失是二分类的交叉熵损失,而Fast RCNN是多分类的交叉熵损失。在Fast RCNN训练的时候会选出128个rois,即Ncls   = 128。

RPN和Fast RCNN的回归损失:ti = {tx, ty, tw, th}是一个向量,在RPN训练阶段表示anchor( Fast RCNN 阶段表示RoIs)的预测的偏移量。 t*i表示GT,即实际的偏移量。

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值