faster rcnn 学习记录

Faster rcnn 详解:

参考至: https://blog.csdn.net/weixin_44791964/article/details/105739918

              物体检测丨Faster R-CNN详解 - vincent1997 - 博客园

第一部分 图像预处理:

  对输入的不同尺寸大小的图片,原文中是将长边缩放至1000,短边缩放至600,为了方便起见,也可统一resize成600x600(16的倍数)的图片输入backbone中。

第二部分 主干网络提取公用特征图:

Faster-RCNN可以采用多种的主干特征提取网络,常用的有VGGResnet等等,本文以Resnet网络为例子。

Resnet50含有两个基本的残差块,分别名为Conv BlockIdentity Block

上图为Conv  Block块,通常是由1x1,3x3,1x3的卷积核组成,利用它来改变网络的维度,通道数,输入和输出不一样,因此短接线需要搭配一个卷积来改变通道数和尺寸。

上图为Identity Block,输入和输出维度相同,因此短接线可以直接连接,并且可以使用它进行堆叠,加深网络结构。

以输入的图片为600x600为例,shape变化如下:

Conv残差块中,第一个1x1卷积核,步长为2改变尺寸,最后改变通道数

Conv残差块改变通道数

3x3的卷积核

最后一层的输出就是公用特征层,38x38x1024,一共经过四次下采样

第三部分 RPN网络的构建:

①机械化的产生Anchors

该层首先生成九种不同比例和纵横比的Anchors,然后在一副与输入图像大小但是空白且均匀间隔(本例中为16,因为输入为600x600,变成38x38,步长为16)的网格点平移它们来复制这些Anchors,来产生38x38x9Anchors,如下图所示:

三种不同面积(例如64²,128²,256²,),在面积相同的基础上,改变横纵比0.5,1,2 9anchors

这些anchor boxes中的一些将包围前景对象,但大多数不会,RPN网络的目标是学习识别哪些框是好框即可能包含前景对象,并产生目标回归系数,将回归系数应用于anchors上,转换为更加精密的anchors

Region Proposal Network

利用之前生成的公共特征层38x38x1024,首先经过一次3x3卷积核的特征整合,下降通道数得到的结果,分别1x1卷积核,将通道数转变成9x2(代表一个网格点上的9个anchor对应是前景还是背景的概率)和9x4(代表一个网格点上的9个anchor的边界框回归系数),因此第一步产生的Anchors的数量与region proposal network产生的信息一一对应。

解释一下这里产生的边界框回归系数:

对于边界框,我们通常使用(x,y,w,h)来表示中心坐标点和宽高,如下图绿色G是我们需要的Ground Truth,红色P是我们原始的输入框(即Anchors),我们需要寻找一种关系得到与G跟接近的蓝色G。

论文中采用这种方法:其中Px ,Py,Pw,Ph 代表原始框的坐标,G\代表是蓝色框的坐标

因此其中的(dx dy dw dh)即我们所需要预测的边界框回归系数,但需要注意的是只有当AnchorsGround Truth比较接近时(线性问题),我们才能将其作为训练样本训练我们的线性回归模型,否则会导致训练的回归模型不合理。所以在训练过程中,我们会有相关操作来选择适宜的anchors进行训练。

③训练RPN网络

首先我们要选择出用于训练RPN网络的有希望的anchors来计算RPN Loss。要从一组anchor boxes中执行此操作,RPN层必须学会将anchor box分类为背景或前景,并计算回归系数以修改前景anchor box的位置,宽度和高度,使其成为更好的前景框(更贴近前景对象)。由分类损失和回归损失相加而成:

分类损失:

cross_entropypredicted_classactual_class)所有的anchors都要进行。

bounding boxes回归损失:

所有前景anchor的回归损失求和。为背景anchor执行此操作没有意义,因为背景anchor没有关联的ground truth。使用的是smoothL1函数,这里σ3,四个目标回归系数输入其中  

因此,要计算损失,我们需要计算以下数值:

1、类标签   2GT与前景anchors之间的回归系数

首先我们先计算所有anchorsGTiou来选择好的前景框。根据以下两种类型来选择:

1、对于GT,所有与GT具有最大的IOUanchor

2、与GT的最大iou超过阈值(0.7)anchors

(1类型的出现是担心所有anchors没有超过阈值的,避免提供0 anchor)

类似地,重叠小于阈值(0.3)的框被标记为背景框。并非所有不是前景框的框都标记为背景。既不是前景也不是背景的框被标记为不关心。这些框不包括在RPN损失的计算中。现在我们已经知道了哪些anchors是前景框了,因此可以计算出GT与这些前景框之间回归系数的差距,当做label,与RPN网络预测出的结果进行回归损失训练。

④对Anchors进行修正,输出ROIS(下一层分类网络的输入框)

通过刚刚RPN网络预测出的边界框回归系数(38x38x9,4),修正我们机械化产生的Anchors38x38x9,4),产生较为准确的边界框,并修剪掉那些超出图像的边界框尺寸。

利用另一个预测出的前景和背景概率(38x38x9,2),只选出前景概率进行排名,选出前2000个修正后的边界框,并使用前景概率的分数经过NMS方法挑选出300ROIs送入分类网络。

第四部分 分类层网络的构建:

①计算分类层LOSS

RPN损失类似,分类层损失有两个组成部分分类损失和bounding box回归损失

RPN层和分类层之间的关键区别在于,虽然RPN层只处理两个类前景和背景,但分类层处理我们网络用于训练分类的所有对象类(加上背景)。

分类损失是以实际对象类别和预测类别得分为参数的交叉熵损失。

bounding boxes回归损失也与RPN类似地计算,网络计算每个对象类的回归系数。目标回归系数显然仅适用于正确的类,该类是与给定anchor具有最大重叠的ground truthbounding boxes的对象类。

因此,需要以下数量来计算分类层损失:

  1. 预测类标签和bounding box回归系数(这些是分类网络的输出)
  2. 每个anchor的类标签
  3. 目标bounding boxes的回归系数

首先我们要从刚刚得到的300ROIS中选择有希望的ROI(I这些有希望的ROI将用于从head layer产生的feature map执行ROI pooling并传递到网络的其余部分,其计算预测的类别得分和框回归系数)我们通过ROISGTIOU来进行分成前景和背景,阈值大于0.5的为前景,0.1-0.5之间的为背景。此次的前景和背景总数设置为128个。

得到前景和背景的128rois后,与GT计算得到相应目标回归系数,作为回归Losslabel,同时得到类别label,前景为正确类别的标签,背景的标签为0

之后将128rois与前面的公用特征层一起放入ROI Pooling层中,作用是将128rois(此处的坐标是相对于600x600的,因此还需要进行除以16步长)后的坐标在38x38的特征层上截取出相应的区域,并且将每个rois框的长宽(采用maxpooling)固定成14x14的大小,通道数不变。

Roi pooling图形解释:ROI Pooling原理及实现_Elag的专栏-CSDN博客_roipooling

②分类网络

将得到的(128,1024 ,14,14)的在公用特征图上截取的特征,输入分类网络中,最后输出为(128,2048,1,1),faltten成(128,2048),输入全连接层进行类别的预测(128num_class)和四个回归目标系数的预测(128num_class x4.即可将这些参数放入分类Loss,与前面得到的label进行计算损失,并反向更新权重,训练网络。

训练完成后,得到预测的四个回归目标系数结果,与原先的在600x600上的128rois坐标组合变换(解码),便可得到最终的边界框。为了显示最终的分类结果,我们应用另一轮NMS并将目标检测阈值应用于类别分数。然后得到满足检测阈值的ROI的所有变换的bounding box

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值