Faster R-CNN 原理详解

文章目录

  • 1.概述
  • 2.RPN 网络
  • 参考文章

1.概述

Faster R-CNN实际上就是RPN网络+Fast-RCNN,使用RPN网络代替了上一代Fast-RCNN的Selective Search生成候选框的方法,使得整个检测过程彻头彻尾使用了神经网络进行构建。

2.RPN 网络

RPN 网络是该篇文章的一个精髓,使用该步骤也大大缩减了生成候选区域所需要的时间。
如图2-1所示:左半边就是RPN网络,右半边就是Fast-RCNN网络。
Faster R-CNN 原理详解_第1张图片

图2-1 RPN 网络

下面我们简化一下网络,便于理解Faster-RCNN的原理
我们假设通过VGG-Net生成的feature map的大小是4×4,那么通过该feature map使用3×3和1×1的卷积核,生成一个1×18的向量和1×36的向量。这个1×18实际上代表了9个anchor box的属于前景和背景的概率,这个1×36实际上是9个anchor box的位置回归,即横坐标、纵坐标、宽和高的修正量。
Faster R-CNN 原理详解_第2张图片

图2-2:RPN网络简述图

在刚刚上面提到了anchor box, 实际上anchor box也很好理解,就是从feature map还原到原始图中对应的位置,生成多个长宽高比例的长方形。例如feature 的最左上角的值就对应的原图中最左上上角的格子中的内容,以这个格子的中心,生成9个长方形。所以刚刚讲的 18维的向量就是这9个长方形属于前景还是背景的概率,36维的向量就是这9个长方形的位置偏移。
值得注意的是,如果识别出这个anchor box是背景,那么其实在对其进行位置修正是没有意义的。因此只有当识别出它是前景的时候,才会再去训练位置修正的网络。 这一点是通过损失函数实现的。

Faster R-CNN 原理详解_第3张图片

图2-3:anchor box
因此通过上面的讲解,通过网络的计算的预测值就可以算出,那么只有有真实值,就可以计算出损失,从而进行反向传播了。那么真实值如何计算呢?

首先,对于任何一个anchor box ,如果知道它的真实值呢?
我们在训练集标注了目标的位置,成为Ground Truth, 那么这个anchor box 与所有的Ground Truth 遍历一遍求IoU值,如果大于某个阈值,那么我们就认为这个anchor box的真实值属于前景,所以这样子我们就得到了1×18真实值向量。
进而如何得到目标框的修正的真实值呢。
首先如果该anchor box 是背景,那么框的位置回归毫无意义,无需知道它的真实值。
其次,如果该anchor box是前景,那么框的真实位置可以通过Groud Truth知道。

因此通过上面的推断,目标框的修正的真实值也有了。
有了预测值和真实值RPN网络就可以train 起来了。

参考文章

[1]Faster R-CNN论文:https://arxiv.org/pdf/1506.01497.pdf
[2]参考实现地址:https://github.com/zgjsxx/faster-rcnn-pytorch

你可能感兴趣的:(cnn,深度学习,神经网络)