目标检测(三)Fast R-CNN

作者:Ross Girshick

该论文提出的目标检测算法Fast Region-based Convolutional Network(Fast R-CNN)能够single-stage训练,并且可以同时学习对object proposals的分类与目标空间位置的确定,与以往的算法相比该方法在训练和测试速度、检测精度上均有较大提升。

目标检测算法比较复杂主要是因为检测需要确定目标的准确位置,这样的话就面临着两个主要的问题:首先,大量的candidate object locations(proposals)必须被处理;其次,candidate widows仅仅提供了目标的大概位置,必须重新确定以获得准确位置。虽然R-CNN和SPPnet在目标检测方面效果显著,但是仍有诸多缺陷。下面将要介绍的Fast R-CNN则可以在一定程度上弥补二者的缺点,并且带来更快的速度和更高的精度。


1.2 contributions

Fast R-CNN有如下优点:

  • Higher detection quality (mAP) than R-CNN, SPPnet
  • Training is single-stage, using a multi-task loss
  • Training can update all network layers
  • No disk storage is required for feature caching


2. Fast R-CNN architecture and training

1535974182(1)


Fig.1 展示了Fast R-CNN的结构。Fast R-CNN的输入是一幅entire image和一系列object proposals。先是整个image通过该网络的卷积和池化层得到一个feature map,然后一个region of interest(RoI)池化层从feature map中为每个Object proposal提取对应的固定长度特征向量,最后将所有proposals的特征向量输入若干层全连接层。全连接层后面有两路并行输出:其中一路产生softmax

probability 用来估计K+1类;另一路为K个object classes中的每一类输出4个实值数字,用来为所在类重新确定bounding-box positions

1

2


2.1 The RoI pooling layer

Regions of interest(RoI) 是feature map中的一个矩形窗口,每个RoI的位置由一个元组确定(r,c,h,w),其中(r,c)指定了窗口左上角的坐标,(h,w)表示窗口的高和宽。RoI pooling layer的作用是对feature map中的RoIs进行max pooling操作,生成固定空间尺寸的small feature maps(e.g. HxW),其中的H,W是超参数。

RoI max pooling layer将尺寸为h*w的RoI windows 划分成尺寸为H*W的网格,然后在网格内进行max pooling。这里的池化指的是标准的池化。另外,这里的RoI layer是SPPnet中spatial pyramid pooling layer的特例,相当于只有一级的spatial pyramid pooling layer,即只对RoI windows 划分一次。


2.2 Initializing from pre-trained networks

将预训练好的深度卷积神经网络初始化成一个Fast R-CNN网络需要三步:

  • The last max pooling layer is replaced by a RoI pooling layer that is configured by setting H and W to be compatible with the net’s first fully connected layer (e.g.H=W = 7 for VGG16)
  • The network’s last fully connected layer and softmax(which were trained for 1000-way ImageNet classification) are replaced with the two sibling layers described earlier(a fully connected layer and softmax over K+1 categories and category-specific bounding-box regressors)
  • The network is modified to take two data inputs: a list of images and a list of RoIs in those images


2.3 Fine-tuning for detection  即Fast R-CNN的训练

Fast R-CNN网络中的所有权重都可以使用反向传播算法进行训练,这项能力使得Fast R-CNN的测量精度更高,因为在微调时可以更新卷积层的参数。

SPPnet也使用了spatial pyramid pooling layer,但是微调时并没有对卷积层的参数进行训练,这是因为作者(Kaiming He等)认为卷积层在预训练时已经训练过,微调时无需再训练,只需训练全连接层。而该论文的作者认为如果按照SPPnet论文中选择的batch(batch中RoIs来自于不同images,R-CNN和SPPnet均是如此)进行训练的话,对空间池化层及之前的网络进行参数更新的效率会非常低,就认为SPPnet中不能更新卷积层参数。我认为这是因为在前向过程中需要计算多个Images的feature maps,使得计算耗时严重(如果SPPnet使用multi-scale feature extraction的话这种计算代价会更加高昂);另外,在反向传播过程中空间金字塔池化层会导致参数更新比较复杂。为此,提出了一种更加有效的训练方法,能够在训练时利用特征共享,那就是分层采样得到batches。具体做法是先采N幅images,然后从N幅images中的每幅图像中采R/N个RoIs(单尺度训练和测试)。很明显,来自同一个Image的RoIs在前向和反向传播过程中共享计算和内存。同时减小N会降低一个batch内的计算。比如当使用N=2和R=128时,训练速度是从128个不同images中采样RoI计算的64倍快。

至于是否会因为来自于同一个image的RoIs之间的关联性较高而导致训练收敛缓慢,作者通过实验证明该问题并不存在,相反,使用作者提出的batch训练时所需的迭代次数比R-CNN更少。

除了分层采样,Fast R-CNN还使用streamlined training process,只有优化softmax classifier和bounding-box regressors这一步,而不是像R-CNN和SPPnet那样将训练分为训练softmax classifier、SVMs和regressors三个独立的步骤。下面将介绍Fast训练过程中的几个问题:

  • Multi-task loss 多任务损失

      顾名思义,多任务损失即多个任务的损失之和。多任务指的是分类和bounding-box regression两个tasks,在网络上对应两路输出。一路输出每个RoI的概率p=(p0,…..pk),另一路为K个object classes中的每一类输出bounding-box regression偏移量tk=(tkx,tky,tkw,tkh)。

每个RoI根据一个ground-truth的类别u标记,并且一个ground-truth bounding-box regression target是v,那么每个带标签RoI的多任务损失可定义如下:

1536030667(1)

式中1536030926(1)是真实类别u的log loss。第二个任务损失定义了bounding-bx regression target v=(vx,vy,vw,vh)与预测的元组tk=(tkx,tky,tkw,tkh)之间的误差。另外,u>=1表明当类别不为0时才计算Lloc,这是因为一般将背景类标记为第0类。关于Lloc(tuv)的定义如下:

1536039062(1)


smoothL1(x)是一个robust L1 loss,它没有R-CNN和SPPnet中使用的L2损失对离群点敏感。如果regression target v很大,那么使用L2训练时需要仔细调整学习速率以防止梯度爆炸。smoothL1(x)可以消除这种敏感性。

超参数λ控制两个任务损失之间的平衡,论文中全部取λ=1。计算时也会将ground-truth regression target vi 进行归一化处理(0均值,单位方差)。


  • Mini-batch sampling

作者在微调时的每个mini-batch由2幅images和从每幅image中采得的64个ROIs构成。而且,在训练时,每个Image会以0.5的概率被水平翻转以增强数据。除此之外再也没有使用数据增强。


  • Back-propagation through RoI pooling layers   参见论文


  • SGD hyper-parameters

使用softmax classifier和bounding-box regression的全连接层分别使用均值为0标准差为0.01和0.001的高斯分布初始化;偏置都会初始化为0;针对PASCAL VOC 2007和2012训练集,前30k次迭代全局学习率为0.001,每层权重学习率为1倍,偏置学习率为2倍,后10k次迭代全局学习率更新为0.0001;动量设置为0.9,权重衰减设置为0.0005。


2.4 Scale invariance

作者论文中提到了两种实现尺度不变检测的方法:

  • brute force learning

在训练和测试时每幅图像被预先处理成事先确定的尺寸

  • image pyramid

多尺度方法,通过图像金字塔实现近似的尺度不变。类似于SPPne中的multi-scale,可以参考


3. Fast R-CNN detection

训练好的网络会输入一个Image(或者使用image pyramid时产生的 list of images)和 a list of R object proposals 然后打分。在test-time,R一般是2000左右。当使用image pyramid时,每一个RoI会从缩放后尺寸最接近224*224的RoI所在的尺度中选取(同SPPnet)。

对于每一个RoI r,前向传播输出一个类别概率p和一些列预测到的边界框offsets,然后对每个类独立使用和R-CNN中一样的非极大值抑制。


3.1 Truncated SVD for faster detection

在整幅图片的分类过程中,全连接层的时间消耗与卷积层相比是非常小的。但是在Fast R-CNN中因为卷积计算共享,使得卷积计算耗时很短,而全连接层的计算耗时几乎占到前向传播用时的一半。为了缩短全连接层的计算用时,作者使用了截断SVD来压缩全连接层以加速计算。

首先,一层全连接层的权重矩阵W(尺寸为u x v)可以SVD分解为:

1536044653(1)

在该分解中,U=u x t,其中tW的左奇异向量;Σt(t x t)是W最大的t个奇异值构成的对角阵;V=v x t,其中tW的右奇异向量。Truncated SVD将参数的数量从uv减少到了(u+v),当t比min(u,v)小得多时,参数个数减少能降低很大的计算量。

为了压缩网络,可以将W对应的单层全连接层替换为两个全连接层,且二者之间没有non-linearity。第一层“全连接层”使用权重矩阵ΣtVT(并且没有biases);第二层“全连接层”使用权重矩阵U(使用原先的biases,即W对应的偏置)。作者说当RoIs的数量很大时,这种简单的压缩方法能够带来较好的加速效果。

实验中作者发现使用truncated SVD虽然mAP会稍微降低(0.3%),但是检测时间缩短了30%。可见,可以以小幅降低mAP为代价换取速度的大幅提升。另外,使用SVD后可能还能再加速,只需要在压缩后再微调一次,不过mAP会再稍微降低一些。

1536049143(1)


4.1 Experimental setup

论文中的所有实验均使用single-scale训练和测试(s=600),即网络的输入只有一个固定尺度s。虽然Fast R-CNN使用单尺度训练和测试,但是依靠微调卷积层参数仍然对mAP带来了很大的提升(63.1% – 66.9%)。


4.5 Which layers to fine-tune?

为了验证微调卷积层对网络的影响,作者将卷积层参数固定,只训练全连接层。结果发现在单尺度训练下,此时mAp从66.9%降低到61.4%。这证明,微调时对卷积层参数进行训练对深度网络来说是非常有意义的。

但是这并不意味着所有conv layers都应该进行微调。在比Fast R-CNN小一点的网络中,我们发现conv1(第一个卷积层)是generic and independent(a well-known fact)。因此是否对conv1进行微调没有太大意义。比如对于VGG16,我们发现只需要更新conv3_1及以上的layers。部分结果如Table 5.

1536052066(1)

论文中所有关于Fast R-CNN(使用VGG16)的实验都是微调conv3_1及以上层;所有使用model S and M的实验均微调conv2及以上层


5.1 Does multi-task training help?

作者经过三个网络的实验发现,多任务训练相比纯粹的分类训练提高了分类精度


5.2 Scale invariance: to brute force or finesse?

作者比较了两种实现尺度不变目标检测的方法:brute-force learning(single scale) 和 image pyramid(multi-scale)。在每一种方法中作者都定义了每幅图像最短边应该达到的scales的集合s

经过实验得到下表:

1536053450(1)

可见,multi-scale方法对mAP的提高作用很有限,相反,使用多尺度方法的话计算会消耗大量时间,有点得不偿失。而single-scale能够在速度和精度之间取得很好的平衡,尤其对非常深的模型而言。这是显而易见的,因为使用single-scale时计算耗时较短。


5.4 Do SVMs outperform softmax?

1536054136(1)

从表中可见,在所有的网络中softmax都稍微优于SVM。虽然softmax相对SVM而言效果提升有限,但是证明了single stage fine-tuning与以前的multi-stage fine-tunig相比是有效的。而且,与one-vs-rest SVMs不同的是,在给RoI打分时softmax会在classes之间引入竞争。


Fast R-CNN 与 SPPNet 区别就在于: Fast R-CNN 不再使用 SVM进行分类,而是使用一个网络同时完成了提取特征、判断类别 、 框回归三项工作;Fast R-CNN微调时会更新深度卷积网络的参数,使得精度进一步提高,而SPPnet仅训练空间金字塔池化层后面的部分。

参考文章:

原文地址:https://www.cnblogs.com/Lilu-1226/p/10587953.html