1.概述
Faster R-CNN实际上就是RPN网络+Fast-RCNN,使用RPN网络代替了上一代Fast-RCNN的Selective Search生成候选框的方法,使得整个检测过程彻头彻尾使用了神经网络进行构建。
2.RPN 网络
RPN 网络是该篇文章的一个精髓,使用该步骤也大大缩减了生成候选区域所需要的时间。 如图2-1所示:左半边就是RPN网络,右半边就是Fast-RCNN网络。
图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的位置回归,即横坐标、纵坐标、宽和高的修正量。
图2-2:RPN网络简述图
在刚刚上面提到了anchor box, 实际上anchor box也很好理解,就是从feature map还原到原始图中对应的位置,生成多个长宽高比例的长方形。例如feature 的最左上角的值就对应的原图中最左上上角的格子中的内容,以这个格子的中心,生成9个长方形。所以刚刚讲的 18维的向量就是这9个长方形属于前景还是背景的概率,36维的向量就是这9个长方形的位置偏移。 值得注意的是,如果识别出这个anchor box是背景,那么其实在对其进行位置修正是没有意义的。因此只有当识别出它是前景的时候,才会再去训练位置修正的网络。 这一点是通过损失函数实现的。
图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
|