由RCNN到FAST RCNN一个很重要的进步是实现了多任务的训练,但是仍然使用Selective Search算法来获得ROI,而FASTER RCNN就是把获得ROI的步骤使用一个深度网络RPN来实现。一个FASTER RCNN可以看作是一个RPN + FAST RCNN的组合,两者通过共享CONV LAYERS组合在一起。

 

RPN网络

一张图片先经过CONV LAYERS得到feature map,图片的大小是任意的。然后,使用一个小的滑动网络,它与feature map的一个n*n的小窗口全连接。在论文中,n会取值3(但不知道是否指的是n*n个像素的窗口),虽然小窗口不大,但实际上由于feature map经过pooling和convolution,映射回输入图像会有一个很大的感受野。通过这个滑动的小网络提取ROI并映射到一个低纬度的特征向量,用于回归和分类(两个1*1的convolution layer)。

【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks_卷积

对于滑动的n*n的窗口,在每个位置都会预测k个regional proposal,称为anchor。每个anchor都以窗口为中心,它们有不同的尺度以及宽高比,论文中去k = 9,即3种尺度与3种宽高比。映射得到的低维特征向量,输入到两个box回归层与softmax(二分类,即logistic,用于预测窗口中有或者没有物体的概率)。例如一个VGGnet,它映射到的低维特征为512维,由于k = 9,而且回归层和分类层都是1*1的,因此输出层的参数有512 * (4 + 2) * 9个。如果feature map的大小为W * H,则总共会有W * H * k个anchors。

 

(n*n应该是一个卷积层,而VGG最后会有512个通道,每个anchor都会映射到低维的特征,而这低维的特征应该与通道数相关。。。。猜测, 额,这里的映射到低维的特征与anchor的关系确实有点模糊……)

 

论文中实现的不同尺度以及宽高比的anchor,而不需要多尺度的image或者filter。

 

RPN的损失函数

学习一个RPN的网络也是一个多任务的学习过程,是一个通过参数迁移后对网络进行fine tune的有监督过程,需要标示正类与负类。正例样本有两种(1)与一个ground truth的IOU最高的anchor(2)与任意一个ground truth的IOU高于0.7的anchor。于是,类似于FAST RCNN的定义,LOSS函数为:

 【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks_宽高_02

其中【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks_权值_03为1如果anchor的正样例,否则为0。【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks_权值_04表示anchor里是一个object的概率。而【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks_卷积_05即是FAST RCNN中smooth函数的定义。 【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks_宽高_06是一个平衡因子,具体设置可以参考论文,它与Ncls和Nreg有关。

 

训练RPN

RPN的训练使用的是BP算法,权值更新使用随机梯度下降法实现。Mini_batch的抽样从单一的图片中选择anchor,尽量是的正例和负例的比是1:1。RPN权值的初始使用高斯分布初始化。

 

 

RPN与FAST RCNN的共享

【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks_正例_07

由上图可以看出,RPN与FAST RCNN共享conv layer层以及feature map。论文中训练这个网络提供了几种方法:

(1)交替训练。首先训练RPN,得到proposal之后去训练FAST RCNN。得到的NETWORK又去训练RPN。迭代交替

(2)把两者近似的融合训练。如上图,中间层输出proposal去训练FAST RCNN。后向传播时,对于共享层像平常一样更新,把来自RPN的loss和FAST RCNN的loss结合。而对于proposal 的box坐标预测的梯度,直接忽略,因而得到一个近似的解。但实际上,proposal层的网络权值也是会更新的。

论文中采取一种新的不同于上述的方法:

(1)用imagenet模型初始化,独立训练一个RPN网络。

(2)仍然使用imagenet初始化,利用第一步得到的proposal作为输入训练一个FAST RCNN网络,此时参数完全不共享。

(3)用(2)得到的参数初始化RPN的网络,把RPN与FAST RCNN共享的卷积层的学习率设为0,仅更新RPN特有的网络层,重新训练,此时网络共享共有的卷积层。

(4)固定共享的层,加入FAST RCNN,fine tune它特有的网络。

 

细节:

对于每个anchor的三种scale为128*128,256*256,512*512,,三种宽高比1:1,1:2,2:1。

对于一些RPN的proposal,采用非极大值抑制的办法选择过滤一部分,减少冗余。