论文连接
https://arxiv.org/abs/1504.08083
相关论文翻译链接
R-CNN:https://blog.csdn.net/itlilyer/article/details/107190083
Faster R-CNN:https://blog.csdn.net/itlilyer/article/details/108049850
Mask R-CNN:https://blog.csdn.net/itlilyer/article/details/108441734
本文针对目标检测问题提出了基于区域的快速卷积网络方法(Fast Region-based Convolutional Network:Fast R-CNN)。Fast R-CNN建立子以前工作的基础上,使用深度卷积网络对目标对象进行有效的分类。与以往的实现方案相比,Fast R-CNN使用了几项创新技术来提高训练和测试的速度,同时也提高了检测的精度。**Fast R-CNN与R-CNN相比,训练超深VGG16网络的速度快了9倍,测试的执行效率快了213倍,并且在PASCAL VOC 2012上达到了更高的mAP。**与SPP网络相比,Fast R-CNN训练VGG16快了3倍,测试快了10倍,而且精度更高。Fast R-CNN是用python和C++(使用Caffe)来实现的,可以在https://github.com/rbgirshick/fast-rcnn获取源码,遵循开源MIT License。
最近,通过使用深度卷积网络显著的提高了图片分类和目标检测的精度。与图片分类相比,目标检测更具有挑战性,需要更加复杂的方法来解决检测问题。由于这些复杂性,当前方法的模型训练需要通过多个阶段实现,并且速度慢而且不够优雅。
**这些复杂性是由于目标检测需要精准的定位目标,这就带来了两个主要的挑战。第一,必须处理大量的候选目标位置(通常称为"提议、建议")。第二,这些候选位置只是一个粗略的位置,必须对其精化才能实现精确定位。**这些问题的解决方案需要考虑到速度、精度和简单易实现,并取折中方案。
本文中,我们精简了基于卷积网络的最新目标检测方法的训练过程。我们提出了只有一个阶段的训练算法,在该阶段中既可以进行候选目标分类的训练也可以候选目标的位置优化训练。
该方法可以训练一个非常深的检测网络(VGG16),比RCNN快9倍,比SPPnet快3倍。在执行过程中,该检测网络处理一张图片用0.3秒(不包括生成候选区域的时间),同时在PASCAL VOC 2012上最高精度mAP达到了66%(RCNN 62%)。
RCNN通过使用深度卷积网络来为候选目标进行分类,获得了非常好的目标检测精度。但是,RCNN的缺点也非常的明显:
我们提出了一个新的训练算法解决了RCNN和SPPnet的缺点,并且提升了速度和精度。我们称这个方法为Fast RCNN,因为它的训练和测试速度相对较快。Fast RCNN有以下几个优点:
图1中展示了Fast RCNN的架构。Fast RCNN将整张图片和一组候选目标(object proposal)作为输入。**首先,该网络通过几个卷积和池化层为整张图片生成一个卷积特征图(feature map)。然后,使用感兴趣区(ROI)池化层为每个候选目标从特征图中提取一个固定大小的特征向量。**所有的特征向量都被输入到一系列的全连接层,最后会分成两个并行的输出层:一个输出用来计算K个类别加上一个背景类别(个人理解:不属于k个类别的其他所有种类)的概率估计值;另一层的输出是每一个类别的四个实数(个人理解:输出的是一个候选目标对应到所有类的四个值)。每四个实数标记了一个类别的准确位置的坐标。
RoI池化层**使用最大池化把所有关注的有效区域内的特征值转换为具有固定大小 HxW 的特征图(例如,7x7),H和W是该层的超参,不受任何RoI的影响。**在本文中RoI是卷积特征图中的一个矩形。每个RoI都是四元组(r,c, h, w),(r,c)指定矩形的左上角,(h,w)指定高和宽。
RoI max pooling的实现过程:将大小为h x w的RoI 窗口划分为H x W个子窗口组成的网格,每个子窗口的大小大约是h/H x w/W,然后对每个子窗口执行max pooling作为对应网格单元的输出值。(简单说就是先划分成H x W的网格,然后取每个格子中的最大值)。对于特征图的每个通道要像标准的最大值池化(max pooling)一样单独执行池化操作。RoI层值是SPPnet中空间金字塔池化的一个特例,只有一个金字塔层。我们使用[11]中给定的子窗口池化计算方法。
我们实验了三个预训练的ImageNet网络,每个网络都包含5个最大池化层,卷积层数从5到13不等(4.1章节有更详细的描述)。如果要用预训练的网络来初始化Fast RCNN,需要经过三次转换:
第一,将最后一个最大池化层替换为RoI 池化层,RoI配置的H和W要与网络的第一个全连接层匹配(例如,VGG16中H=W=7)。
第二,将网络最后的全连接层和softmax(这是训练用来做1000类别的ImageNet分类的)替换为前面描述过的两个并行层(一个全连接层和K+1分类的softmax和特定类别的边框回归,个人理解:这里应该是分类和回归前面都带有一个全连接层)
第三,网络的输入修改为两个:一组图片和这些图片对应的RoI。
用反向传播来训练网络所有的权重是Fast RCNN非常重要的能力。 首先,我们解释一下为什么SPPnet不能更新空间金字塔池化层前面的卷积层权重。
根本原因是来自不同图片的训练样本(也就是RoI)在方向传播通过SPP的各层的效率是非常低的, 而SPP和RCNN训练正是用的这种方式。效率地下的原因是每个RoI可能有一个非常大的感受野,达到经常会覆盖整张图片。由于前向传播需要处理整个感受野,这导致训练的输入会非常大(通常是整张图片)(疑问:RCNN的输入是region proposal,不是整张图片,这里该怎么理解???)。
我们提出了一种效率更高的训练方法,发挥训练中共享特征值的优势。Fast R-CNN训练时,小批量的随机梯度下降(SGD)是分层采样的,首先对N张图片采样,然后为每张图片的R/N个RoI采样。关键的是,同一张图片中的RoI在前向传播和反向传播中计算结果是共享的。减小N可以降低每一个小批次(mini-batch)的计算量。比如,当N=2,R=128时,我们提出的训练方案比从128个图片中采样1个RoI(SPP和RCNN的策略)快64倍。(疑问:计算方式理解还不够透彻)
这个策略的一个问题是可能会导致训练收敛变慢,因为来自同一张图片的RoI是相互关联的。但在实际训练中并没有出现该问题,在N=2和R=128时用了比R-CNN更少的迭代也达到了很好的结果。
除了分层采样之外,Fast RCNN对训练过程也进行了简化,将优化softmax分类器和边框回归合并成一个阶段,而不是将训练softmax分类器、SVM、边框回归分成3个独立的阶段。该过程的组成部分(损失、小批量采样策略、通过RoI池化层的反向传播以及SGD超参数)将在下面进行描述。
多任务损失函数。 一个Fast RCNN网络有两个并行的输出。第一个输出是在K+1个类别上的离散概率分布(每个RoI分别属于K+1个类别的概率),p = (p0, . . . , p k )。与往常一样,p是通过在全连接层的K+1个输出上面执行softmax的计算结果。第二个并行输出的是每个类别边框回归的偏移,tk= tkx , tky , tkw , tkh,k是类别的编号。我们使用[9]中给出的参数设定,其中tk指定了相对于候选框的尺度不变的平移和log空间的高/宽的变化。
log空间:图像在存储之前,为了更好的利用其位深信息,可能会采用一类色彩编码技术。如此编码的图像被称为是被存储在“非线性颜色空间”或“对数颜色空间”,通常使用于特定的电影文件形式。 可以了解一下颜色空间相关知识。
训练中每一个RoI都被标记了真实类别u和边框回归的目标v。我们使用一个多任务的损失函数L,将每一个RoI的分类和边框回归一起训练:
L(p, u, tu , v) = Lcls (p, u) + λ[u ≥ 1]Lloc (tu, v), (1)
这里Lcls (p, u) = − log pu,是真实类别u的log损失函数。
第二个任务的损失函数——Lloc,是用一个类别u的边框回归目标真值元组,v =(vx, vy, vw, vh),和对类别u的一个预测元组,tu= tux , tuy , tuw , tuh来计算的。当u≥1时,[u ≥ 1]的结果为1,否则结果为0。按照惯例,背景的类别标记为0。(个人理解:这里的意思就是背景不参与loss值的计算,只算类别大于等于1的)。对于背景的RoI没有真实边界框的概念,因此在计算Lloc时给忽略掉了。对于边框回归,我们使用该损失函数:
我们使用的是L1 损失函数具有更好的鲁棒性,相比于R-CNN和SPP中使用的L2损失函数对异常值不那么敏感。当回归目标没有边界的时候,使用L2来训练需要小心的调整学习率,防止梯度爆炸。公式3中可以看到消除了这种敏感性。
公式1中的λ控制两个任务损失值的平衡。我们将回归目标的真值vi进行年归一化处理,均值为0方差为1。所有的实验中λ都取的1。
我们注意到[6]中使用了同一类的loss训练了一个候选目标类别未知(class-
agnostic object proposal)的网络。与我们的方式不同,[6]中主张使用两个网络系统将定位和分类区分开。OverFeat、R-CNN、SPPnet也训练分类器和边框定位器,但是这些方法都是分阶段训练的,但是对于Fast RCNN并不是最好的选择(5.1章节)。
小批量采样。 在微调过程中,SGD的每个小批量数据包含两张图片N=2,都是随机选择出来的(正如通常的做法,我们实际上是对数据集的排列进行遍历)。每个小批量数据中R=128,也就是每张图片采样64个RoI。如[9]所述,我们从候选框(object proposal)中选取25%的RoI,这些候选框与真值边框的IoU要大于等于0.5。这些RoI只包括前景目标类型标记的样例,即 u≥1。其余的RoI采样的候选框与真值的最大IoU取值范围是[0.1,0.5),参考[11]的实现。这些是背景样例,标记为u=0。较低的阈值0.1似乎可以作为困难负样本发掘的启发式方法[8]。 在训练期间,图像以0.5的概率水平翻转。 没有使用其他数据增强。
通过RoI池化层的反向传播。 反向传播在RoI池化层传播的是导数。为了清楚起见,我们假设每一个小批量数据中(N=1)只包含一张图片,因为很容易可以扩展到多张图片N > 1,因为前向传播对每张图片是单独处理的。
我们设xi∈ R是RoI池化层的第i个激活输入,yrj作为池化层第r个RoI的第j个输出。RoI池化层计算yrj = xi*(r,j),其中i*(r,j) = argmaxi’∈R(r,j)xi’。R(r, j)是作为输入的子窗口的索引集, 输出单元 yrj是在该子窗口上取的最大值池化。一个xi可能会赋值给多个不同的输出yrj。(个人理解:RoI池化的计算方法就是先根据输出的大小M x N,将输入划分为多个子窗口,子窗口个数为M x N,假如输入是W x H,则每个子窗口的大小应该是W/M x H/N,前面有介绍,然后取每个子窗口中的最大值作为输出,这样就得到了想要的M x N的输出。)
RoI池化层的反向函数计算的是损失函数针对softmax计算出来的每一个xi的偏导数:
换句话说,小批量数据中的每一个RoI r和每一个池化的输出单元yrj,如果最大池化输出yrj的输入i是通过softmax选择出来的,那么∂L/∂yrj的偏导数是逐渐累加的。 ** 在反向传播过程中,偏导数∂L/∂yrj已经由RoI池化层的顶部层的反向方式完成了计算** 。
SGD 超参。 在softmax分类和边框回归中使用的全连接层,使用的是均值为0、标准差分别为0.01和0.110的高斯分布来进行初始化。偏差(bias)初始化为0。每一层中权重的学习率是1倍的全局学习率,偏差学习率是2倍的全局学习率,全局学习率是0.001。
我们在VOC07或者VOC12的训练验证集上使用SGD训练年30000个迭代,然后将学习率降到0.0001然后又训练年10000个迭代。如果使用更大的数据集,则使用SGD训练更多的迭代,如下文所述。使用的动量(momentum)为0.9,参数衰减率为0.0005(包括权重和偏差)。
我们探索了两种实现目标检测中尺度不变性的方法:1.采用"暴力"(brute force)学习;2.使用图片金字塔。这些策略来自于[11]中的两种方法。暴力学习方法要在训练和测试阶段,预先定义好每张图片的像素大小。网络需要直接从训练数据中学习尺度不变的目标检测能力。
相比之下,多尺度的方式通过一个图片金字塔为网络提供近似的尺度不变性。在测试时,图像金字塔用于近似的缩放-归一化每个候选框(个人理解:这里应该是将原始图片的proposal进行了缩放和归一化操作,作为金字塔上面图像的proposal)。在多尺度训练中,我们根据[11]每次从一张图片的所有金字塔尺度中随机选取一个,作为一种数据增强的方式。由于GPU内存的限制,我们仅针对较小的网络进行了多尺度训练。
图像金字塔:图像金字塔也叫影像金字塔由原始影像按一定规则生成的由细到粗不同分辨率的影像集。金字塔的底部是图像的高分辨率表示,也就是原始图像,而顶部是低分辨率的近似。最底层的分辨率最高,并且数据量最大,随着层数的增加,其分辨率逐渐降低,数据量也按比例减少。
一旦Fast RCNN网络进行了微调,检测就相当于运行一个前向传播(假设候选框已经提前准备好了)。Fast RCNN网络将一张图片(或着图片金字塔,编码为一个图片列表)和包含R个将被打分的候选框的列表。在测试时,R通常取2000左右,尽管我们会考虑更大的情况(≈45k)。在使用图像金字塔时(propodal 是怎么创建的,不同scale的图像分别产生proposal吗?根据前面的描述,图像金字塔上面的图像对应的proposal应该是将原始图片的proposal进行了缩放)要对每个RoI都会指定一个尺度,使缩放后的RoI区域满足最接近2242像素。
对于每一个测试的RoI,简称r,前向传播输出一个类别的后验概率分布p和一组相对于r的位置的边框偏移预测值(K个类别中每个类别都有自己的精确的边框预测 )。我们使用r的每个类别的估计概率Pr(class = k | r) = pk来表示r对每个类别的检测置信度。然后我们为每个类别分别执行NMS,使用和R-CNN[9]中相同的算法和设置。
奇异值分解(SVD):有一个m×n的实数矩阵A,我们想要把它分解成如下的形式A=UΣVT,其中U和V均为单位正交阵,即有UUT=I和VVT=I,U称为左奇异矩阵,V称为右奇异矩阵,Σ仅在主对角线上有值,我们称它为奇异值,其它元素均为0。上面矩阵的维度分别为U∈Rm×m, Σ∈Rm×n, V∈Rn×n。
对于全图像分类,全连接层占用的计算时间比卷积层少。相反,目标检测中RoI的数量很大,前向传播中有差不多一半的时间消耗在了全链接层(参见图2)。使用截断的SVD来压缩全连接层,可以很容易的加速大型全连接层的计算速度。
在该技术中,利用SVD可以将该层的u x v的权重矩阵W近似的分解为:
在这个分解式中,U是包含W的前t个左奇异向量的u x t矩阵(左奇异矩阵),Σt是包含W的前t个奇异值的t×t对角矩阵,V是包含W的前t个右奇异向量的 v x t矩阵。截断的SVD将参数的数量由uv减到t(u+v),如果t远远小于min(u, v)这种操作的效果是非常明显的。为了压缩网络,将W对应的全连接层替换为两个全连接层,这两个全连接层之间没有非线性的关系(个人理解:两个层之间不加激活函数)。这两层中的第一层使用的权重矩阵是ΣtVT(没有bias),第二层权重使用U(使用与W相同的bias)。当RoI的数量很大时,这个简单的压缩方法可以获得很好的加速效果。
三个主要结果支撑本文的贡献。
我们实验中使用了三个使用ImageNet预训练的模型,可以在https://github.com/BVLC/caffe/wiki/Model-Zoo获取。第一个是R-CNN[9]的CaffeNet(实际上是AlexNet[14])。我们也将此CaffeNet称为模型S,以表示"小"。第二个网络是来自[3]的VGG_CNN_M_1024,与模型S具有相同的深度,但是宽度更大。我们称其为模型M,表示"中"。最后一个网络是来自[20]的极深VGG16网络。由于这个网络最大,我们称为模型L。在此章节中,所有实验的训练和测试都使用了一个尺度(single-scale)(s = 600, 5.2章节由更详细介绍)。
在这些数据集上,我们将Fast RCNN(简称:FRCN)与comp4(外部数据)赛道的公开排行榜(表2,表3)的前几名进行了比较。对于NUS_NIN_c2000 和 BabyLearning方法,此时还没有相关的发布信息,我们也没有找到所使用的ConvNet架构的准确信息,他们三Network-in-Network的变体。所有的其他方法使用与预训练的VGG16网络相同的初始化。
Network-in-Network简称NIN,是2014年ICLR的一篇paper,也是非常经典的论文。采用了更少的参数就达到了AlexNet的效果,Alexet有230M的参数,NIN29M。
创新点: 1.提出一个NIN(网络中的网络)的深度网络结构用以增强模型在感知野在局部图像块的辨别力。
2.提出在卷积层使用非线性代替现有的线性模型。
3.使用一个由MLP组成的micro neural网络作为非线性模型去扫描输入以提取特征图(feature map)
4.deep NIN就是将micro neural以栈的形式组合而成。
Fast RCNN在VOC12上达到的最好性能mAP是65.7%(加上额外数据为68.4%)。同时比基于"慢的"R-CNN的其他方法快了两个数量级。在VOC10上,SegDeepM[25]达到了比Fast RCNN更高的mAP(67.2% vs. 66.1%)。SegDeepM使用VOC12的trainval数据集加上分割标注进行训练,它通过在R-CNN检测基础上执行马尔可夫随机场推理和使用O2P的语义分割方法进行分割的设计来提高R-CNN的精度。Fast RCNN可以替换SegDeepM中的R-CNN,可能会得到更好的结果。当使用扩展后的07++12训练集(见表2标题),Fast RCNN的mAP可以提升到68.8%,超过了SegDeepM。
在VOC07上,我们比较了Fast RCNN和R-CNN、SPPnet。 这些方法使用了相同的VGG16预训练网络并且使用了边框回归。VGG16 SPPnet网络的结果由[11]的作者计算并提供。SPPnet在训练和测试阶段都使用了五种尺度。相对于SPPnet网络,Fast RCNN性能的提升表明即使Fast RCNN在训练和测试中只使用了一种尺度,对卷积层的微调可以给mAP带来很大的提升(63.1到66.9%)。R-CNN达到的mAP是66.0%。还有次要的一点,SPPnet没有使用PASCAL中标记为"困难"的样例进行训练。去掉这些样本后,Fast RCNN的mAP可以达到68.1%。所有的其他实验都使用了"困难"样本。
快速的训练和测试是我们的第二个成果。表4中比较了Fast RCNN、R-CNN、SPPnet在VOC07上的训练时间(小时)、测试速率(img/sec)和mAP的数据。对于VGG16,Fast RCNN在不是用SVD裁剪时比R-CNN快了146倍,使用SVD裁剪快了213倍。训练时间缩短了9倍,从84小时缩短到9.5小时。与SPPnet相比,Fast RCNN训练VGG16快了2.7倍(9.5 vs 25.5小时),不使用SVD裁剪测试快了7倍,使用SVD裁剪快了10倍。Fast RCNN还减少了数百G的硬盘消耗,因为不需要缓存特征值。
** SVD 裁剪。** SVD裁剪可以将检测时间减少30%以上同时mAP只下降了一点(0.3%),而且不需要在模型压缩后再执行额外的微调操作。图2说明了,怎么使用fc6层的25088 x 4096矩阵的前1024个奇异值和fc7层的4096 x 4096矩阵的前256个奇异值来减少运行时间而mAP几乎没有损失。如果压缩后再进行一次微调,速度可能会进一步提升,mAP的损失也会更小。
在SPPnet论文[11]中考虑的深度较低的网络,只对全连接层进行进行微调似乎就可以得到很好的精度。我们假设这个结论不适用与非常深的网络。为了验证微调卷积层对VGG16的重要性,我们使用Fast RCNN进行微调时冻结13层个卷积层,只有全连接层参与训练。这种消融模拟单尺度的SPPnet训练,mAP从66.9%降到61.4%(表5)。这个实验验证了我们的假设:通过RoI池层进行训练对于非常深的网络非常重要。
这是不是意味着所有的卷积层都需要进行微调呢?简单说,不是的。在较小的网络(S和M)我们发现conv1是通用而且与任务无关(众所周知的事实[14])。conv1参与或者不参与学习对mAP的影响都没有参考的意义。对于VGG16,我们发现只需要更新conv3_1及以上的卷积层(13层里面的9层) 。这个发现是很务实的:(1)从conv2_1层开始更新比从conv3_1开始更新,训练速度慢了1.3倍(12.5 vs 9.5小时);(2)从conv1_1开始更新会超过GPU的内存大小。从conv2_1开始更新mAP只增加了0.3%(表5,最后一列)。本文中的Fast R-CNN结果是通过微调VGG16的conv3_1及以上卷积层获得的;所有使用模型S和M的实验更新conv2及以上的卷积层。
我们通过实验来了解Fast RCNN和R-CNN、SPPnet相比是怎样的,并且对设计选择进行评估。根据最佳实践,我们在PASCAL VOC07数据集上进行这些实验
多任务训练很方便,因为不用管理一系列要按照顺序训练的任务。但是它也有可能改善结果,因为这些任务通过共享的特征表示(ConvNet)来相互影响。在Fast RCNN中是否可能通过多任务训练来提高目标检测的精度呢?
为了验证这个问题,我们训练了一个网络作为基准,该网络只使用分类损失函数,等式1中的Lcls(即设置λ = 0)。模型S、M、L的基线数据是表6中各组数据的第一列。注意,这些模型都没有做边框回归。下一列(每一组的第二列),我们使用多任务损失函数来训练网络(等式1中λ = 1),但是在测试阶段关闭边框回归。这就将网络的分类精度单独剥离出来,可以与基线网络进行对等的比较。
通过这三个网络我们发现多任务训练与只训练分类相比可以提升纯分类的精度。提升的范围从0.8到1.1,表明多任务训练的影响是都是积极正向的。
最后我们给基线网络(只使用分类损失函数进行训练)加上边框回归层,然后冻结网络其他的所有参数,使用Lloc进行训练。每一组的第三列展示了这种分阶段的训练方案的结果:mAP比第一列高,但是分阶段训练的性能还是比不上多任务训练(每组的第四列)。
最终结论:多任务训练是有用的
我们比较了两种实现尺度不变目标检测的策略:暴力学习(单一尺度)和图像金字塔(多尺度)。无论哪种情况,我们都把图像的尺度 s定义为最短边的长度。
所有的单一尺度实验使用s = 600像素;有些图片的s可能小于600,因为我们把图像的最长边限制到了1000像素以内,并且还要保持长宽比。选择这些值的原因是为了GPU的内存能够满足微调VGG16。(裁剪图片,减小内存占用)较小的模型不受内存限制,可以受益于更大的s值; 但是,为每个模型优化s并不是我们主要关注的问题。我们注意到PASCAL图片的平均大小是384 x 473像素,因此单一尺度通常1.6倍的上采样。因此,RoI池层的平均有效步幅约为10个像素。
多尺度的设置,我们取与[11]中描述的五种尺度(s ∈ {480, 576, 688, 864, 1200)便于和SPPnet进行比较。但是我们把长边最大值设置为2000,防止超出GPU的内存。
表7中展示了模型S和模型M使用单一尺度和五个尺度训练和测试的数据。[11]中最让人吃惊的结果可能是单一尺度的检测性能几乎和多尺度检测性能一样好。我们的发现也证明了他们的结论:深度卷积网络擅长直接学习尺度不变性。多尺度的方法消耗了大量的算力,但是对mAP只有很小的提升(表7)。在使用VGG16的情况下(模型L),由于受实现细节的约束只能使用单一尺度。但是它的mAP达到了66.9%,略高于[10]中R-CNN公布的66.0%,即使将每个候选框缩放到了固定大小对于R-CNN来说相当月"无限"尺度。
由于单一尺度可以很好的平衡速度和精度,尤其是对非常深的模型,本小节以外的所有实验都用的单一尺度训练和测试,其中s=600像素。
最终结论:单一尺度已经够用了
一个好的目标检测器在提供了更多的训练数据后,性能应该得到提升。zhu等人[24]发现DPM[8]的mAP在经过几百上千个样本训练后就不能在提高。这里我们讨论将VOC07 tarinaval数据集和VOC12 trainval数据集合在一起,大约是原来图片数量的三倍达到16500张,来评估一下Fast RCNN。扩大训练集使在VOC07测试集上的mAP从66.9%提高到了70.0%(表1)。使用这个数据集训练了60000个迭代,而不是40000。
我们在VOC10和VOC 2012上做了类似的实验,我们将VOC07的trainval、test和VOC12的trainval合并到一起构造一个21500个图片的数据集。我们使用这个数据集训练了100000个SGD迭代,并且每40000(替代以前的30000)个迭代学习率就降到之前的十分之一。在VOC10和VOC12上,mAP分别从66.1% 提高到了68.8%和从65.7%提高到 68.4%。
DPM是一个非常成功的目标检测算法,已成为众多分类器、分割、人体姿态和行为分类的重要部分。DPM可以看做是HOG(Histograms of Oriented Gradients)的扩展,大体思路与HOG一致。先计算梯度方向直方图,然后用SVM(Surpport Vector Machine)训练得到物体的梯度模型(Model)。有了这样的模板就可以直接用来分类了,简单理解就是模型和目标匹配。DPM只是在模型上做了很多改进工作。
最终结论:数据集大了对精度提高作用还是很明显的
Fast RCNN使用的是通过微调学习到的分类器,而不是像R-CNN和SPPnet那样训练一个one-vs-rest的后处理的SVM。为了验证这样做的效果,我们在Fast RCNN上面使用困难负样本训练了后处理的SVM。使用了与R-CNN相同的训练算法和超参。
表8展示的数据表明,在三个网络中softmax的性能略优于SVM,mAP提高了从0.1到0.8不等。虽然效果不是很不大,但是它表明,与多阶段训练方法相比"一次性的"微调已经足够了。我们注意到,softmax与one-vs-rest的SVM不同,softmax在给RoI评分的时候在类别之间引入了竞争(个人理解:引入类别竞争就是得分的时候类似于"零和游戏",一个得分多另一个得分就少)
最终结论: softmax的表现还是好于SVM的
目前来看有(大体分类)两种目标检测器:使用候选框的稀疏集合训练的目标检测器(例如选择性搜索)和使用候选框密集集合(例如DPM)训练的目标检测器。对稀疏候选框进行分类是一种瀑布式的,在这个过程中,生成候选框机制首先排除大量的候选对象,而留给分类器的是一个小集合来评估。当把这种瀑布式方式应用到DPM时,同样可以提高精度。我们发现,将候选-分类这种瀑布式的检测模式应用到Fast RCNN 同样可以提升精度。(个人理解:稀疏和密集指的是每张图片上生成的候选框的密度,生成并且使用的多就是密集的,不管生成多少但是使用的少就是稀疏的,但是多少的界限不太清楚。)
使用选择性搜索的质量模式,我们从每幅图像扫描1k到10k个建议,每次重新训练并重新测试模型M。如果候选框纯粹是作为计算的角色,增加每张图像的候选框数量不会损害mAP。
我们发现,随着候选框数量的增长mAP先增长然后有略微的下降(图3中蓝色实线)。这个实验表明给分类器提供更多的候选框并没有什么作用,甚至会损害精度。
没有实际进运行这个实验这个结果时很难预测的。衡量候选框质量的最新技术是平均召回率(AR)。当每张图片取固定数量的候选框时,AR与使用R-CNN的几种候选框方法有很好的关联性。图3中显示随着每张图片中候选框数量的变化,AR(红色实线)与mAP的关联性并不高。必须谨慎的使用AR;更多的候选框导致的更高的AR并不意味着mAP也会增长。 幸运的是,模型M的训练和测试时间不超过2.5小时。Fast RCNN能够更直接、更有效的使用mAP来评估候选框,这比使用代理指标更合适。
我们还研究了Fast RCNN使用密集生成候选框(覆盖了不同尺度、位置、长宽比)的情况,每张图片大约4.5k个框。这个密集集合包含的内容足够全面,每一个选择性搜索框被与它重合度最高的框(IoU最大的)替代时,mAP只下降了1个点(到57.7%,图3中蓝色三角形)。
密集框的统计与选择性搜索框不同。从2000个选择性搜索框的基础上,添加指定数量的密集框,框的数量是从1000 x {2, 4, 6, 8, 10, 32, 45}中随机选择的,然后测试mAP。针对模型M的每一次实验都是重新训练和重新测试的。当添加了这些密集框后,相比与添加更多的选择性搜索框mAP下降的更多,最终下降到53.0%。
我们也实验过只用密集框(每张图片45K个框)训练和测试Fast RCNN。这中配置运行出的mAP为52.9%(蓝色菱形)。最后,我们验证了是否需要用带困难负样本挖掘的SVM来解决密集框的分布。SVMs的表现更差:49.3%(蓝色圆圈)。
最终结论:候选框并不是越多越好,够用就好
我们将Fast RCNN应用到MS COCO数据集来创建一个初步的基线。我们在80000张图片的训练集上训练了240K个迭代然后在评估服务器上使用"test-dev"数据集进行评估。PASCAL-style 达到的mAP为35.9%,新的COCO-style AP达到了19.7%,AP是超过IoU阈值的平均值。
本文提出了Fast RCNN,是对RCNN和SPPnet的整洁和快速进行了升级的版本。除了公布最新的检测结果,我们还提供了实验的细节,我们希望能提供一种新的视角。值的特别注意的是,稀疏候选框似乎可以提升检测质量。 在过去探究这个问题的成本(时间成本)太高了,但是放在Fast RCNN上变得有用了。当然可能存在尚未发现的技术,可以让密集框的性能表现与稀疏候选框一样好。这些方法如果能够发展起来,可能有助于进一步加速目标检测的发展。
[1] J. Carreira, R. Caseiro, J. Batista, and C. Sminchisescu. Semantic segmentation with second-order pooling. In ECCV,2012. 5
[2] R. Caruana. Multitask learning. Machine learning, 28(1),1997. 6
[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. 5
[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. 2
[5] E. Denton, W. Zaremba, J. Bruna, Y. LeCun, and R. Fergus. Exploiting linear structure within convolutional networks for efficient evaluation. In NIPS, 2014. 4
[6] D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014.3
[7] M. Everingham, L. Van Gool, C. K. I. Williams, J. Winn, and A. Zisserman. The PASCAL Visual Object Classes (VOC) Challenge. IJCV, 2010. 1
[8] P. Felzenszwalb, R. Girshick, D. McAllester, and D. Ramanan. Object detection with discriminatively trained part based models. TPAMI, 2010. 3, 7, 8
[9] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014. 1, 3, 4, 8
[10] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Region-based convolutional networks for accurate object detection and segmentation. TPAMI, 2015. 5, 7, 8
[11] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In
ECCV, 2014. 1, 2, 3, 4, 5, 6, 7
[12] J. H. Hosang, R. Benenson, P. Dollár, and B. Schiele. What makes for effective detection proposals? arXiv preprint arXiv:1502.05082, 2015. 8
[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. 2
[14] A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012. 1, 4, 6
[15] S. Lazebnik, C. Schmid, and J. Ponce. Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories. In CVPR, 2006. 1
[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. 1
[17] M. Lin, Q. Chen, and S. Yan. Network in network. In ICLR, 2014. 5
[18] T. Lin, M. Maire, S. Belongie, L. Bourdev, R. Girshick, J. Hays, P. Perona, D. Ramanan, P. Dollár, and C. L. Zitnick. Microsoft COCO: common objects in context. arXiv e-prints, arXiv:1405.0312 [cs.CV], 2014. 8
[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. 1, 3
[20] K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015.1, 5
[21] J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013. 8
[22] P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features. In CVPR, 2001. 8
[23] J. Xue, J. Li, and Y. Gong. Restructuring of deep neural network acoustic models with singular value decomposition. In Interspeech, 2013. 4
[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. 7
[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. 1, 5