当前位置:   article > 正文

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

fast cnn论文
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。它通过参数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/114053?site
推荐阅读
相关标签