Fast R-CNN(快速的基于区域的卷积神经网络)

摘要  本文对于目标检测任务提出一种基于区域的快速卷积神经网络方法(Fast R-CNN)。Fast R-CNN依据之前的工作,使用深度卷积网络高效的给出分类目标建议。与之前的工作相比,Fast R-CNN做出一些创新来提高训练与测试的速度,同时也提高了检测精度。在使用VGG16网络基础上,Fast R-CNN训练过程要比R-CNN算法快9倍,测试过程要快213倍,并且Fast R-CNN在PASCAL VOC2012数据集上实现了更高的mAP结果。与SPPnet相比,Fast R-CNN使用VGG16训练速度比它快3倍,测试比它快10倍,并且检测精度更高。Fast R-CN在Python和C++(使用caffe)中实现。其开源代码链接如下:https://github.com/rbgirshick/fast-rcnn.


 


 


 


1 简介

最近,深度卷积神经网络[14,16]在图像分类[14]和目标检测[9,19]任务的精度上具体很大的提升。相比于图像分类,目标检测是一项更具有挑战性的任务,并且解决它需要更加复杂的方法。由于它的复杂性,目前的方法[例如:9,11,19,25]训练模型分为多个阶段,但是这些方法缓慢并且困难。

复杂性是由于检测需要精确定位目标,这样也产生了两个难点问题。第一,必须处理许多候选对象位置(通常被称为“建议”)。第二,这些候选区域提供的目标位置很粗糙,必须更进一步的细化目标位置,以实现精确的目标定位。这些问题的解决方法往往会影响算法的速度、准确度和简单性。

在本文中,对于顶尖的卷积网络目标检测器[9,11],我们简化了它的训练过程。我们也提出了一种单阶段的训练方法,该方法可以在学的目标分类建议的同时细化目标的空间位置。

我们的算法可以训练一个很深的检测网络(VGG16[20]),比R-CNN[9]算法快9倍,并且比SPPnet[11]算法快3倍。在运行时,检测网络处理图像的速度为每张0.3秒,同时在PASCAL VOC2012数据集上实现最高精度,mAP值为66%(vs. R-CNN的62%)。

1. 1 R-CNN 和 SPPnet

基于区域的卷积神经网络算法(R-CNN),其通过使用深度卷积网络对目标建议进行分类,达到了良好的目标检测精度。但是,该方法有明显的缺点:

1.训练分为多个阶段。R-CNN使用对数损失函数微调卷积网络权重,并产生目标建议;然后,让支持向量机接受卷积层提取的特征,支持向量机充当目标检测器,取代了通过微调学习的softmax分类器;在第三个训练阶段,对包围框进行回归运算,修正包围框位置。

2.训练在时间和空间上花费较大。对于支持向量机和包围框的回归训练,需要从每张图像中的每个目标建议中提取特征并且写入磁盘。对于非常深的网络来讲,比如VGG16,拥有5千张图像VOC07训练集完成这个过程需要2.5天(在GPU上)。这些提取的特征需要数百千兆的字节去存储。

3.目标检测速度较慢。在测试时,从每个测试图片中的每个目标建议中提取图像,使用VGG16进行检测用时约每张47秒(在GPU上)。

R-CNN运行较慢,因为它对每一个目标建议执行一次卷积网络计算,而并没有共享计算。空间金字塔池化网络(SPPnet)[11]提出了通过共享计算来加速R-CNN。SPPnet方法计算整个输入图像的卷积特征图,然后使用从共享特征图中提取的特征向量,对每个目标建议进行分类。通过最大池化层,将区域建议内的特征图进行池化,并得到固定大小的输入(例如:6×6)。在空间金字塔池化中,汇集并连接多个输出大小。SPPnet加速了R-CNN的测试时间10到100倍。由于快速的建议特征提取,SPPnet训练的时间也减少了3倍。

当然,SPPnet也有明显的缺点。像R-CNN一样,训练也是分为多个阶段,包括特征提取,使用日志记录损失微调网络、训练支持向量机以及包围框回归运算,特征也会被写入磁盘。但不同于R-CNN的是,其所提出的微调算法[11]不能更新空间金字塔池化层之前的卷积层网络参数。并不奇怪,这种约束(固定卷积层)限制了非常深的网络的精度。

1. 2 贡献

我们提出一种新的训练算法,修正了R-CNN和SPPnet的缺点,同时,提高了速度与精度。由于该算法可以快速的训练和测试,我们把这种算法称为Fast R-CNN。Fast R-CNN算法有以下几个优点:

1.比R-CNN和SPPnet,有较高的检测质量(mAP值)

2.训练是单阶段的,并且使用多任务损失

3.训练可以更新所有网络层参数

4.特征的缓存不需要磁盘存储

Fast R-CNN使用Python和C++构建(caffe[13]搭建),并且完整开源代码链接为:https://github.com/rbgirshick/fast-rcnn

2 Fast R-CNN 结构与训练

图1显示了Fast R-CNN的整体结构。Fast R-CNN网络将整个图像和一组目标建议作为输入。网络首先使用几个卷积层(conv)和最大池化层处理整副图像,并产生卷积特征图。然后,对于每个目标建议,兴趣区域(ROI)池化层从特征图中提取固定长度特征向量。每个特征向量被送入一系列全连接层(FC)网络中,最后将其分为两个兄弟输出层:一个层在K个目标类和一个背景类上,计算目标类别的softmax概率估计;另一层,为K个目标类别的每一个判断产生一个目标包围框数值,包含四个数值。每一组中的4个值为K类中的一个边界框位置坐标。

CNN中结构示意图 怎么画_译文


图1:Fast R-CNN算法结构。输入图像和多个兴趣区域(ROI)被送入全卷积网络中,每个ROI放缩到固定大小的特征图中,然后通过全连接层(FCs)映射到特征向量中。该网络具有两个输出向量:softmax分类概率和每类包围框的回归偏移量。该结构可以使用端到端的训练,具有多任务损失。

2. 1 ROI池化层

ROI池化层使用最大池化计算将任何感兴趣区域内的特征图转换为具有固定尺寸H×W(例如:7×7)的特征图,其中H和W是独立于任何特点ROI的超参数。在本文中,一个ROI是进入卷积特征图的矩形窗口。每一个ROI由四个元组(r,c,h,w)定义,即指定的其左上角坐标(r,c),以及其高度和宽度(h,w)。

ROI最大池化层的工作原理是将h×w ROI窗口划分为近似大小为h/H×w/W拥有H×W个网络单元的子窗口,然后对每个子窗口中的数值进行最大池化运算,并输入相应的输出网络单元。池化运算独立地应用于每一个特征图信道,比如标准最大池化。ROI层仅仅是SPPnets[11]中使用的空间金字塔池化层的特例,其中仅有一个金字塔级。我们使用在[11]中给出的池化子窗口进行计算。

2. 2 预训练网络的初始化

我们使用三个经过ImageNet[4]预训练过的网络进行实验,每个网络具有5个最大池化层和十三个卷积层(网络结构图见4.1节)。当一个预训练后的网络初始化为一个Fast R-CNN网络时,它需要经历三次变换。

第一,网络的最后一个最大池化层由ROI池化层取代,ROI池化层通过设置H和W将网络输出可以与接下来传入的第一个全连接层的输入一致(例如,对于VGG16网络,H=W=7)。

第二,网络的最后一个全连接层和softmax层(对1000类ImageNet进行训练),使用前面描述的两个同级层(全连接层和softmax层在K+1类别和类别包围框回归计算之前)进行替换。

第三,修改网络以获取两个输入数据:图像列表和这些图像的ROI列表。

2. 3 检测任务的微调

利用反向传播来训练所有网络的权重值是Fast R-CNN的重要能力。那么,让我们来说明为什么SPPnet不能更新空间金字塔池化层以下网络的权重值。

其最根本原因是,当每个训练样本(即兴趣区域)是来自不同的图像时,通过SPP层的反向传播是十分低效的,这也是正是R-CNN和SPPnet共同的训练方式。效率低下源于这样一个原因,即每个兴趣区域可能有非常大的感受野,通常跨越了整个输入图像。由于前向传播过程必须处理整个感受野,所以训练时的输入图像必须是最大的(通常是整幅图像)。

我们则提出一个更加高效的训练方法,可以在训练过程中对特征完成网络层共享。在Fast R-CNN训练过程中,将随机梯度下降(SGD)运算中的小批量数据(mini-batches)进行分层采样,首先采样N幅图像,然后从每幅图像中采样R/N个兴趣区域。计算的关键点是,来自于同一个图像兴趣区域在网络中前向和反向传播里面是共享计算和记忆的,这样就减小了N幅图像的小批量(mini-batches)数据的计算。例如,当N=2和R=128时,我们所提出的训练方法比从128个不同图像(即R-CNN和SPPnet策略)中采样一个兴趣区域快64倍。

我们这种训练方式也存在一个问题,它可能导致训练的收敛速度缓慢,这是因为来自同一个图像的兴趣区域具有相关性。这个问题最终没有出现明显的影响,并且我们使用比R-CNN更少的SGD迭代次数,最终在N=2和R=128时获得良好的结果。

除了分层采样外,Fast R-CNN在微调阶段使用了一种流水线训练的计算方式,该微调阶段联合softmax分类器和包围框回归运算,并不是三个独立的阶段中训练softmax分类器、支持向量机和回归运算[9,11]。下面是该过程的组成部分的详细描述(损失,小批量采样策略,通过ROI池化层的反向传播和SGD超参数设置)

多任务损失计算。Fast R-CNN网络有两个同级输出层。第一个层输出离散概率分布(对于每一个兴趣区域),p = (p0,….,pk)

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_02

,超过K+1类。通常,pCNN中结构示意图 怎么画_池化_03是通过K+1类别判断的全连接层后的softmax层计算得出的。第二个同级层是输出包围框的回归偏移量,tk=(txk,tyk,twk,thk)

CNN中结构示意图 怎么画_译文_04

,对于K个目标类别,用kCNN中结构示意图 怎么画_译文_05来代表。我们使用[9]中给出的tkCNN中结构示意图 怎么画_目标检测_06进行参数化,其中tkCNN中结构示意图 怎么画_池化_07代表对于目标建议的尺度平移不变性和空间高度/宽度偏移。

每个训练的兴趣区域用一个真实类别uCNN中结构示意图 怎么画_目标检测_08和真实包围框目标vCNN中结构示意图 怎么画_池化_09进行标注。为了分类和包围框回归计算,我们使用多任务损失函数LCNN中结构示意图 怎么画_译文_10对每个标记后的兴趣区域进行训练:

Lp,u,tu,v=Lclsp,u+λu≥1Lloc(tu,v)

CNN中结构示意图 怎么画_深度学习_11

 (1)其中,Lclsp,u=-logpu

CNN中结构示意图 怎么画_深度学习_12

代表真实类别uCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_13的对数损失。第二个任务的损失函数,Lloc

CNN中结构示意图 怎么画_译文_14

,是在类别uCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_15真实包围框的回归目标元组上定义的,v=(vx,vy,vw,vh)

CNN中结构示意图 怎么画_译文_16

和预测元组tu=(txu,tyu,twu,thu)

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_17

,同样也是针对类别uCNN中结构示意图 怎么画_译文_18定义的。艾弗森括号内的指标函数u≥1

CNN中结构示意图 怎么画_译文_19

,当u≥1

CNN中结构示意图 怎么画_池化_20

时结果为1,否则为0。按照处理惯例,所有背景类被标记u=0

CNN中结构示意图 怎么画_目标检测_21

。对于兴趣区域的背景,由于没有真实的包围框,因此可以忽略它的Lloc

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_22

计算。而对于包围框的回归计算,我们使用如下损失函数计算:Lloctu,v=i∈{x,y,w,h}smoothL1tiu-vi

CNN中结构示意图 怎么画_池化_23

  (2)

其中,

smoothL1x=0.5x2             ifx<1x-0.5     otherwise,

CNN中结构示意图 怎么画_目标检测_24

     (3)

该函数是一个鲁棒的L1CNN中结构示意图 怎么画_目标检测_25损失函数,相比R-CNN和SPPnet中使用的L2CNN中结构示意图 怎么画_目标检测_26损失函数,该函数对异常值有更低的敏感度。当目标回归运算是无界时,训练使用L2CNN中结构示意图 怎么画_深度学习_27损失函数可能需要仔细的调整学习率,防止梯度爆炸。而方程(3)消除了这种敏感性。

式子(1)中的超参数控制两个任务之间的损失平衡。我们对真实框回归目标viCNN中结构示意图 怎么画_译文_28归一化为零均值和单位方差。所有的实验中λ=1

CNN中结构示意图 怎么画_目标检测_29


我们注意到,文献[6]使用相关损失来训练类别目标建议网络。与我们的方法不同,文献[6]主张两个网络系统,将定位与分类工作分离进行。OverFeat算法[19],R-CNN和SPPnet[11]也训练了分类器和包围框定位器,但是这些方法都使用分阶段训练,对比Fast R-CNN(见5.1节结果)我们也证明这些训练方法是次要选择。

小批量采样。在微调过程中,每个SGD的小批量数据由N=2幅图构成,并随机选择(通常的做法,实际上我们是对数据集排列后进行遍历)。我们使用小批量数据的尺寸R=128,从每个图像中采样64个兴趣区域。正如文献[9]中的一样,我们从目标建议中获取了25%的兴趣区域,这些目标建议都与真实框的重叠比率(IOU)大于0.5。这些兴趣区域包含用前景目标标记的实例,即u≥1

CNN中结构示意图 怎么画_池化_30

。根据文献[11],剩余的兴趣区域采样于剩余的目标建议,并且该目标建议的IOU值均是在[0.1,0.5)

CNN中结构示意图 怎么画_目标检测_31

值域内最大的。对于背景采样示例,都被标记为u=1

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_32

。对于低于阈值0.1的目标建议可以用于困难样本挖掘的启发研究[8]。在训练过程中,图像以0.5的概率进行水平翻转,并没有使用其他数据增强方法。

通过ROI池化层的反向传播。反向传播路径经过ROI池化层。具体来讲,我们假设每个小批量数据仅包含一幅图像(N=1),虽然在训练中N>1是必然的,因为网络的前向传播独立地处理所有图像。

xi∈R

CNN中结构示意图 怎么画_译文_33

代表ROI池化层的第i个输入,令yrj

CNN中结构示意图 怎么画_译文_34

代表第rCNN中结构示意图 怎么画_译文_35个ROI池化层的第jCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_36个输出。ROI池化层计算yrj=xi*(r,j)

CNN中结构示意图 怎么画_目标检测_37

,其中i*r,j=argmaxi'R(r,j)xi'

CNN中结构示意图 怎么画_目标检测_38

R(r,j)

CNN中结构示意图 怎么画_译文_39

是输出单元yrj

CNN中结构示意图 怎么画_译文_40

最大池化时子窗口中的输入索引集合。而单个xiCNN中结构示意图 怎么画_译文_41可以被分配给多个不同的输出单元yrj

CNN中结构示意图 怎么画_译文_42


ROI池化层的反向传播计算是通过argmax开关函数计算每个输入变量xiCNN中结构示意图 怎么画_池化_43的损失函数的偏导数:

∂Lxi=rji=i*(r,j)∂Lyrj

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_44

         (4)换句话讲,对于每个小批量的兴趣区域rCNN中结构示意图 怎么画_池化_45和每个池化层输出单元yrj

CNN中结构示意图 怎么画_译文_46

,如果iCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_47是输出单元yrj

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_48

通过最大池化层选择的argmax函数,则将偏导数∂Lyrj

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_49

累加起来。在反向传播过程中,部分偏导数∂Lyrj

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_50

已经由顶层的ROI池化层的反向传播函数计算出来。

SGD超参数。对于softmax分类和包围框回归的全连接层,分别使用方差为0.01和0.001的标准零均值高斯分布进行初始化。偏置项被初始化为0。对于所有层,每层都使用权值为1,偏置为2,全局学习率为0.01。当我们在VOC07和VOC12数据集上对使用SGD算法完成了30k次mini-batches迭代,之后将学习率降低到0.01再训练10k次迭代。当我们在更大的数据集上进行训练时,如上所述,我们使用SGD需要更多的迭代次数。我们选择的动量参数为0.9,参数衰减为0.0005(关于权值和偏置)。

2. 4 尺度不变性

我们探索了两种实现目标尺度不变性的目标检测方法:(1)通过“暴风”学习和(2)利用图像金字塔。这些方法是文献[11]中的思想实现的两种途径。在“暴风”算法中,每幅图像都以预先定义的像素尺寸进行处理在训练和测试过程中。网络必须直接从训练数据中学习尺度不变的检测目标。

相反,对于多尺度算法,其通过图像金字塔为网络提供近似尺度不变性。在测试阶段,图像金字塔被用于近似的归一化每个目标建议。在多尺度训练中,遵循文献[11],我们在每次采样图像时随机采样金字塔尺度,这也作为数据增强的一种形式。由于GPU内存限制,我们只针对较小的网络进行多尺度训练。

3 Fast R-CNN 检测

一旦Fast R-CNN网络完成微调过程,检测相当于进行网络的前向传播(假设预先计算好目标建议)。网络将图像(或图像金字塔,编码为图像列表)和待计算概率的R个目标建议列表作为输入。在测试阶段,R通常被设置为2000个左右,虽然外我们也考虑将该参数变大(约45000)的情况。当使用图像金字塔时,每个兴趣区域被缩放,并使兴趣区域缩放的尺寸接近文献[11]中的224×224个像素。

对于测试阶段产生的每个兴趣区域rCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_51,前向传播将输出类别的后验概率分布pCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_52以及一组相对于rCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_53的预测包围框的偏移量(每一个输入KCNN中结构示意图 怎么画_目标检测_54类中的目标都有一个自己的精准的包围框坐标预测)。我们使用估计概率Pr⁡(class=k | r) ≜ pk

CNN中结构示意图 怎么画_池化_55

 给每一个属于KCNN中结构示意图 怎么画_译文_56类的rCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_57分配检测置信度。然后,我们使用R-CNN[9]的设置,以及对每个类独立地进行非极大值抑制。

3. 1 快速检测中的截断式奇异值(SVD)分解

对于整幅图像分类来讲,相比于卷积层,计算全连接层所花费的时间很小。相反地,为了检测任务,要处理的兴趣区域数量很大,并且正向传播的一半时间都用于计算全连接层(见图2)。通过截断式的奇异值分解[5,23]可以压缩并更容易加速全连接层的运算。

在运算中,由u×v

CNN中结构示意图 怎么画_译文_58

组成的权重矩阵W可以使用SVD近似分解为:WUtVT

CNN中结构示意图 怎么画_池化_59

              (5)在分解运算中,UCNN中结构示意图 怎么画_池化_60是一个u×t

CNN中结构示意图 怎么画_译文_61

的矩阵,包含WCNN中结构示意图 怎么画_目标检测_62的前tCNN中结构示意图 怎么画_目标检测_63个左奇异值向量,t

CNN中结构示意图 怎么画_池化_64

是一个t×t

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_65

的对角矩阵,包含WCNN中结构示意图 怎么画_译文_66的前tCNN中结构示意图 怎么画_译文_67个奇异值,VCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_68是一个v×t

CNN中结构示意图 怎么画_深度学习_69

的矩阵,包含WCNN中结构示意图 怎么画_池化_70的前tCNN中结构示意图 怎么画_目标检测_71个右奇异值向量。截断式的SVD将参数计算个数从uv

CNN中结构示意图 怎么画_译文_72

个减小到t(u+v)

CNN中结构示意图 怎么画_译文_73

个,如果tCNN中结构示意图 怎么画_译文_74远小于min(u,v)

CNN中结构示意图 怎么画_深度学习_75

,则计算量减小有十分显著的表现。为了压缩网络,对应于WCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_76的单层全连接网络被两个全连接网络替换,他们之间没有非线性关系。这两层中的第一层使用权重矩阵tVT

CNN中结构示意图 怎么画_目标检测_77

(没有偏置项)第二层使用矩阵UCNN中结构示意图 怎么画_CNN中结构示意图 怎么画_78(与WCNN中结构示意图 怎么画_深度学习_79相关的原始偏置)。当兴趣区域数量较大时,这种简单的压缩方法取得了很好的加速效果。

4 主要结果

三个主要的结果来支持本文所提出的方法:

1.在VOC07,10,12数据集上取得了极高mAP值,达到先进水平;

2.相比于R-CNN和SPPnet,本文可以更快的完成训练和测试;

3.微调VGG16中的卷积层提高了mAP值。

4. 1 实验步骤

我们的实验使用了三个经过预训练的ImageNet模型。第一个网络来自于R-CNN使用的是CaffeNet(本质上是AlexNet[14])。我们可以把CaffeNet称作模型S,即小模型。第二个网络来自于文献[3]的VGG_CNN_M_1024,其具有和模型S相同的深度,但是更宽。我们将该网络称作模型M,即中模型。最后的网络是来自于文献[20]的很深的模型VGG16。由于该模型是最大的,我们将其称作模型L。在本节中,所有实验都采用单一尺度进行训练和测试(s=600

CNN中结构示意图 怎么画_深度学习_80

;详见5.2节)

4. 2 VOC 2010和2012数据集实验结果

在这些数据集上,我们将Fast R-CNN与来自于公共排行榜comp4(外部数据)上顶级方法进行比较(表2,表3)。对于NUS_NIN_c2000和Babylearning 方法,它们目前没有相关的文献出版物,我们无法找到关于它们所使用卷积网络架构的确切信息,它们是Network-in-Network[17]设计中的变体。所有的其他方法都使用预训练的VGG16网络进行初始化。

Fast R-CNN达到了VOC12数据集最好的结果,取得了65.7%的mAP值(加上额外的数据有68.4%),这也比其他方法快了两个数量级,这些方法都是基于较慢的R-CNN网络。在VOC10数据集上,SegDeepM[25]算法达到了比Fast R-CNN更高的mAP值(67.2% vs. 66.1%)。SegDeepM在VOC12训练验证集上加入分割标注再训练,该算法的设计通过马尔可夫随机场去推理R-CNN检测并从O2P

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_81

[1]语义分割方法中进行目标分割来提高R-CNN的检测精度。Fast R-CNN可以替代SegDeepM方法中使用的R-CNN,这样可能取得更好的结果。当使用方法的07++12训练集(见表2说明)时,Fast R-CNN的mAP值提升到68.8%,超过了SegDeepM算法。

4. 3 VOC 2007结果

在VOC07数据集上,我们对Fast R-CNN与R-CNN和SPPnet进行了对比。所有方法均用相同的经过预训练的VGG16网络进行初始化,并使用包围


 


CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_82


表1:VOC2007测试集平均检测精度(%)。所有方法均使用VGG16模型。训练集:07:VOC07训练验证集;07\不同:07数据集没有使用困难样本;07+12:联合VOC12的训练验证集。SPPnet的结果来自于文献[11]。

CNN中结构示意图 怎么画_译文_83


表2:VOC2010测试集平均检测精度(%)。BabyLearning算法使用的网络基于文献[17]。所有的其他方法均使用VGG16模型。训练集:12:VOC12训练验证集;Prop.:专有数据集;12+seg;12数据集和分割标注;07++12:联合VOC07训练验证集,VOC07测试集,VOC12训练验证集。

CNN中结构示意图 怎么画_译文_84


表3:VOC2012测试集平均检测精度(%)。BabyLearning算法和NUS_NIN_c2000算法使用的网络基于文献[17]。所有的其他方法均使用VGG16。训练集:见表2;Unk:未知。


 

 

框回归方法。VGG16 SPPnet方法的实验结果已经由文献[11]给出。SPPnet在训练和测试过程中都使用了5个尺度。与SPPnet对比,虽然Fast R-CNN使用单一尺度进行训练和测试,但是Fast R-CNN中微调卷积层可以将mAP值大幅提高(从63.1%提升到66.9%)。R-CNN的mAP值为66.0%。一个次要点,SPPnet没有经过PASCAL数据集困难样本训练,而移除这些困难样本可以让Fast R-CNN的mAP值提高到68.1%。所有的其他实验都使用困难样本。

4. 4 训练和测试

快速的训练和测试时间是我们的第二个主要实验成果。表4对Fast R-CNN、R-CNN和SPPnet三种算法在VOC07数据集上的训练时间(小时)、测试率(每幅图像秒数)和mAP值进行比较。对于VGG16,Fast R-CNN处理图像比R-CNN快146倍,比使用截断式SVD的R-CNN快213倍,训练时间减少了9倍,时长从84个小时减小到9.5个小时。与SPPnet相比,Fast R-CNN训练VGG16比它快了2.7倍(时长9.5小时 vs. 25.5小时),测试比它快了7倍,比使用截断式SVD的SPPnet快10倍。Fast R-CNN还节省了数百千兆字节的磁盘存储,因为它不缓存特征。

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_85


表4:Fast R-CNN算法在运行相同模型的情况时与R-CNN和SPPnet算法比较。Fast R-CNN算法使用单尺度训练。SPPnet使用文献[11]中指定的五个刻度。时间结果来自于文献[11]。实验在NVIDIA K40 GPU上进行测试时间。

截断式SVD。截断式SVD可以减少30%以上的检测时间,而mAP值只是略有下降(下降0.3个百分点),并且不需要在模型压缩后执行额外的微调过

程。图2表示如何使用来自VGG16中fc6层的25088×4096矩阵的前1024个奇异值和fc7层4096×4096矩阵的前256个奇异值减少运行时间,而mAP值损失较小。如果在压缩模型后再进行一次微调,则mAP值在减少较小的情况下进一步加速。

CNN中结构示意图 怎么画_译文_86


图2:VGG16模型在使用截断式SVD运算前后的时间对比。之前的SVF,全连接层fc6层和fc7层占用45%的时间。

4. 5 哪一层需要进行微调?

对于SPPnet文献[11]中所考虑的较浅层的网络,仅对全连接层进行微调就足以取得较好的精度。我们假设,这种结果不适用于非常深的网络结构。为了验证微调卷积层对于VGG16网络十分重要,我们对Fast R-CNN进行微调,但是固定前十三层卷积层网络,以便只有全连接层进行学习。这种消融模拟单尺度的SPPnet训练,将mAP值从66.9%下降到61.4%(见表5)。这次实验也验证了我们的假设:对于非常深的网络对ROI池化层进行训练是十分重要的。

CNN中结构示意图 怎么画_深度学习_87


表5:限制哪些层对在微调阶段的VGG16网络有影响。微调≥fc6层以模拟SPPnet的训练方法[11],但是仅使用单尺度模式。SPPnet的结果使用了五个尺度,是以7倍的速度花费而得到的结果。

对于实验结果,是否意味着所有的卷积层都应该进行微调?简而言之,不是。在较小的网络(S和M)里,我们发现conv1层是共用的和目标任务无关(众所周知[14])。对conv1层学习或者不学习,对于mAP值没有任何影响,也是无意义的。对于VGG16,我们发现只需要更新自conv3_1及以上(13个卷积层中的9个层)的层。这种观察是十分实用的:(1)在训练时从conv2_1层更新相比于从conv3_1层开始更新速度减慢1.3倍(12.5小时比9.5小时);(2)从conv1_1层开始更新则GPU内存不够。当从conv2_1层开始学习时,与从conv3_1层开始的mAP值差异仅为+0.3个百分点(表5,最后一列)。本文所有的Fast R-CNN算法实验结果都使用VGG16微调conv3_1层及以上层完成。所有的实验也使用了模型S和M,并也微调conv2及以上层。

5 设计评价

我们通过设计实验以验证Fast R-CNN算法相比于R-CNN和SPPnet算法有多快,并且评价设计方法的合理性。遵循最佳的惯例,我们在PASCAL VOC07数据集上进行实验。

5. 1 多任务训练是否有用?

多任务训练是方便的,不仅其避免管理整个顺序训练任务过程,而且它也有改善结果的潜力,因为这些任务通过共享表示相互的影响(卷积层)。那么,多任务训练是否提高Fast R-CNN中的目标检测精度呢?

为了测试这个问题,我们只使用在式子(1)(即,设置λ=0

CNN中结构示意图 怎么画_深度学习_88

)中的分类损失Lcls

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_89

对基准网络进行训练。基准训练结果显示在表6中模型S、M和L的每组模型的第一列。注意这些模型并没有进行包围框回归器。接下来(每组模型第二列),我们采用多任务损失(式子(1),λ=1

CNN中结构示意图 怎么画_目标检测_90

)对网络进行训练,但是我们在测试时禁用包围框回归运算。这样,我们分隔了网络的分类精度,并允许与基准网络的对应项比较。

CNN中结构示意图 怎么画_深度学习_91


表6:多任务训练(每组数据的第四列)相对于分阶段训练(每组数据的第三列)提升了mAP值。

在所有的三个网络模型中,我们发现多任务训练相对于单独用于分类任务的训练提高了分类精度。mAP值提升了0.8到1.1个百分点,通过实验证明,多任务学习表现出积极的作用。

5. 2 尺度不变性:暴力或精细?

我们比较了两种实现尺度不变目标检测的方法:暴风学习(单尺度)和图像金字塔(多尺度)。在任意情况下,我们将图像的尺度sCNN中结构示意图 怎么画_译文_92定义为其最短边的长度。

所有的单尺度实验都使用s=600

CNN中结构示意图 怎么画_译文_93

像素;对于一些图像,sCNN中结构示意图 怎么画_译文_92可以小于600,因为我们要保持横纵比缩放图像,并限制其最长边为1000像素。这些值的设定使得微调阶段时的VGG16网络不会造成GPU内存不够。较小的网络模型占用显存更少,所以可以赋予较大的sCNN中结构示意图 怎么画_目标检测_95值。但是,对每个模型优化sCNN中结构示意图 怎么画_译文_96值并不是我们主要的关注点。我们注意到PASCAL数据集的图像平均尺寸为384×473像素,因此单尺度设置通常以放大1.6倍的方式对图像进行采样。ROI池化层的平均有效步长约为10个像素。

在多尺度实验中,我们使用文献[11]中指定的相同的五个尺度,以便与SPPnet进行比较。但是,我们将最长边限制在2000像素,避免超过GPU的内存容量。

表7显示使用模型S和M进行训练和测试时所使用的单尺度和五个尺度。假设文献[11]中最令人惊讶的结果是单尺度检测结果和多尺度检测结果一样。我们的发现证实了他们的结论:深度卷积网络是一种直接学习尺度不变性的方法。多尺度方法仅能对mAP值有少许提升,并且该方法需要花费大量的计算时间(表7)。在VGG16模型(模型L)上,我仅使用单尺度实现整个检测过程,然而,它却取得了66.9%的mAP值,这比R-CNN[10]算法的66.0%mAP值还高,即使R-CNN使用了“无限”尺度,即每个建议都被压缩成标准大小。

CNN中结构示意图 怎么画_目标检测_97


表7:多尺度 vs 单尺度。SPPnet ZF(类似于模型S)的结果来自于文献[11]。实验显示,单尺度较大的网络模型可以提供最佳的速度与精度的折中方案(由于GPU内存限制,L不能进行多尺度实验)。

由于单尺度处理提供了速度和精度之间的最佳折中方案,特别是对于比较深的网络模型,本节以外的所有实验都使用s=600

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_98

像素的单尺度进行训练和测试。

5. 3 我们需要更多的训练数据吗?

当提供更多的训练数据时,一个表现不错的目标检测器应该被得到提升。X.Zhu等人[24]的DPM[8]算法仅在几百到几千个实例训练后mAP值就达到饱和状态。这里,我们使用VOC12训练集对VOC07数据集进行扩充,大约将图像的数量增加到原来的两倍至16.5K,用以评估Fast R-CNN。扩增训练数据集后,对于VOC07测试的mAP值从66.9%提高到70.0%(表1)。在这个数据集上训练时,我们使用的是对60K数据量的小批量迭代,而并不是40K的数据量。

我们对VOC07和VOC12数据集进行了类似实验,为此,我们构建了一个含有21.5K图像的数据集,共包含VOC07的训练验证集、测试集以及VOC12的训练验证集。当使用该数据集进行训练时,我们进行了10万次SGD迭代,并且每隔4万次(并不是每3万次)迭代降低0.1倍学习率。对于VOC10和2012数据集,mAP值分别从66.1%提高到68.8%和从65.7%提高到68.4%。

5. 4 针对分类器,支持向量机优于softmax吗?

Fast R-CNN使用在微调阶段学习后的softmax分类器,而不是像R-CNN和SPPnet所做的那样,训练一个一对多的线性事后支持向量机。为了更清晰的体现本文这种选择的影响,我们在Fast R-CNN中训练了对难例样本重训练的事后SVM分类器。我们在实验中使用了与R-CNN算法中相同的训练方法和超参数设置。

CNN中结构示意图 怎么画_CNN中结构示意图 怎么画_99


表8:Fast R-CNN算法:softmax分类 vs SVM(针对VOC07数据集的mAP值)。

表8显示了在三个网络模型上,softmax分类器结果优于支持向量机,mAP值大约相差0.1到0.8个百分点。这种差距的影响对于检测结果是很小的,但是它表明与之前的多阶段训练方法相比,“一次性”微调是足够的。我们注意到,softmax不同于一对多的支持向量机,它在引入兴趣区域时也引入了类间竞争。

5. 5 建议区域越多总是好的吗?

总体上讲,有两种类型的目标检测器:一种是使用稀疏表示的目标建议(例如,选择性搜索[21]),一种是使用密集表示的目标建议(例如,DPM[8])。对稀疏建议进行分类是一种级联[22]的方式,其中建议机制是首先拒绝大量的候选建议,仅保留下来一小组定量的待评估的候选建议。当该方式应用到DPM方法检测[21]时,该方式提高了算法的检测精度[21]。我们发现,这种建议分类器级联的方式也提高了Fast R-CNN的检测精度。

使用选择性搜索进行枚举,在每次对模型M进行重复训练和测试时,我们可以从每幅图像中扫描出1千到1万个建议区域。如果建议区域仅仅担当一个计算的角色,那么增加每个图像建议数量不应该会降低总体mAP值。

CNN中结构示意图 怎么画_译文_100


图3:针对各种建议区域方案,VOC07测试集的mAP结果曲线及AR值曲线。

经过实验,我们发现mAP在提升的过程中,随着建议区域数量的增加而有下降的趋势(图3,蓝色实线)。实验结果表明:建议数量增多对于检测没有帮助,甚至会影响检测准确性。

这个结果很难在没有实际进行实验的情况下进行预测。现今,用于衡量目标建议质量的最规范的评价标准是平均召回率(AR)[12]。当针对每张图使用固定数量的建议时,对于R-CNN所使用的几种建议方法,AR与mAP计算对于方法的关联性很好。图3显示出AR(实心红线)与mAP的不相关,因为每幅图像所提取的候选建议数量是变化的。AR计算必须小心使用;更高的AR值是由于有更多的建议并不意味着mAP值也会增加。幸运的是,模型M的训练和测试仅花费了不到2.5个小时。因此,Fast R-CNN能够高效、直接评估目标建议的mAP值,这也更优于代理度量方式。

我们也探索了Fast R-CNN使用密集方式生成包围框(在缩放、位置和长宽比上),大约产生4.5万个框/每幅图像。这个稠密集合足够丰富,当每个选择性搜索框被其最近(按照IOU值)的密集框替换时,mAP值仅下降1个百分点(mAP值下降到57.7%,见图3,蓝色三角形曲线)。

密集框与选择性搜索框的统计数据的方式不同。从按照设定2千个选择性搜索框开始,我们开始添加1000×{2,4,6,8,10,32,45}个随机样本密集框。对于每个实验,我们重新训练和测试模型M。当这些密集框添加的过程中,mAP值下降的幅度比添加更多选择性搜索框时更大,最终下降至53.0%。

我们还训练和测试了Fast R-CNN仅使用密集框的(4.5万个/每幅图像)情况。该实验结果为mAP值52.9%(蓝色菱形曲线)。最后,我们还检验了使用难例样本重复训练的支持向量机来处理密集框的分布。支持向量机的表现更加糟糕:49.3%(蓝色圆圈)。

5. 6 初步的COCO数据集结果

我们将Fast R-CNN(VGG16)算法应用于MS COCO数据集[18],以建立对于该数据集的初步基准结果。我们在8万张图像训练集上进行了24万次迭代运算,并使用评估服务器对“test-dev”集进行测试评估。PASCAL数据集的标准mAP值是35.9%;新的COCO数据集的标准AP值是19.7%(在超过平均IOU阈值的条件下)。

6 结论

本文提出一种Fast R-CNN算法,对R-CNN和SPPnet进行了速度和精度上的更新。除了本文中的检测结果,我们还提供了详细的实验,我们也希望读者可以提供新的见解。特别值得注意的是,稀疏目标的建议似乎提高了检测器的检测质量。这个问题过去花费了太多的(时间)去探究,但是它使Fast R-CNN算法变得更加实用。当然,也可能存在尚未发现的允许使用密集框及稀疏候选框的方法。对于这样的方法,如果开发出来后,可以有助于更进一步加速物体检测。

 

  1. J. Carreira, R. Caseiro, J. Batista, and C. Sminchisescu. Semantic segmentation with second-order pooling. In ECCV, 2012.
  2. R. Caruana. Multitask learning. Machine learning, 28(1), 1997.
  3. K. Chatfield, K. Simonyan, A. Vedaldi, and A. Zisserman. Return of the devil in the details: Delving deep into convolutional nets. In BMVC, 2014.
  4. J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. ImageNet: A large-scale hierarchical image database.In CVPR, 2009.
  5. E. Denton, W. Zaremba, J. Bruna, Y. LeCun, and R. Fergus. Exploiting linear structure within convolutional networks for efficient evaluation. In NIPS, 2014.
  6. D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014.
  7. M. Everingham, L. Van Gool, C. K. I.Williams, J.Winn, and A. Zisserman. The PASCAL Visual Object Classes (VOC) Challenge. IJCV, 2010.
  8. P. Felzenszwalb, R. Girshick, D. McAllester, and D. Ramanan. Object detection with discriminatively trained part based models. TPAMI, 2010.
  9. R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014
  10. R. Girshick, J. Donahue, T. Darrell, and J. Malik. Regionbased convolutional networks for accurate object detection and segmentation. TPAMI, 2015.
  11. K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV, 2014.
  12. J. H. Hosang, R. Benenson, P. Doll´ar, and B. Schiele. What makes for effective detection proposals? arXiv preprint arXiv:1502.05082, 2015.
  13. Y. Jia, E. Shelhamer, J. Donahue, S. Karayev, J. Long, R. Girshick, S. Guadarrama, and T. Darrell. Caffe: Convolutional architecture for fast feature embedding. In Proc. of the ACM International Conf. on Multimedia, 2014.
  14. A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012.
  15. S. Lazebnik, C. Schmid, and J. Ponce. Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories. In CVPR, 2006.
  16. Y. LeCun, B. Boser, J. Denker, D. Henderson, R. Howard, W. Hubbard, and L. Jackel. Backpropagation applied to handwritten zip code recognition. Neural Comp., 1989.
  17. M. Lin, Q. Chen, and S. Yan. Network in network. In ICLR, 2014.
  18. T. Lin, M. Maire, S. Belongie, L. Bourdev, R. Girshick, J. Hays, P. Perona, D. Ramanan, P. Doll´ar, and C. L. Zitnick. Microsoft COCO: common objects in context. arXive-prints, arXiv:1405.0312 [cs.CV], 2014.
  19. P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks. In ICLR, 2014.
  20. K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015.
  21. J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013.
  22. P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features. In CVPR, 2001.
  23. J. Xue, J. Li, and Y. Gong. Restructuring of deep neural network acoustic models with singular value decomposition. In Interspeech, 2013.
  24. X. Zhu, C. Vondrick, D. Ramanan, and C. Fowlkes. Do we need more training data or better models for object detection? In BMVC, 2012.

25. Y. Zhu, R. Urtasun, R. Salakhutdinov, and S. Fidler. segDeepM: Exploiting segmentation and context in deep neural networks for object detection. In CVPR, 2015