1.Faster R-CNN简单来看是两种网络的组合,RPN网络和Fast R-CNN网络,在使用时需要对这两个网络分步进行训练(训练方式后有介绍)。
上图是Faster R-CNN的架构图,可以发现我们相对于之前的Fast R-CNN方法,使用RPN网络取代之前离线的SS方法生成候选区域,并通过对PRN网络训练的方式让其生成量少质优的候选区域框,数量约为300个,相比之前的方式有更高的precision和更高的recall。
需要注意的是这里RPN网络和Fast R-CNN网络在预测时是使用同一套卷积层,在训练时候是对同一套卷积层分步骤进行网络训练的。并且对于RPN有解释说RPN可以引导Fast R-CNN关注区域。
2.Faster R-CNN跟之前Fast R-CNN相比主要是引入了RPN网络,所以接下来我们核心讲解下RPN网络的结构和训练,之后再整体进行网络训练和效果的说明。
RPN网络是一种全卷积网络,下面的图中左边部分是RPN网络的结构,是全卷积的结构,网络包含 卷积层(256个3*3卷积核)+relu+左右两个小网络层(分别是2k个1*1卷积核和4k个1*1卷积核框,k是anchor数量),核心使用滑动窗口+anchor机制的思想(类似于fast rcnn的selective search生成proposals的作用,但是这里不是明显的)
我们针对网络结构从底向上进行解释。
[1]最底层的输入是经过前面的卷积层得到的多通道的特征图,我们会在这个特征图上再通过网络进行候选框的生成,其方式是使用一个滑动窗口(比如3*3,滑动窗口大小是跟下一层卷积核大小是对应的,下一层有256个3*3的卷积核),初始滑窗中心点是最边上,以这个滑动窗口的中心点看齐,我们可以认为对应这个中心点能生成k=9个anchor box,这样每个anchor box都被认为是一个潜在的候选窗口,那么对于一个W*H的特征图,每个点对应k个anchor box,则可知对应这张特征图共有W*H*k个anchor box与之对应。
对于每个点,生成的9个anchor box是形状各异的,共有三种类型的尺度scale(128、256、512)和3种框的宽高比(1:1、1:2、2:1)。
[2]对于每个滑动窗口产生的9个anchor box在以后的步骤中,知道其存在即可,并不是非常明显存在的,但后面会用到。 对于每个滑动窗口框定的区域我们使用256个3*3的卷积核进行卷积计算,可以得知每个滑动窗口下得到厚度为256、尺寸为1*1的特征图,也就是一个长度为256的向量。
[3]对于上步得到的向量,我们进一步经过两层卷积生成两种特征向量,分别是使用2k个1*1的卷积核生成长度为2k的向量,其意义表示对应到指定含义滑动窗口下的k个anchor box,这k个中每个box是否是有效的,是前景还是背景(object 或者non-objec),使用4k个1*1的 卷积核来生成 长度为 4k的向量,分别预测出提交框proposal的r、c、w、h,也就是需要调整的方式,左移右移等。
对于clc layer的预测会产生两个参数,预测为前景的概率pa和pb,进行训练时需要的监督信息为Y=0,1表示这个区域是否是ground truth,会使用softmax损失函数 进行这部分的训练,对于reg layer预测得到四个参数x、y、w、h,需要监督心事anchor的区域坐标和ground truth的区域坐标,根据正确的坐标位置来决定怎么进行调整,这里会使用smooth L1损失函数方式进行网络的训练,总体下来训练时会将两个损失加在一起,协同使用Minni-batch的方式进行统一的网络训练。
至此通过以上三步,我们可以利用每个滑动窗口的8个anchor box通过两个预测任务进行RPN网络的训练,通过计算anchor box的分类判断和区域矫正来决定生成最后高质量大约300个Region。
3.以上介绍了RPN网络的训练过程,有点绕脑,不过也算能明白,整体下来网络是进行一种分步训练的形式(卷积层共享)。 下面介绍的相当清晰,是一种前两步无卷积共享,后两步有卷积共享的形式,可以发现RPN尽量使用Fast R-CNN的参数,Fast R-CNN则用公用参数,和多使用RPN提供的proposal进行训练。是一种端到端的同时学习RPN网络和分类网络的形式,但要注意分类网络的梯度并不会向RPN回传。
4.进行实验发现,使用卷积共享的方式相比不共享有更加好的精度效果。
使用RPN的方法相对于其他使用SS等提取候选框的方法有更好的召回率,并且速度有提升。