Faster R-CNN论文详读(Faster R-CNN Towards Real-Time Object Detection with Region Proposal Networks)

概述

        因为候选区域的计算时间的优化已陷入瓶颈,本文提出了一种新的RPN(region proposal network)通过与检测网络共享全图的卷积特征,甚至可以实现零成本产生候选区域。

现有方法的不足之处

        Selective Search方法基于工程化的低层次特征,贪婪的合并超像素,每张图像耗时2s左右

        Edges Box方法兼顾速度和质量,每张图像耗时0.2s左右

        使用GPU替代CPU进行计算虽然大幅降低了计算时间,但是忽略了底层的检测网络,同时失去了分享计算的重要机会。

本文算法
        RPN通过与检测网络共享全图的卷积特征,甚至可以实现零成本产生候选区域。RPN是一个完整的卷积网络,在预测候选框边界坐标的同时可以对每个候选框进行客观打分。通过分享卷积特征,把Fast R-CNN 和RPN结合在一起。RPN通过进行端到端的训练,生成大量高质量的候选区域,这些候选区域可以用作Fast R-CNN 的输入。
通过在测试时共享卷积特征,每张图像耗时10ms左右

对多尺寸候选区域进行预测

两个流行的多尺度预测方法

  1. 基于图像/特征金字塔进行多尺度预测,图像被resize,且计算多个尺度的特征图,经常被使用,但是非常耗时
  2. 在特征图上使用多尺度的滑动窗口进行多尺度预测。如果用这种方法处理多尺度。可以视为滤波器金字塔进行处理。
    通常是把两种方法结合在一起使用

        本文提出的基于锚点的方法是基于锚点金字塔构建的,更具成本效益,仅依赖于单一比例的图像和特征图,并使用单一尺寸的滤波器(在特征图上滑动的微型网络)
        因为基于锚点的这一设计,可以在单尺度的图像上非常简单的计算出卷积特征。
        这种方法可以被看作是金字塔的回归reference,可以有效避免对每个比例尺或长宽比的图像进行处理,仅仅对单一尺寸输入进行处理,从而可以提升处理速度。

方法对比

其他的检测方法
        RNN通过端到端的训练CNN把候选区域分类为目标类别和背景,RNN主要是作为分类器,不能预测目标边界(除非使用边界框回归进行完善)其准确率来源于生成候选区域的模块。

        Over Feat方法使用全连接层预测单个目标的边界坐标,后来全连接层被放在卷积层后用来进行多目标类别的预测。

        Multi Box方法通过网络的最后一个全连接层生成region proposal,同时预测多个类别未知的边界框,覆盖了Over Feat的功能。这些类别位置的边界框可以被用在RCNN中。
        Multi Box方法可以被用在single crop或multi crop中,但是Multi Box方法不能在候选区域和检测网络中共享特征。

Faster R-CNN

        Faster RCNN由两部分组成,一部分是可以生成候选区域的卷积网络(RPN),另一部分是Fast R-CNN检测器。
        使用最近流行的话说RPN就是“注意力机制”,RPN告诉Fast RCNN应该看向哪里。

RPN

RPN是一个全卷积网络
        输入——任何尺寸的图像
        输出——一系列的候选目标矩形框和每个框的客观得分

        因为最终目的是把RPN和Fast RCNN结合,所以假设两个网络使用一组卷积层(如果使用VGG16进行卷积计算,则有13个共享卷积层)

        为了生成候选区域,使用一个微型网络,在最后一个共享卷积层生成的卷积特征图上滑动,把输入特征图中的n×n大小的空间窗口作为每次的输入,每个滑动窗口映射到一个低维度的特征,这个特征被放入两个滑动的全连接层:一个是边界回归层(reg)一个是边界分类层(cls)

        因为该微型网络以滑动窗口的形式运行,所以全连接层在所有的空间位置共享,该微型网络由n×n大小的卷积层和两个1×1的滑动卷积层(reg和cls)构成。

锚点 anchors——k个候选区域参数化为k个reference boxes,这些reference boxes被称为锚点anchor。

        锚点是每个滑动窗口的中心,锚点的位置与窗口的比例、长宽比有关。
在这里插入图片描述

        默认情况下使用3个scale和3个aspect ratio,所以有k=3×3=9个锚点。
对一个大小为60×40的卷积特征图,该特征图含有60×40×9≈20000个锚点

        在每个滑动窗口的位置,同时预测多个候选区域,每个位置的最多k个候选区域,所以reg层生成4k个输出(因为输出的是k个区域的坐标(x,y,w,h)分别表示候选区域的左上角坐标(x,y)和窗口的宽和高(w,h));cls层生成2k个分数(一个是该区域是目标区域的概率,一个是该区域不是目标区域的概率)。

锚点的翻转不变性——可以在目标被翻转后同样可以预测候选区域,且可以减小模型尺寸

        如果translate图像中的一个目标,对应的proposal也要translate, 同一个函数在任何位置都要能对proposal进行预测。

        Multi Box方法具有(4 + 1)×800维的全连接输出层,而在k = 9个anchor的情况下,本文的方法具有(4 + 2)×9维的卷积输出层。 在最后的结果中,本文算法的输出层具有2.8×104个参数(VGG-16中的参数数量=512×(4 + 2)×9),比具有6.1×106参数(1536×(4 + 1)×800的Multi Box方法少了两个数量级(Google Net中的Multi Box方法)。 如果考虑要素特征投影层,本文的proposal层的参数数量仍然比Multi Box少一个数量级。

损失函数

在这里插入图片描述

        i是小批量样本中锚点的序号
        pi表明序号为i的锚点,是否是目标的预测概率
        pi*为1——锚点是目标对象,为0——锚点不是目标区域
        ti是一个四元向量坐标用来定位预测的边界框(x, y, w, h)
        ti*是与ground-truth相关的正样本锚点

        Lcls分类损失是——该区域是否是目标的log函数

        Lreg(ti, ti*) = R(ti, ti*),其中R()是L1正则函数

        pi*Lreg说明回归损失仅在Pi*=1时生效
        cls层和reg层的输出由pi和ti分别组成

        使用Ncls和Nreg进行归一化 权重weight使用λ进行平衡(λ的默认值是10)
        Ncls是小批量的大小
        Nreg是锚点的个数

在这里插入图片描述

对于边界框回归的四个坐标值参数:

x, y, w, h 是边界框的中心点坐标和宽和高
x, xa, x*分别对应预测的边界框、锚点边界框、ground-truth边界框(w, y, h类似)

本文实现边界框回归与之前的方法使用的基于ROI的方法不同:
        SPPnet和Fast RCNN通过对任意大小的ROI合并的特征执行边界框回归,这些回归权重由所有大小的区域共享。

        本文算法用于回归的特征在特征图中有相同的空间大小——(3*3),为了应对不同大小的输入,设置k个边界框回归器,每个回归器负责一个比例和一个长宽比,而k个回归器之间不共享权重,锚点这样的设计,使得即使特征的大小固定仍可以预测多尺寸的边界框。

训练模型

        为了训练RPN,为每个锚点设置了一个二元类别标签来说明是否是目标,两种锚点属于正样本:1.有最高IOU值的锚点;2.IOU>=0.7的锚点。

        一般情况下第二种方法就可以分辨出正样本,但是本文使用第一种,原因是在某些情况下第二种方法或许找不到正样本。如果IOU<0.3则划分为负样本,0.7>IOU>0.3的样本对训练没有帮助。

        RPN使用反向传播和SGD进行端到端的训练,以图像为中心的取样策略训练网络:
        单一样本中的每个小批量都联系着很多的正样本和负样本锚点。这使得优化所有锚点的损失函数成为可能,但是这样可能会导致结果偏向负样本,因为负样本占主导地位。

        为了解决负样本占主导导致结果偏向负样本这个问题,在每个图像中采样256个样本,其中正样本和负样本的比例为1:1,如果正样本个数不足128个,则使用负样本进行填充。

本文的做法:

  1. 使用0均值和标准差为0.01的高斯概率分布对所有的新层进行随机初始化,共享卷积层使用预先训练好的ImageNet分类模型进行初始化。

  2. 调整ZF网络的所有层并调整了conv_3及以上的层来使得VGG-16更加节约内存。

  3. 在PASCAL VOC数据集使用0.0001的学习率在处理60k个小批量样本,0.0001处理另外20k个小批量样本。使用的momentum为0.9,权重衰减为0.0005,使用Caffe实现。

在RPN和Fast R-CNN之间共享卷积特征

为了把RPN和Fast R-CNN结合在一起,把在候选区域微调的任务和目标检测中的微调任务来回交替,同时保持候选区域的尺寸。这样可以快速收敛并通过分享卷积特征建立统一的网络。

RPN和Fast RCNN的训练是互相独立的,修改各层的方法也是不同的。

下面介绍三种方法来训练网络和共享特征:

  1. alternating training 交替训练
    先训练RPN,然后使用生成的proposal训练Fast RCNN,然后整个网络翻转,使用Fast RCNN 的结果初始化RPN。这整个过程是反复进行更迭的,本文用的就是这个算法。

  2. approximate joint training 近似联合训练
    在训练时,RPN和Fast RCNN被结合在一个网络中,每个SGD的迭代过程中,前向传播(forward)在训练Fast RCNN检测器时,生成固定尺寸的、预计算好的候选区域,反向传播(back forward)把RPN的loss和Fast RCNN 的loss 的反向传播信号结合在一起。这种算法易于实现,结果是近似的,但是比altering training减少了25%-50%的训练时间,但是忽略了候选边界坐标衍生的w,r,t同样是网络的结果,所以得到的结果是近似的。

  3. Non-approximate joint training 非近似联合训练
    RPN预测的边界框是输入的一部分,而Fast RCNN中的ROI 池化层把卷积特征和边界框作为输入,所以理论上反向传播解答器应该包含梯度w, r, t 和边框坐标。但是近似联合训练忽略了这些梯度。在这个方法中,需要使用ROI 池化层区分w,r,t和边界坐标。

使用altering training的四个步骤:

  1. 训练RPN,使用Image Net的预训练模型和端到端的微调进行初始化以生成候选区域。

  2. 使用第一步RPN训练出的候选区域作为输入,用Fast RCNN训练出一个分离的检测网络,这个网络同样使用预训练的Image Net模型进行初始化,这一步中,两个网络之间并未共享卷积层。

  3. 使用检测网络初始化RPN,但是固定共享的卷积层,只对独属于RPN的layer进行微调,这一步中,两个网络共享卷积层。

  4. 保持共享卷积层不变,指对独属于Fast RCNN中的layer进行微调。

这样的话,两个网络共享相同的卷积层,并可以作为一个统一的网络。

实现算法的一些细节部分:

1.生成候选区域和进行目标检测都是使用单一尺寸的图像,重新缩放图像,把其短边都设置为600像素。在ZF网络和VGG16中最后一个卷积层使用的步长为16。

2. 针对128*128、256*256、512*512的边框区域,我们使用3个比例的锚点,长宽比为1:1,1:2,2:1,这些超参数可以适用于所有情况。因为不需要使用图像金字塔或滤波器金字塔预测多尺寸的候选区域,所以节省了很多的运行时间。

3. 算法所允许的预测结果要大于潜在的接受域。 这样的预测结果并非没有可能——如果只有对象的中间部位可以看到,则仍可以大致推断出对象的范围。

4. 处理跨边界的anchor要小心。所以在训练的时候,先忽略掉跨边界的anchor,这样的话每个图像大约有6000个anchor需要处理(每张图像共60*40*9≈20000个锚点(一般卷积特征图大小为60*40=2400),除去跨边界的anchor还有6000左右)。	如果在训练时加上这些跨边界的anchor,它们会在目标中引入大量难以纠正的误差项,使得训练难以收敛。

5. 测试时,对整个图像使用RPN,,这样或许会生成大量跨边界的候选框,把它们裁剪掉。

6. 因为很多RPN生成的候选区域有很多的重叠,为了减少冗余,根据cls层的得分对这些区域进行非极大值抑制NMS,非极大值抑制时,重叠率的阈值固定为0.7,这样的话每个图像可以得到大约2000个候选区域。

7. 非极大值抑制不会损失准确率,反而只是减少了区域的数量。

8. 在NMS后,使用前N个分数的区域进行检测,然后使用RPN生成的2000个候选区域训练Fast RCNN,但是在测试时评估的区域数量不固定。

猜你喜欢

转载自blog.csdn.net/weixin_41963310/article/details/109365509