基于之前两篇博客对RCNN和Fast-RCNN的介绍,现在来理解Faster-RCNN就会觉着很简单。因为Faster-RCNN就是在Faste-RCNN的基础上,做了一些改进。
一、整体结构
整个网络由两个模块组成,第一个是RPN(Region Proposal Network),代替之前用传统方法(如Selective Search)进行Region Proposal的工作;另外一个是Fast-RCNN检测器,两者共用卷积神经网络提取的特征。(在我看来,分为三个模块更好理解:第一个是卷积网络,用来提取特征;第二个是RPN,利用卷积神经网络提取的特征生成proposal region;第三个是分类和回归,同样利用卷积网络提取出的特征进行分类和边框回归)。
二、RPN(Region Proposal Network)
1.RPN结构介绍
RPN的作用就是代替SS来进行Region Proposal工作,那么它是如何做到的呢?我们来看具体的网络吧,以VGG16特征提取为例。
对于用VGG16进行特征提取来说,首先输入任意尺寸的图片PXQ,先缩放成固定尺寸MXN,经过VGG16(最后一层为CONV_13+RELU)后变成,然后在每个点处用一个
的卷积核来卷积(+RELU),得到的整张特征图尺寸还是
。
再往后,网络分成两个分支:第一个分支(上面的卷积)用于分类是前景还是背景;第二个分支(下面的
卷积)用于边框坐标预测。至于数字18和36是什么意思?我们接着来看。
在做边框定位之前,作者提出了一个Anchor的概念,于给出最初的边框信息(当然,这个边框是非常不准的)。Anchor的意思就是,在的特征图的每个点(锚点)处,做九个框(三个尺度,每个尺度有三个框,长宽比例分别为1:2,1:1,2:1)。
PS:这种做法的好处是,具有平移不变性。即使图像中的目标平移了,也没有任何影响,因为在不同的锚点处,其前向传输是一样的,并且到目前为止,还全部都是卷积层,卷积层本身就具有平移不变特性。
也就是说,每个锚点处有9个框。在上面的分支,对框进行分类的时候,要分成两类(前景还是背景),因此就要对应2*9=18个得分;在下面的分支中,要对九个框的坐标进行回归,也就是4*9=36个量。在每个锚点处,原特征向量应该是256-D的,经过的卷积核卷积之后,可以变成18-D的分类得分向量,36-D的边框坐标向量同理。
也就是说,对于每个锚点,Proposal Layer 输入了三个信息:第一个是softmax分类器得出的18个前景背景得分;第二个是九个框的偏移量与缩放量(对于边框回归不理解的,可以参考RCNN中的介绍);第三个是im_info,其实记录的是原图(PXQ)以及缩放成网络输入的图(MXN)时的缩放量。
2. 损失函数:
stage1: rpn_loss
RPN的损失函数由两部分组成,一部分是分类误差,另一部分是框回归误差。我们首先解释一下
,是指的第
个
是为正样本(前景,则
)还是负样本(背景则
),在两种情况下认为某个
是正样本,第一种情况是与某个真实框的具有最大的IoU,另一种情况是与每个真实框的IoU都大于0.7。当
与任何一个真实框的IoU都小于0.3的情况下,则认为是背景。
①分类为前景和背景,采用交叉熵(或log损失函数):,其中,
分别代表这个
为正样本或负样本的分类。
② where
,这里在求和的时候,加了一个真实类别因子
,只让真实样本为正样本时才对框回归起作用。
而和
的定义如下:
三、RoI Pooling
RoI Pooling 的介绍,因为在Fast-RCNN中已经介绍,这里不再赘述。
四、最终分类与边框回归
与Fast-RCNN一致。