Faster R-CNN论文阅读与理解

Fast R-CNN的工作是建立在region proposal之上的。但在Fast R-CNN的实现过程中,由于region proposal生成耗时过长,让Fast-R-CNN未能达到实时检测系统的水平。因此在Faster-RCNN中,使用RPN( Region Proposal Network )来生成region proposal,RPN能与detection network共享卷积层(用于生成features map)。并且整个网络的都能在GPU上运行,大大降低了运行时间。RPN的训练时end-to-end的模式,RPN的输入为features map,输出region proposals用于Fast R-CNN的detection。总的来说Faster-RCNN就是RPN+Fast-RCNN,RPN告诉Fast-RCNN"看哪里"。

Faster R-CNN论文

RPN就是在生成feature map的卷积层后再添加几层卷积层,用于同时生成region bound和各个bound中可能拥有object的scores,因此RPN可以实现end-to-end的训练方式。RPN能够生成不同尺寸和比例的region proposals,其中引入anchor boxes来作为region bound的参考,anchor boxes也是拥有不同的尺寸和比例的。为了将Fast R-CNN和RPNs融合,在训练过程中使用交替训练的方式来训练RPN和Fast R-CNN这两个网络。

Faster-RCNN原理图:

首先通过共享的conv layers得到feature maps,然后通过RPN生成region proposals,再使用region proposals在feature maps上框出对应的区域,并通过ROI pooling得到尺寸相同的region proposals,将这些尺寸相同的region proposals输入Fast-RCNN的后几层中,用于detection的训练。

RPN细节:

RPN可以输入任意size的图像,输出一系列的长方形object proposals,并且每一个proposals都带有一个objectness score。在Faster -RCNN论文的实验过程中,尝试了使用ZF net和VGG-16两种网络结构(用于共享生成feature map)。为了生成region proposals,在共享网络最后一层生成的feature map上使用一个小的网络进行滑窗操作,网络大小为3*3。经过滑窗操作后feature map变为256通道(ZF)。生成的这个256通道feature map作为两个不同的fully-connected layers的输入。其中一个用于box-regression(reg),另一个用于box-classification (cls)。需要注意到,网络的感受野是非常大的(171 and 228 pixels for ZF and VGG)。由于滑窗操作与卷积操作等效,因此RPN的实现也是用一个3*3的卷积层后接两个不同的1*1卷积层。

Anchors

在每一个滑窗的位置,可以同时预测k个proposals。所以reg层会输出4k个坐标值。cls层会输出2k个值,表示proposals中拥有object的几率和不含object的几率。这k个proposals有k个参考的boxes,称为anchors。每一个anchor以滑窗的中心为中心。论文中的anchors有3种不同的尺寸和3种不同的长宽比例,也就是说在每个滑窗位置,都有9个anchors。对于一个W*H大小的feature map,也就有W*H*k个anchors。这种多尺寸及比例的anchors概念的设计是共享feature的关键所在。

扫描二维码关注公众号,回复: 3172553 查看本文章

Loss Funciton

为了训练RPN,我们为每一个anchor分配了一个二值化的标签。

正标签的anchors:

1.对于一个ground-truth box,与其IOU值最大的anchor

2.与ground-truth box IOU值超过0.7的anchor

需要注意到的是,每一个单独的ground-truth box可能给多个anchors分配正标签。

负标签的anchors:

1.如果一个anchor与所有ground-truth box的IOU值都小于0.3,那么这个anchors就被标记为负anchor

既不是正也不是负的anchors对训练没有影响

在以上定义的前提下,优化的损失函数定义如下:

其中i是anchors的标签,pi是第i个ancbor中预测拥有object的概率。如果anchor是正,那么p_{i}^{^{*}}=1,如果anchor是负,那么p_{i}^{^{*}}=0。

t_{i}是一个4维向量,代表预测的bounding box的坐标,t_{i}^{*}是与正anchor相关联的ground-truth box的坐标。

分类误差是object类和非object类之间的log loss。

regression误差用表示,R是robust损失函数(smooth L1)。这一项误差的系数p_{i}^{^{*}}表示regression误差只计算与正anchor相关联的坐标误差,负anchor相关联的坐标误差对总体误差没有影响。

这两项误差项用N_{cls}N_{reg}这两个系数来实现归一化,并且在第二项误差之前增加了一个权重系数\lambda。在论文实验的过程中,cls误差项用mini-batch的size来归一化,也就是N_{cls}=256,reg误差项的数量使用anchors的数量来归一化,N_{reg}大约在2400左右。

\lambda的值默认为10,因此cls项和reg项拥有近似相同的权重。实验中显示,\lambda对最终结果的影响不大,并且归一化也不是必须的,可以省略掉。

对于reg loss项,采用以下4个坐标参数:

y代表预测的box的中心坐标,w,h代表预测box的宽度和高度。x,x_{a},x^{^{*}}分别与predicted box,anchor box,ground-truth box对应(y,w,h同理)。这可以看作是一个anchor box到其附件的ground-truth box的regression。

训练

在训练过程中,可能训练结果会偏向于负的样本。原因是负的样本占的比例更大(一张图片中的更多部分往往是背景图像)。因此我们在一张图像上随机选取256个anchors位置用于计算,正标签的anchors和负标签的anchors比例最高可达1:1。如果正标签的数量小于128,那么就用负标签来填充。

所有新添加的层都用零均值,标准差为0.01的高斯分布来初始化。其余所有的层都由经过ImageNet分类训练的模型来初始化。Finetune了ZF net的所有层和VGG conv3_1以上的层来节约内存。训练集使用的是PASCAL VOC数据集,optimizer使用的是momentum,其参数设置为0.9。并使用了weight decay,其参数设置为0.0005。

RPN和Fast R-CNN之间的Features共享

detection network采用Fast R-CNN,接下来要做的工作是如何让由RPN和Fast R-CNN组成的网络进行学习。在Faster R-CNN论文中提出了四种训练方案,最终采用的是交替训练的方法:

4步交替训练法:

1.按之前的描述训练RPN,网络是由ImageNet 分类训练得到的预训练模型进行fine-tune,按照end-to-end的方式进行训练。

2.使用第一步训练好的RPN来生成proposals,用于FAST-RCNN的训练,dection network的网络也由ImageNet 分类训练得到的模型fine-tune

3.用检测网络模型(Fast-RCNN)来初始化RPN的训练,但只训练RPN特有的层,共享的卷积层固定。

4.最后用第3步训练好的模型来finetune Fast R-CNN的训练,同时保持共享的卷积层固定,只训练Fast-RCNN特有的层

通过以上的训练,两个网络共享卷积层,并且合并成一个统一的网络

相似的交替训练可以进行多次,但论文中的实验表明,这对最终的效果提升不大。

具体细节

论文中训练和测试都是在单一尺度的图像上进行的,对图像进行缩放,使其短边为600像素。在re-scaled images上,ZF net和VGG net上最后一层卷积层的总步长都为16。在未经过resize处理的PASCAL数据集上(图片尺寸大约为500*375),经过卷积处理的最终步长大约为10。尽管步长很大,但结果依旧不错。如果使用更小的步长的话能达到更好的结果。

anchors使用3中尺寸 128*128,256*256,512*512,3中长宽比例分别为1:1,1:2和2:1。当然,论文中也尝试过其他的超参数组合,按照实验结果最终选择了这一组超参数。下图是学习得到的每一个anchor对应的proposal的平均尺寸(ZF net):

跨过图像边界的anchors需要进行处理,在训练过程中忽略所有跨过图像边界的anchors。对于一张典型的1000*600大小的图片,大约会有20000(60*40*9)个anchors。忽略跨越边界的anchors,最终一张图片上剩下的anchors大约在6000个左右。

在测试过程中,所有的anchors都用于检测训练,但这可能会生成跨越图像边界的bounding boxes,这时我们需要对boxes进行修剪,使其与图像边界对齐。

一些RPN生成的proposals regions可能互相之间有很高的重叠部分,为了减少冗余。论文中采用了非极大值抑制(non-maximum  suppression)的方式来去除掉部分冗余的anchors。给非极大值移植法设定IOU的阈值为0.7,经过这一步筛选后,剩下的proposal regions大约在2000左右。实验结果显示,NMS对最终的检测结果没有影响,同时还能降低proposals的数量,加快程序运行速度。在NMS后,使用score排名在top-N的regions进行训练(N在论文中设定为2000),但在测试时尝试了其他不同的N值。最终显示,测试时N值在300左右是比较合适的。

猜你喜欢

转载自blog.csdn.net/weixin_40446651/article/details/82261765