Faster R-CNN核心知识讲解

Faster R-CNN

Faster R-CNN,是由 R-CNN,Fast R-CNN,一步一步优化过来的。

R-CNN理论

对于 R-CNN算法流程可分为4个步骤

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
  • 对每个候选区域,使用深度网络提取特征,这个提特征只进行到全连接层。
  • 特征送入每一类的SVM 分类器,判别是否属于该类
  • 使用回归器精细修正候选框位置

在这个过程中, SVM和 回归器都需要单独训练得到,与我们的网络是分开的过程。并且你需要了解

  • 非极大值抑制剔除重叠建议框 怎么实现的
  • 回归器是怎么 修正我们的候选框的。

image.png
image.png

Fast R-CNN理论

Fast R-CNN算法流程可分为3个步骤:

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
  • 图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI pooling层统一缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

相较于 R-CNN,只进行一次的 卷积网络提取特征,一定程度上加快了速度。需要注意的是:在经过ROI pooling层缩放之后,Fast R-CNN使用了两条并行的输出路,分别是softmax 和 bbox regressor边界框回归器。也就是将我们的 分类和 边界框修正也放入到网络中了。最后通过计算分类损失 和 边界框回归损失来更新权重。

image.png
image.png
image.png

对于分类器来说:我们需要N+1个类别,因为需要包括背景这一种类别,和我们关注的前景中20种类别。这个特征向量中的值就是 其中的一个候选框对应每一种类别的概率。

image.png

因为我们的边界框回归器 是为了计算,我们的候选框应该如何移动来靠近 ground-truth boxes,所以需要四个回归权重参数:表示对候选框当前位置,中心坐标以及宽和长如何加权操作,来靠近 GT boxes。经过我们网络的预测,我们可以预测出对于每一个候选边界框,应该以多大的权重来移动到预测的位置。

至于如何根据我们预测的 回归权重参数计算出 终点位置,可根据下图。
图中绿色的框是 GT boxes的位置,也就是我们自己标的正确的位置,黄色框是原始的边界框位置,红色框表示我们通过模型预测的位置。

image.png

前面的分类器和 边界框回归器的作用就是预测,在预测时,直接拿到预测结果即可。在训练和验证时需要进行下面的损失计算步骤。
最后一步就是 计算联合损失,包括:分类损失和边界框回归损失。需要注意的是:u表示某一个候选边框真实的类别标签。

image.png

对于分类损失,使用用交叉熵损失来做就行了。

image.png
image.png

对于边界框回归损失,有专门的计算方式,见下图。
这个艾佛森括号代表,只有当前的候选框为前景时才计算 边界框回归损失。

image.png

Faster R-CNN理论

其实就是 RPN + Fast R-CNN,把提取候选框这一过程使用 RPN来替换,并且放入到网络中。所以核心就是理解 RPN 怎么实现的就可以了。

image.png

  1. 首先就是确定一个 3x3的滑动窗口,在提取的特征图上进行滑动。
  2. 对于每一次滑动,确定好滑动窗口的中心点对应原始图片上的中心点,在此中心点上计算出k个anchor boxes。
  3. 之后将每一个anchor box 展平,输入到 cls layer 层和 reg layer层,对于cls layer层,我们需要2k个得分值,因为对于每一个anchor box,需要判断它是前景和后景的概率(注意:不是具体的类别概率,因为此时我们是在RPN网络内部,计算候选框的过程,不需要计算它是什么类别)。而reg layer层需要4k个数值,因为边界框回归需要4个回归参数。

image.png
image.png
论文中提到:根据经验所得,使用三种尺度和三种比例 在 每个位置上 来生成anchor,也就是一个中心点生成9个 anchor boxes
image.png

  • 需要明确一个概念:anchor boxes 不是 候选框,候选框需要经过 RPN网络学习之后调整得到的。anchor boxes只是在RPN内部的叫法。而候选框是应用到整个网络中的。
  • 假设我们输入一张图片,经过滑动窗口的滑动,我们得到了大量的 anchor boxes,但是这些 anchor中存在 跨域边界的情况,需要忽略掉这些 anchor。
  • 对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。

image.png
我们拿到这些 过滤掉 边界的anchor boxes之后,RPN网络也需要进行 联合误差的计算。
由于RPN网络的目的是计算出 候选框,所以和Fast-CNN网络的目的不同,所以计算的损失公式也不同。
image.png
对于分类损失。我们计算的是当前anchor是前景(正样本),背景(负样本)的概率。
因为此时只有前景和背景两种分类,所以有两种实现方式,一种是 多分类问题的计算损失,一种是 二分类问题的计算损失。

image.png

先看多分类问题的计算损失怎么计算(多分类的话,需要每一种类别的概率都需要写出来)。根据多分类的公式可以看出,负样本是为0,只计算正样本。最后再对所有的anchor boxes的损失求和就是 分类损失。
image.png
对于使用二分类问题来计算损失时,cls layer层只预测k个 得分,因为二分类要么概率指向这种类别,要么指向另一种类别。根据二分类的计算公式可得下面内容。最后再求和得出 分类损失。
image.png
分类损失终于计算完了,我们来看 RPN中的 边界框回归损失怎么计算。
其实和 Fast-CNN模型计算边界框回归损失的方法一样,只不过对于负样本,我们取0,不进行损失计算。最后再求和,就是整体的RPN 的边界框回归损失。
image.png
经过RPN网络,我们得到了候选框,然后将候选框映射到 特征图中得到对应的特征矩阵,后续就是Fast R-CNN的过程了,计算联合损失
image.png
对于训练部分:pytorch官网的代码用的是联合训练的方法。论文中是分别训练RPN 和 Fast R-CNN
image.png

FPN理论

FPN就是池化金字塔结构。
主要就是上采样 + 融合
image.png
image.png

参考资料:

Faster-RCNN网络讲解
Faster-RCNN源码解析(Pytorch)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值