计算机视觉——FASTER RCNN

计算机视觉——FASTER RCNN

全文参考:https://www.cnblogs.com/wangyong/p/8513563.html
本文介绍基于 VGG16的FASTER RCNN,FASTER RCNN虽然是老掉牙的网络结构,但是是yolo等网络结构的基础结构,还是很有必要掌握的。

1、模型作用

FASTER RCNN结构做的是“目标检测任务”。
问题:首先你要思考,我们做目标检测任务的输入输出是什么?

输入:一张图片
输出:图片中检测对象的位置、以及相对应的类别

可见,FASTER RCNN不是单任务模型,有两个任务:
1、既有目标位置的检测,(算出那个矩形框)
2、还有处理目标类别的分类任务。就是对一张图片中不同大小的框做分类。

2、整体框架

在这里插入图片描述
先来看一下整体的网络结构,知道每一层是用来干什么的,然后在了解每一层具体的作用机制:

1. Conv layers骨干网络:
骨干网络通过使用一组基础的卷积网络结构对输入图像image,进行图像特征的抽取,得到feature maps特征图谱。

2. RPN(Region Proposal Networks):
Region Proposal Network (RPN)网络实际分为2条支线,上面一条支线通过softmax来分类anchors获得前景foreground和背景background(检测目标是foreground),下面一条支线用于计算anchors的边框偏量,以获得精确的proposals。而最后的proposal层则负责综合foreground anchors和偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

3. Roi Pooling:
上一层RPN你得到的检测框proposals的大小是不一样的,该层利用RPN生成的proposals和VGG16最后一层得到的feature map,得到固定大小的proposal feature map,进入到后面可利用全连接操作来进行目标识别和定位

4. Classifier:
在RoIPooling Layer之后,就是Faster R-CNN的分类器和RoI边框再修正训练。分类器主要是分这个提取的RoI具体是什么类别(人,车,马等),一共C+1类(包含一类背景)。RoI边框修正和RPN中的anchor边框修正原理一样,同样也是SmoothL1 Loss,值得注意的是,RoI边框修正也是对于非背景的RoI进行修正,对于类别标签为背景的RoI,则不进行RoI边框修正的参数训练。

3、网络结构

在这里插入图片描述
逐层分析网络结构:

1. Conv layers
Faster RCNN首先是支持输入任意大小的图片的,比如上图中输入的PQ,进入网络之前对图片进行了规整化尺度的设定,如可设定图像短边不超过600,图像长边不超过1000,我们可以假定 M * N=1000 * 600(如果图片少于该尺寸,可以边缘补0,即图像会有黑色边缘
在这里插入图片描述
经过Conv layers,图片大小变成(M/16) * (N/16),即:60 * 40(1000/16≈60,600/16≈40);则,Feature Map就是60
40*512-d(注:VGG16是512-d,ZF是256-d),表示特征图的大小为60 * 40,数量为512

2. RPN(Region Proposal Networks)
在这里插入图片描述
Feature Map进入RPN层,首先要做两件事(如上图):
1、经过一层3x3的卷积,进一步集中特征信息。(kernel_size=(3,3),padding=3,stride=1)这样卷积之后特征图大小依然为:60x 40,数量512。
2、做两个全卷积,将输入兵分两路(kernel_size=(1,1),padding=0,stride=1)

  • 上面一条支线通过softmax来分类anchors获得前景foreground和背景background(检测目标是foreground)
  • 下面一条支线用于计算anchors的边框偏量,以获得精确的proposals。

如下图所示:
在这里插入图片描述

接着,我们在具体看一下两条路是怎么做的。对于上边提到的两条路,我们首先要对特征图生成多个Anchors,有了这个Anchors才能分别走两条路。
问题1、Anchors的生成规则:
这里先看以上上边卷积层的计算,经过卷积,现在的特征图的大小类似等于原图想的 1/16,也就是说,特征图Feature Map上的一个点,对应映射原图上 16 x 16大小的区域作为感受野,我们以一个点为例,把这个点定义为base_anchor。然后对这个base_anchor在对应的原图中进行放缩,得到9个不同大小的矩形框,作为候选框anchor box
问题2、这9个Anchors是怎么来的?
论文中有两组参数:
一组是面积的放缩比:[8,16,32]
一组是长宽比:[0.5,1,2]
就是说,同一个点在原图进行映射的时候,要对上边提到的16 x 16的感受野做三种放缩比的变换,这个时候你就得到了三种面积的Anchors,如下图:
在这里插入图片描述

然后在对每一种Anchors做长宽比变换,就得到3x3=9个Anchors,如下图:
在这里插入图片描述
问题3、一共有多少Anchor box?
特征图大小为60 x 40,所以会一共生成60 x 40 x 9=21600个Anchor box

现在有了位置预选框了对吧,也有了每一个预选框对应的中心点坐标和缩放比(就是上边生成的四维的向量),但是你现在要考虑现在可是21600个,太多了,肯定有一些是没用的(没有前景,超边界),要过滤掉,除了过滤,还有一些虽然框里缺失有目标,但是不是那么的完美,就要对位置坐初步的调整,这就是RPN要做的是事儿。

问题4、怎么过滤的

  • 去除掉超过1000*600这原图的边界的anchor box
  • 如果anchor box与ground truth的IoU值最大,标记为正样本,label=1
  • 如果anchor box与ground truth的IoU>0.7,标记为正样本,label=1
  • 如果anchor box与ground truth的IoU<0.3,标记为负样本,label=0
  • 剩下的既不是正样本也不是负样本,不用于最终训练,label=-1

补充:
在这里插入图片描述

问题5、怎么来修正调整Anchor box的
上边我是不是得到了生成的留下的Anchor box,然后加入真实的ground truth,计算预测的与真实值之间的偏移量

ground truth:标定的框也对应一个中心点位置坐标x*,y和宽高w,h*
anchor box: 中心点位置坐标x_a,y_a和宽高w_a,h_a
所以,偏移量:
△x=(x*-x_a)/w_a
△y=(y*-y_a)/h_a
△w=log(w*/w_a)
△h=log(h*/h_a)

通过预测值与真实值与差异来进行学习,从而是RPN网络中的权重能够学习到预测box的能力
问题6、怎么训练RPN?
在产生数据的售后就已经产生了预测狂。也对预测框分了正负样本。利用正负样本和正样本之间的偏移量进行训练
在训练RPN时,一个Mini-batch是由一幅图像中任意选取的256个proposal组成的,其中正负样本的比例为1:1。如果正样本不足128,则多用一些负样本以满足有256个Proposal可以用于训练,反之亦然

问题7、proposal作什么的?
经过训练,我们已经有一组偏移量△x, △y, △w, △h。预测的时候,重新生成60409个anchor box,然后累加上训练好的△x, △y, △w, △h,从而得到了相较于之前更加准确的预测框region proposal,进一步对预测框进行越界剔除和使用nms非最大值抑制,剔除掉重叠的框;比如,设定IoU为0.7的阈值,即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如300个);这样,进入到下一层ROI Pooling时region proposal大约只有300个。

问题8、什么是NMS?
在这里插入图片描述
假设岁这和图片进检测,经过RPN前边的操作,我们还是会对一个目标编辑出多个框,现在要对同一个目标保留最好的框
如上图所示,一共有6个识别为人的框,每一个框有一个置信率。
现在需要消除多余的:

  • 按置信率排序: 0.95, 0.9, 0.9, 0.8, 0.7, 0.7
  • 取最大0.95的框为一个物体框
  • 剩余5个框中,去掉与0.95框重叠率IoU大于0.6(可以另行设置),则保留0.9, 0.8, 0.7三个框
  • 重复上面的步骤,直到没有框了,0.9为一个框
  • 选出来的为: 0.95, 0.9

3. ROI Pooling
输入的是RPN层产生的region proposal(假定有300个region proposal box)和VGG16最后一层产生的特征图(6040 512-d),遍历每个region proposal,将其坐标值缩小16倍,这样就可以将在原图(1000600)基础上产生的region proposal映射到6040的特征图上,从而将在feature map上确定一个区域(定义为RB)。

在feature map上确定的区域RB*,根据参数pooled_w:7,pooled_h:7,将这个RB区域划分为77,即49个相同大小的小区域,对于每个小区域,使用max pooling方式从中选取最大的像素点作为输出,这样,就形成了一个7*7的feature map
细节可查看:https://www.cnblogs.com/wangyong/p/8523814.html

以此,参照上述方法,300个region proposal遍历完后,会产生很多个7*7大小的feature map,故而输出的数组是:[300,512,7,7],作为下一层的全连接的输入

4. 全连接层
经过roi pooling层之后,batch_size=300, proposal feature map的大小是7*7,512-d,对特征图进行全连接,参照下图,最后同样利用Softmax Loss和L1 Loss完成分类和定位

在这里插入图片描述
通过full connect层与softmax计算每个region proposal具体属于哪个类别(如人,马,车等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个region proposal的位置偏移量bbox_pred,用于回归获得更加精确的目标检测框

即从PoI Pooling获取到7x7大小的proposal feature maps后,通过全连接主要做了:

  • 通过全连接和softmax对region proposals进行具体类别的分类
  • 再次对region proposals进行bounding box regression,获取更高精度的rectangle box
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

企鹅家的北极熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值