Alvin's Blog 这里记录着我的学习之路

Fast R-CNN 论文翻译


摘要

本文提出了一种快速的基于区域的卷积网络方法(fast R-CNN)用于目标检测。Fast R-CNN建立在以前使用的深卷积网络有效地分类目标的成果上。相比于之前的成果,Fast R-CNN采用了多项创新提高训练和测试速度来提高检测精度。Fast R-CNN训练非常深的VGG16网络比R-CNN快9倍,测试时间快213倍,并在PASCAL VOC上得到更高的精度。与SPPnet相比,fast R-CNN训练VGG16网络比他快3倍,测试速度快10倍,并且更准确。Fast R-CNN的Python和C ++(使用Caffe)实现以MIT开源许可证发布在:https://github.com/rbgirshick/fast-rcnn

简介

最近,深度卷积网络1 2已经显著提高了图像分类1和目标检测3 4的准确性。与图像分类相比,目标检测是一个更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,当前的方法(例如,3 5 4 6)采用多级流水线的方式训练模型,既慢且精度不高。

复杂性的产生是因为检测需要目标的精确定位,这就导致两个主要的难点。首先,必须处理大量候选目标位置(通常称为“提案”)。 第二,这些候选框仅提供粗略定位,其必须被精细化以实现精确定位。 这些问题的解决方案经常会影响速度,准确性或简单性。

在本文中,我们简化了最先进的基于卷积网络的目标检测器的训练过程3 5。我们提出一个单阶段训练算法,联合学习候选框分类和修正他们的空间位置。

所得到的方法用来训练非常深的检测网络(例如VGG16) 比R-CNN快9倍,比SPPnet快3倍。在运行时,检测网络在PASCAL VOC 2012数据集上实现最高准确度,其中mAP为66%(R-CNN为62%),每张图像处理时间为0.3秒,不包括候选框的生成(所有的时间都是使用一个超频到875MHz的Nvidia K40 GPU测试的)。

R-CNN与SPPnet

基于区域的卷积网络方法(RCNN)通过使用深度卷积网络来分类目标候选框,获得了很高的目标检测精度。然而,R-CNN具有显着的缺点:

  1. 训练过程是多级流水线。R-CNN首先使用目标候选框对卷积神经网络使用log损失进行微调。然后,它将卷积神经网络得到的特征送入SVM。 这些SVM作为目标检测器,替代通过微调学习的softmax分类器。 在第三个训练阶段,学习检测框回归。
  2. 训练在时间和空间上是的开销很大。对于SVM和检测框回归训练,从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,这个过程在单个GPU上需要2.5天(VOC07 trainval上的5k个图像)。这些特征需要数百GB的存储空间。
  3. 目标检测速度很慢。在测试时,从每个测试图像中的每个目标候选框提取特征。用VGG16网络检测目标每个图像需要47秒(在GPU上)。

R-CNN很慢是因为它为每个目标候选框进行卷积神经网络正向传递,而不共享计算。SPPnet5通过共享计算加速R-CNN。SPPnet5计算整个输入图像的卷积特征图,然后使用从共享特征图提取的特征向量来对每个候选框进行分类。通过最大池化将候选框内的特征图转化为固定大小的输出(例如,6X6)来提取针对候选框的特征。多个输出被池化,然后连接成空间金字塔池7。SPPnet在测试时将R-CNN加速10到100倍。由于更快的候选框特征提取训练时间也减少3倍。

SPP网络也有显著的缺点。像R-CNN一样,训练过程是一个多级流水线,涉及提取特征,使用log损失对网络进行微调,训练SVM分类器,最后拟合检测框回归。特征也写入磁盘。但与R-CNN不同,在5中提出的微调算法不能更新在空间金字塔池之前的卷积层。不出所料,这种限制(固定的卷积层)限制了深层网络的精度。

贡献

我们提出一种新的训练算法,修正R-CNN和SPPnet的缺点,同时提高其速度和准确性。因为它能比较快地进行训练和测试,我们称之为Fast R-CNN。Fast RCNN方法有以下几个优点:

  1. 比R-CNN和SPPnet具有更高的目标检测精度(mAP)。
  2. 训练是使用多任务损失的单阶段训练。
  3. 训练可以更新所有网络层参数。
  4. 不需要磁盘空间缓存特征。

Fast R-CNN使用Python和C++(Caffe8)语言编写,以MIT开源许可证发布在:https://github.com/rbgirshick/fast-rcnn

Fast R-CNN架构与训练

Fast R-CNN的架构如下图(图1)所示:

Figure1

图1. Fast R-CNN架构。输入图像和多个感兴趣区域(RoI)被输入到全卷积网络中。每个RoI被池化到固定大小的特征图中,然后通过全连接层(FC)映射到特征向量。网络对于每个RoI具有两个输出向量:Softmax概率和每类检测框回归偏移量。该架构是使用多任务丢失端到端训练的。

Fast R-CNN网络将整个图像和一组候选框作为输入。网络首先使用几个卷积层(conv)和最大池化层来处理整个图像,以产生卷积特征图。然后,对于每个候选框,RoI池化层从特征图中提取固定长度的特征向量。每个特征向量被送入一系列全连接(fc)层中,其最终分支成两个同级输出层 :一个输出$K$个类别加上1个背景类别的Softmax概率估计,另一个为$K$个类别的每一个类别输出四个实数值。每组4个值表示$K$个类别的一个类别的检测框位置的修正。

RoI池化层

RoI池化层使用最大池化将任何有效的RoI内的特征转换成具有$H \times W$(例如,$7 \times 7$)的固定空间范围的小特征图,其中$H$和$W$是层的超参数,独立于任何特定的RoI。在本文中,RoI是卷积特征图中的一个矩形窗口。 每个RoI由指定其左上角$(r, c)$及其高度和宽度$(h, w)$的四元组$(r, c, h, w)$定义。

RoI最大池化通过将大小为$h \times w$的RoI窗口分割成$H \times W$个网格,子窗口大小约为$h/H \times w/W$,然后对每个子窗口执行最大池化,并将输出合并到相应的输出网格单元中。同标准的最大池化一样,池化操作独立应用于每个特征图通道。RoI层只是SPPnets 5中使用的空间金字塔池层的特殊情况,其只有一个金字塔层。 我们使用5中给出的池化子窗口计算方法。

从预训练网络初始化

我们实验了三个预训练的ImageNet9网络,每个网络有五个最大池化层和五到十三个卷积层(网络详细信息,请参见实验配置)。当预训练网络初始化fast R-CNN网络时,其经历三个变换。

首先,最后的最大池化层由RoI池层代替,其将H和W设置为与网络的第一个全连接层兼容的配置(例如,对于VGG16,$H = W = 7$)。

然后,网络的最后一格全连接层和Softmax(其被训练用于1000类ImageNet分类)被替换为前面描述的两个同级层(全连接层和$K + 1$个类别的Softmax以及类别特定的检测框回归)。

最后,网络被修改为采用两个数据输入:图像的列表和这些图像中的RoI的列表。

微调

用反向传播训练所有网络权重是Fast R-CNN的重要能力。首先,让我们阐明为什么SPPnet无法更新低于空间金字塔池化层的权重。

根本原因是当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播是非常低效的,这正是训练R-CNN和SPPnet网络的方法。低效的部分是因为每个RoI可能具有非常大的感受野,通常跨越整个输入图像。由于正向传播必须处理整个感受野,训练输入很大(通常是整个图像)。

我们提出了一种更有效的训练方法,利用训练期间的特征共享。在Fast RCNN网络训练中,随机梯度下降(SGD)的小批量是被分层采样的,首先采样$N$个图像,然后从每个图像采样$R/N$个 RoI。关键的是,来自同一图像的RoI在向前和向后传播中共享计算和内存。减小$N$,就减少了小批量的计算。例如,当$N = 2$和$R = 128$时,得到的训练方案比从128幅不同的图采样一个RoI(即R-CNN和SPPnet的策略)快64倍。

这个策略的一个令人担心的问题是它可能导致训练收敛变慢,因为来自相同图像的RoI是相关的。这个问题似乎在实际情况下并不存在,当$N = 2$和$R = 128$时,我们使用比R-CNN更少的SGD迭代就获得了良好的结果。

除了分层采样,Fast R-CNN使用了一个精细的训练过程,在微调阶段联合优化Softmax分类器和检测框回归,而不是分别在三个独立的阶段训练softmax分类器,SVM和回归器3 [^ 11]。 下面将详细描述该过程(损失,小批量采样策略,通过RoI池化层的反向传播和SGD超参数)。

多任务损失。Fast R-CNN网络具有两个同级输出层。 第一个输出在$K + 1$个类别上的离散概率分布(每个RoI),$p =(p_0,…,p_K)$。 通常,通过全连接层的$K + 1$个输出上的Softmax来计算$p$。第二个输出层输出检测框回归偏移,$t^k = (t^k_x, t^k_y, t^k_w, t^k_h)$,对于由k索引的K个类别中的每一个。 我们使用3中给出的$t^k$的参数化,其中$t^k$指定相对于候选框的尺度不变转换和对数空间高度/宽度移位。

每个训练的RoI用类真值$u$和检测框回归目标真值$v$标记。我们对每个标记的RoI使用多任务损失$L$以联合训练分类和检测框回归: \(L(p, u, t^u, v) = L_{cls}(p, u) + \lambda \lbrack u \ge 1 \rbrack L_{loc}(t^u, v) \tag{1}\)

其中$L_{cls}(p, u) = -\log p_u$, 是类真值$u$的log损失。

对于类真值$u$,第二个损失$L_{loc}$是定义在检测框回归目标真值元组$u, v = (v_x, v_y, v_w, v_h)$和预测元组$t^u = (t^u_x, t^u_y, t^u_w, t^u_h)$上的损失。 Iverson括号指示函数$\lbrack u \ge 1 \rbrack$当$u \ge 1$的时候为值1,否则为0。按照惯例,背景类标记为$u = 0$。对于背景RoI,没有检测框真值的概念,因此$L_{loc}$被忽略。对于检测框回归,我们使用损失 \(L_{loc}(t^u, v) = \sum_{i \in \lbrace x, y, w, h \rbrace}smooth_{L_1}(t^u_i - v_i) \tag{2}\) 其中: \(smooth_{L_1}(x) = \left\{\begin{matrix} 0.5x^2 & if \vert x \vert \lt 1\\ \vert x \vert - 0.5 & otherwise \end{matrix}\right. \tag{3}\) 是鲁棒的$L_1$损失,对于异常值比在R-CNN和SPPnet中使用的$L_2$损失更不敏感。当回归目标无界时,具有$L_2$损失的训练可能需要仔细调整学习速率,以防止爆炸梯度。公式$(3)$消除了这种灵敏度。

公式$(1)$中的超参数$\lambda$控制两个任务损失之间的平衡。我们将回归目标真值$v_i$归一化为具有零均值和单位方差。所有实验都使用$\lambda = 1$。

我们注意到10使用相关损失来训练一个类别无关的目标候选网络。 与我们的方法不同的是10倡导一个分离定位和分类的双网络系统。OverFeat4,R-CNN3和SPPnet5也训练分类器和检测框定位器,但是这些方法使用逐级训练,这对于Fast RCNN来说不是最好的选择。

小批量采样。在微调期间,每个SGD的小批量由$N = 2$个图像构成,均匀地随机选择(如通常的做法,我们实际上迭代数据集的排列)。 我们使用大小为$R = 128$的小批量,从每个图像采样64个RoI。 如在3中,我们从候选框中获取25%的RoI,这些候选框与检测框真值的IoU至少为0.5。 这些RoI只包括用前景对象类标记的样本,即$u \ge 1$。 剩余的RoI从候选框中采样,该候选框与检测框真值的最大IoU在区间$\lbrack 0.1, 0.5)$上5。 这些是背景样本,并用$u = 0$标记。0.1的阈值下限似乎充当难负样本重训练的启发式算法11。 在训练期间,图像以概率0.5水平翻转。不使用其他数据增强。

通过RoI池化层的反向传播。反向传播通过RoI池化层。为了清楚起见,我们假设每个小批量($N = 1$)只有一个图像,扩展到$N > 1$是显而易见的,因为前向传播独立地处理所有图像。

令$x_i \in \mathbb{R}$是到RoI池化层的第$i$个激活输入,并且令$y_{rj}$是来自第$r$个RoI层的第$j$个输出。RoI池化层计算$y_{rj} = x_{i \ast(r, j)}$,其中$x_{i \ast(r, j)} = argmax_{i’ \in \mathcal{R}(r, j)}x_{i’}$。$\mathcal{R}(r, j)$是输出单元$y_{rj}$最大池化的子窗口中的输入的索引集合。单个$x_i$可以被分配给几个不同的输出$y_{rj}$。

RoI池化层反向传播函数通过遵循argmax switches来计算关于每个输入变量$x_i$的损失函数的偏导数: \(\frac{\partial L}{\partial x_i} = \sum_r \sum_j \lbrack i = i^{\ast}(r, j) \rbrack \frac{\partial L}{\partial y_{rj}} \tag{4}\) 换句话说,对于每个小批量RoI $r$和对于每个池化输出单元$y_{rj}$,如果$i$是$y_{rj}$通过最大池化选择的argmax,则将这个偏导数$\frac{\partial L}{\partial y_{rj}}$积累下来。在反向传播中,偏导数$\frac{\partial L}{\partial y_{rj}}$已经由RoI池化层顶部的层的反向传播函数计算。

SGD超参数。用于Softmax分类和检测框回归的全连接层的权重分别使用具有方差0.01和0.001的零均值高斯分布初始化。偏置初始化为0。所有层的权重学习率为1倍的全局学习率,偏置为2倍的全局学习率,全局学习率为0.001。 当对VOC07或VOC12 trainval训练时,我们运行SGD进行30k次小批量迭代,然后将学习率降低到0.0001,再训练10k次迭代。当我们训练更大的数据集,我们运行SGD更多的迭代,如下文所述。 使用0.9的动量和0.0005的参数衰减(权重和偏置)。

尺度不变性

我们探索两种实现尺度不变对象检测的方法:(1)通过“brute force”学习和(2)通过使用图像金字塔。 这些策略遵循5中的两种方法。 在“brute force”方法中,在训练和测试期间以预定义的像素大小处理每个图像。网络必须直接从训练数据学习尺度不变性目标检测。

相反,多尺度方法通过图像金字塔向网络提供近似尺度不变性。 在测试时,图像金字塔用于大致缩放-规范化每个候选框。 在多尺度训练期间,我们在每次图像采样时随机采样金字塔尺度,遵循5,作为数据增强的形式。由于GPU内存限制,我们只对较小的网络进行多尺度训练。

Fast R-CNN检测

一旦Fast R-CNN网络被微调完毕,检测相当于运行前向传播(假设候选框是预先计算的)。网络将图像(或图像金字塔,编码为图像列表)和待计算概率的$R$个候选框的列表作为输入。在测试的时候,$R$通常在2000左右,虽然我们将考虑将它变大(约45k)的情况。当使用图像金字塔时,每个RoI被缩放,使其最接近5中的$224^2$个像素。

对于每个测试的RoI $r$,正向传播输出类别后验概率分布$p$和相对于$r$的预测的检测框框偏移集合($K$个类别中的每一个获得其自己的精细检测框预测)。我们使用估计的概率$Pr(class = k \vert r) \triangleq p_k$为每个对象类别$k$分配$r$的检测置信度。然后,我们使用R-CNN算法的设置和对每个类别独立执行非最大抑制3

使用截断的SVD来进行更快的检测

对于整体图像分类,与卷积层相比,计算全连接层花费的时间较小。相反,为了检测,要处理的RoI的数量很大,并且接近一半的正向传递时间用于计算全连接层(参见图2)。大的全连接层容易通过用截短的SVD压缩来加速12 13

在这种技术中,层的$u \times v$权重矩阵$W$通过SVD被近似分解为: \(W \thickapprox U\Sigma_tV^T \tag{5}\) 在这种分解中,$U$是一个$u \times t$的矩阵,包括$W$的前$t$个左奇异向量,$\Sigma_t$是$t \times t$对角矩阵,其包含$W$的前$t$个奇异值,并且$V$是$v \times t$矩阵,包括$W$的前$t$个右奇异向量。截断SVD将参数计数从$uv$减少到$t(u + v)$个,如果$t$远小于$min(u, v)$,则SVD可能是重要的。 为了压缩网络,对应于$W$的单个全连接层由两个全连接层替代,在它们之间没有非线性。这些层中的第一层使用权重矩阵$\Sigma_tV^T$(没有偏置),并且第二层使用$U$(其中原始偏差与$W$相关联)。当RoI的数量大时,这种简单的压缩方法给出良好的加速。

主要结果

三个主要结果支持本文的贡献:

  1. VOC07,2010和2012的最高的mAP。
  2. 相比R-CNN,SPPnet,快速训练和测试。
  3. 在VGG16中微调卷积层改善了mAP。

实验配置

我们的实验使用了三个经过预训练的ImageNet网络模型,这些模型可以在线获得(https://github.com/BVLC/caffe/wiki/Model-Zoo)。第一个是来自R-CNN3的CaffeNet(实质上是AlexNet1)。 我们将这个CaffeNet称为模型S,即小模型。第二网络是来自14的VGG_CNN_M_1024,其具有与S相同的深度,但是更宽。 我们把这个网络模型称为M,即中等模型。最后一个网络是来自15的非常深的VGG16模型。由于这个模型是最大的,我们称之为L。在本节中,所有实验都使用单尺度训练和测试($s = 600$,详见尺度不变性:暴力或精细?)。

VOC 2010和2012数据集结果

Table 2

表2. VOC 2010测试检测平均精度(%)。 BabyLearning使用基于16的网络。 所有其他方法使用VGG16。训练集:12:VOC12 trainval,Prop.:专有数据集,12+seg:12具有分段注释,07++12:VOC07 trainval,VOC07测试和VOC12 trainval的联合。

Table 3

表3. VOC 2012测试检测平均精度(%)。 BabyLearning和NUS_NIN_c2000使用基于16的网络。 所有其他方法使用VGG16。训练设置:见表2,Unk.:未知。

如上表(表2,表3)所示,在这些数据集上,我们比较Fast R-CNN(简称FRCN)和公共排行榜中comp4(外部数据)上的主流方法(http://host.robots.ox.ac.uk:8080/leaderboard ,访问时间是2015.4.18)。对于NUS_NIN_c2000和BabyLearning方法,目前没有其架构的确切信息,它们是Network-in-Network的变体16。所有其他方法从相同的预训练VGG16网络初始化。

Fast R-CNN在VOC12上获得最高结果,mAP为65.7%(加上额外数据为68.4%)。它也比其他方法快两个数量级,这些方法都基于比较“慢”的R-CNN网络。在VOC10上,SegDeepM 6获得了比Fast R-CNN更高的mAP(67.2%对比66.1%)。SegDeepM使用VOC12 trainval训练集训练并添加了分割的标注,它被设计为通过使用马尔可夫随机场推理R-CNN检测和来自$O_2P$17的语义分割方法的分割来提高R-CNN精度。Fast R-CNN可以替换SegDeepM中使用的R-CNN,这可以导致更好的结果。当使用放大的07++12训练集(见表2标题)时,Fast R-CNN的mAP增加到68.8%,超过SegDeepM。

VOC 2007数据集上的结果

在VOC07数据集上,我们比较Fast R-CNN与R-CNN和SPPnet的mAP。 所有方法从相同的预训练VGG16网络开始,并使用边界框回归。 VGG16 SPPnet结果由5的作者提供。SPPnet在训练和测试期间使用五个尺度。Fast R-CNN对SPPnet的改进说明,即使Fast R-CNN使用单个尺度训练和测试,卷积层微调在mAP中提供了大的改进(从63.1%到66.9%)。R-CNN的mAP为66.0%。 作为次要点,SPPnet在PASCAL中没有使用被标记为“困难”的样本进行训练。 除去这些样本,Fast R-CNN 的mAP为68.1%。 所有其他实验都使用被标记为“困难”的样本。

训练和测试时间

Table 4

表4. Fast RCNN,R-CNN和SPPnet中相同模型之间的运行时间比较。Fast R-CNN使用单尺度模式。SPPnet使用5中指定的五个尺度,由5的作者提供在Nvidia K40 GPU上的测量时间。

快速的训练和测试是我们的第二个主要成果。表4比较了Fast RCNN,R-CNN和SPPnet之间的训练时间(小时),测试速率(每秒图像数)和VOC07上的mAP。对于VGG16,没有截断SVD的Fast R-CNN处理图像比R-CNN快146倍,有截断SVD的R-CNN快213倍。训练时间减少9倍,从84小时减少到9.5小时。与SPPnet相比,没有截断SVD的Fast RCNN训练VGG16网络比SPPnet快2.7倍(9.5小时对25.5小时),测试时间快7倍,有截断SVD的Fast RCNN比的SPPnet快10倍。 Fast R-CNN还不需要数百GB的磁盘存储,因为它不缓存特征。

截断SVD。截断的SVD可以将检测时间减少30%以上,同时在mAP中只有很小(0.3个百分点)的下降,并且无需在模型压缩后执行额外的微调。

Figure 2

图2. 截断SVD之前和之后VGG16的时间分布。在SVD之前,完全连接的层fc6和fc7需要45%的时间。

图2示出了如何使用来自VGG16的fc6层中的$25088 \times 4096$矩阵的顶部1024个奇异值和来自fc7层的$4096 \times 4096$矩阵的顶部256个奇异值减少运行时间,而在mAP中几乎没有损失。如果在压缩之后再次微调,则可以在mAP中具有更小的下降的情况下进一步加速。

微调哪些层?

对于在SPPnet论文5中考虑的不太深的网络,仅微调全连接层似乎足以获得良好的精度。我们假设这个结果不适用于非常深的网络。为了验证微调卷积层对于VGG16的重要性,我们使用Fast R-CNN微调,但冻结十三个卷积层,以便只有全连接层学习。这种消融模拟单尺度SPPnet训练,将mAP从66.9%降低到61.4%(表5)。这个实验验证了我们的假设:通过RoI池化层的训练对于非常深的网是重要的。

Table 5

表5. 限制哪些层对VGG16进行微调产生的影响。微调$\ge$fc6模拟单尺度SPPnet训练算法5。 SPPnet L是使用五个尺度,以显著(7倍)的速度成本获得的结果。

这是否意味着所有卷积层应该微调?没有。在较小的网络(S和M)中,我们发现conv1(第一个卷积层)是通用的和任务独立的(一个众所周知的事实1)。允许conv1学习或不学习,对mAP没有很有意义的影响。对于VGG16,我们发现只需要更新conv3_1及以上(13个卷积层中的9个)的层。这种观察是实用的:(1)从conv2_1更新使训练变慢1.3倍(12.5小时对比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)18相互影响。多任务训练能提高Fast R-CNN中的目标检测精度吗?

为了测试这个问题,我们训练仅使用公式$(1)$中的分类损失$L_{cls}$(即设置$\lambda = 0$)的基准网络。这些基线是表6中每组的第一列。请注意,这些模型没有检测框回归。接下来(每组的第二列),是我们采用多任务损失(公式$(1)$,$\lambda = 1$)训练的网络,但是我们在测试时禁用检测框回归。这隔离了网络的分类准确性,并允许与基准网络的apple to apple的比较。

在所有三个网络中,我们观察到多任务训练相对于单独的分类训练提高了纯分类精度。改进范围从+0.8到+1.1 个mAP点,显示了多任务学习的一致的积极效果。

最后,我们采用基线模型(仅使用分类损失进行训练),加上检测回归层,并使用$L_{loc}$训练它们,同时保持所有其他网络参数冻结。每组中的第三列显示了这种逐级训练方案的结果:mAP相对于第一列改进,但逐级训练表现不如多任务训练(每组第四列)。

Table 6

表6. 多任务训练(每组第四列)改进了分段训练(每组第三列)的mAP。

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

我们比较两个策略实现尺度不变物体检测:暴力学习(单尺度)和图像金字塔(多尺度)。在任一情况下,我们将图像的尺度$s$定义为其最短边的长度。

所有单尺度实验使用$s = 600$像素,对于一些图像,$s$可以小于600,因为我们保持横纵比缩放图像,并限制其最长边为1000像素。选择这些值使得VGG16在微调期间不至于GPU内存不足。较小的模型占用显存更少,所以可受益于较大的$s$值。然而,每个模型的优化不是我们的主要的关注点。我们注意到PASCAL图像是384×473像素的,因此单尺度设置通常以1.6倍的倍数上采样图像。因此,RoI池化层的平均有效步进为约10像素。

在多尺度设置中,我们使用5中指定的相同的五个尺度($s \in \lbrace 480, 576, 688, 864, 1200 \rbrace$)以方便与SPPnet进行比较。但是,我们以2000像素为上限,以避免GPU内存不足。

表7显示了当使用一个或五个尺度进行训练和测试时的模型S和M的结果。也许在5中最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的研究结果能证明他们的结果:深度卷积网络擅长直接学习尺度不变性。多尺度方法消耗大量的计算时间仅带来了很小的mAP增加(表7)。在VGG16(模型L)的情况下,我们受限于实施细节仅能使用单个尺度。然而,它得到了66.9%的mAP,略高于R-CNN的66.0%19,尽管R-CNN在每个候选区域被缩放为规范大小,在意义上使用了“无限”尺度。

由于单尺度处理提供速度和精度之间的最佳折衷,特别是对于非常深的模型,本小节以外的所有实验使用单尺度训练和测试,$s = 600$像素。

Table 7

表7. 多尺度与单尺度。SPPnet ZF(类似于模型S)的结果来自5。 具有单尺度的较大网络提供最佳的速度/精度平衡。(L在我们的实现中不能使用多尺度,因为GPU内存限制。)

我们需要更过训练数据吗?

当提供更多的训练数据时,好的目标检测器应该会得到改善。 Zhu等人20发现DPM11mAP在只有几百到千个训练样本的时候就饱和了。在这里我们增加VOC07 trainval训练集与VOC12 trainval训练集,大约增加到三倍的图像,数量达到16.5k,以评估Fast R-CNN。扩大训练集提高了VOC07测试的mAP,从66.9%到70.0%(表1)。 当对这个数据集进行训练时,我们使用60k次小批量迭代而不是40k。

Table 1

表1. VOC 2007测试检测平均精度(%)。 所有方法都使用VGG16。 训练集:07:VOC07 trainval,07 \diff:07没有“困难”的样本,07 + 12:07和VOC12训练的联合。 SPPnet结果由5的作者提供。

我们对VOC10和2012进行类似的实验,我们用VOC07 trainval,test和VOC12 trainval构造了21.5k图像的数据集。当训练这个数据集时,我们使用100k次SGD迭代和每40k次迭代(而不是每30k次)降低学习率10倍。对于VOC10和2012,mAP分别从66.1%提高到68.8%和从65.7%提高到68.4%。

SVM分类是否优于Softmax?

Fast R-CNN在微调期间使用softmax分类器学习,而不是如在R-CNN和SPPnet中训练线性SVM。为了理解这种选择的影响,我们在Fast R-CNN中实施了具有难负采样重训练的SVM训练。我们使用与R-CNN中相同的训练算法和超参数。

Table 8

表8. 用Softmax的Fast R-CNN对比用SVM的Fast RCNN(VOC07 mAP)。

对于所有三个网络,Softmax略优于SVM,mAP分别提高了0.1和0.8个点。这种效应很小,但是它表明与先前的多级训练方法相比,“一次性”微调是足够的。我们注意到,Softmax,不像SVM那样,在分类RoI时引入类之间的竞争。

更多的候选区域更好吗?

存在(广义地)两种类型的目标检测器:使用候选区域的稀疏集合(例如,选择性搜索21)和使用密集集合(例如DPM11)。分类稀疏提议是级联的一种类型22,其中提议机制首先拒绝大量候选者,让分类器来评估留下的小集合。当应用于DPM检测时,该级联提高了检测精度21。我们发现提案分类器级联也提高了Fast R-CNN的精度。

使用选择性搜索的质量模式,我们扫描每个图像1k到10k个候选框,每次重新训练和重新测试模型M.如果候选框纯粹扮演计算的角色,增加每个图像的候选框数量不应该损害mAP。

Figure 3

图3. 各种候选区域方案的VOC07测试mAP和AR。

我们发现mAP上升,然后随着候选区域计数增加而略微下降(图3,实线蓝线)。这个实验表明,用更多的候选区域没有帮助,甚至稍微有点伤害准确性。

如果不实际运行实验,这个结果很难预测。用于测量候选区域质量的最先进的技术是平均召回率(AR)23。当对每个图像使用固定数量的候选区域时,AR与使用R-CNN的几种候选区域方法良好地相关。图3示出了AR(实线红线)与mAP不相关,因为每个图像的候选区域数量是变化的。AR必须小心使用,由于更多的候选区域更高的AR并不意味着mAP会增加。幸运的是,使用模型M的训练和测试需要不到2.5小时。因此,Fast R-CNN能够高效地,直接地评估目标候选区域mAP,这优于代理度量。

我们还调查Fast R-CNN当使用密集生成框(在缩放,位置和宽高比上),大约45k个框/图像。这个密集集足够丰富,当每个选择性搜索框被其最近(IoU)密集框替换时,mAP只降低1个点(到57.7%,图3,蓝色三角形)。

密集框的统计数据与选择性搜索框的统计数据不同。从2k个选择性搜索框开始,我们在添加$1000 \times \lbrace 2, 4, 6, 8, 10, 32, 45 \rbrace$的随机样本密集框时测试mAP。对于每个实验,我们重新训练和重新测试模型M。当添加这些密集框时,mAP比添加更多选择性搜索框时下降得更强,最终达到53.0%。

我们还训练和测试Fast R-CNN只使用密集框(45k/图像)。此设置的mAP为52.9%(蓝色菱形)。最后,我们检查是否需要使用难样本重训练的SVM来处理密集框分布。 SVM做得更糟:49.3%(蓝色圆圈)。

MS COCO初步结果

我们将fast R-CNN(使用VGG16)应用于MS COCO数据集24,以建立初步基线。我们对80k图像训练集进行了240k次迭代训练,并使用评估服务器对“test-dev”集进行评估。 PASCAL标准下的mAP为35.9%;。新的COCO标准下的AP(也平均)为19.7%。

结论

本文提出Fast R-CNN,一个对R-CNN和SPPnet干净,快速的更新。 除了报告目前的检测结果之外,我们还提供了详细的实验,希望提供新的见解。 特别值得注意的是,稀疏目标候选区域似乎提高了检测器的质量。 过去探索这个问题过于昂贵(在时间上),但Fast R-CNN使其变得可能。当然,可能存在允许密集盒执行以及稀疏候选框的尚未发现的技术。这样的方法如果被开发,可以帮助进一步加速目标检测。

致谢:感谢Kaiming He,Larry Zitnick和Piotr Dollár的帮助和鼓励。

参考文献:

  1. A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012.  2 3 4

  2. 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. 

  3. R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014.  2 3 4 5 6 7 8 9

  4. 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.  2 3

  5. K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV, 2014.  2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

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

  7. S. Lazebnik, C. Schmid, and J. Ponce. Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories. In CVPR, 2006. 

  8. 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. 

  9. J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. FeiFei. ImageNet: A large-scale hierarchical image database. In CVPR, 2009. 

  10. D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014.  2

  11. P. Felzenszwalb, R. Girshick, D. McAllester, and D. Ramanan. Object detection with discriminatively trained part based models. TPAMI, 2010.  2 3

  12. E. Denton, W. Zaremba, J. Bruna, Y. LeCun, and R. Fergus. Exploiting linear structure within convolutional networks for efficient evaluation. In NIPS, 2014. 

  13. J. Xue, J. Li, and Y. Gong. Restructuring of deep neural network acoustic models with singular value decomposition. In Interspeech, 2013. 

  14. K. Chatfield, K. Simonyan, A. Vedaldi, and A. Zisserman. Return of the devil in the details: Delving deep into convolutional nets. In BMVC, 2014. 

  15. K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015. 

  16. M. Lin, Q. Chen, and S. Yan. Network in network. In ICLR, 2014.  2 3

  17. J. Carreira, R. Caseiro, J. Batista, and C. Sminchisescu. Semantic segmentation with second-order pooling. In ECCV, 2012. 

  18. R. Caruana. Multitask learning. Machine learning, 28(1), 1997. 

  19. R. Girshick, J. Donahue, T. Darrell, and J. Malik. Region-based convolutional networks for accurate object detection and segmentation. TPAMI, 2015. 

  20. X. Zhu, C. Vondrick, D. Ramanan, and C. Fowlkes. Do we need more training data or better models for object detection? In BMVC, 2012. 

  21. J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013.  2

  22. P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features. In CVPR, 2001. 

  23. J. H. Hosang, R. Benenson, P. Dollár, and B. Schiele. What makes for effective detection proposals? arXiv preprint arXiv:1502.05082, 2015. 

  24. 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. 


相关文章

上一篇 R-CNN 论文翻译

评论