OHEM:Training Region-based Object Detectors with Online Hard Example Mining

文章地址:https://arxiv.org/abs/1604.03540

0 摘要

目标检测领域在基于区域的ConvNets的浪潮中取得了重大进展,但是他们的训练过程仍然包括很多启发式和超参数,调整成本很高。我们提出了一种简单但令人惊讶的有效在线难例挖掘(OHEM)算法,用于训练基于区域的ConvNet检测器。我们的动机与以往一样 - 检测数据集包含大量简单示例和少量难例。自动选择这些难例可以使训练更加有效和高效。OHEM是一种简单直观的算法,可以消除常用的几种启发式和超参数。但更重要的是,它可以在PASCAL VOC 2007和2012等基准测试中获得一致且显著的检测性能提升。随着数据集变得越来越大,越来越难以处理,OHEM的有效性就越强,MS COCO数据集的结果就证明了这一点。此外,结合该领域的互补进展,OHEM分别在PASCAL VOC 2007和2012上获得78.9%和76.3%mAP的最新结果。

1 简介

图像分类和目标检测是两个基本的计算机视觉任务。目标检测器通常通过将目标检测弱化为图像分类问题来实现。但是这种弱化带来了自然图像分类任务中没有的新挑战:目标检测数据集中标注的目标数量和背景区域(不包含任何感兴趣目标)的数量严重不均衡。在使用滑动窗口目标检测器的情况下,例如可变形部件模型(DPM)[12],这种不平衡可能是一个目标正例对应100,000个背景区域一样极端。最近基于目标建议区域的检测器[15,32]的趋势在一定程度上缓解了这个问题,但数据不平衡的可能仍然很高(例如,70:1)。这一挑战为学习技术开辟了空间,这些技术可以应对不平衡,提高训练速度和准确率,或两者兼而有之。

但是,数据不平衡并不是一个新的挑战,存在一个标准的解决方案,最初称为bootstrapping(现在通常被称为难例挖掘),已存在至少20年。在20世纪90年代中期(如果不是更早的话)训练人脸检测模型的Sung和Poggio [30]的工作中引入了Bootstrapping。他们的主要想法是通过选择探测器触发误报的示例来逐渐增长或引导形成一组背景样本。该策略导致迭代训练算法,其在给定当前反例集的情况下更新检测模型,然后使用更新的模型来找到要添加到自举训练集的新的反例。(自举法,也叫难例挖掘,就是把最容易被误分类成正例的负例拿出来构建负例样本集,使用迭代的思路训练检测器,先根据当前的检测器选取最易被误分类的样本集,然后基于当前的负例样本集训练检测器,依次迭代,直到得到具有最佳效果的检测器)。该过程通常从训练集开始,训练集包括所有目标样本和一组小的随机背景样本。

在几十年的目标检测研究中,Bootstrapping已被广泛使用。Dalal和Triggs [7]在训练SVM进行行人检测时使用了它。Felzenszwalb等人后来证明了SVM的一种自举形式能够收敛到整个数据集上的全局最优解。他们的算法通常被称为难例挖掘,并且在训练SVM用于目标检测时经常使用。Bootstrapping也成功应用于各种其他学习模型,包括浅层神经网络[25]和提升决策树[9]。即使是基于深度卷积神经网络(ConvNets)[19,20]的现代检测方法,如R-CNN [15]和SPPnet [16],仍然采用经过难例挖掘训练的SVM。

然而,由Faster R-CNN [14]及其改进算法[24]体现的当前最先进的目标探测器不使用自举可能看起来很奇怪。潜在的原因是转向纯粹的在线学习算法带来了技术上的困难,特别是在基于数百万个样本中用随机梯度下降(SGD)训练的深度ConvNets的背景下。Bootstrapping及其在文献中的变体依赖于下述交替过程:(a)在一段时间内,使用固定模型寻找新的例子以添加到有效训练集中;(b)然后,在一段时间内,模型训练在固定的训练集上训练一段时间。使用SGD训练深度ConvNet探测器通常需要数十万个SGD步骤,并且一次甚至几次迭代冻结模型将大大减慢进度。因此,我们需要的是纯粹的在线形式的难例挖掘。

在本文中,我们提出了一种新的自举技术,称为在线难例挖掘(OHEM),用于训练基于深度ConvNets的最先进的检测模型。该算法是对SGD的简单修改,根据非均匀的非平稳分布对训练样本进行采样,该分布取决于所考虑的每个示例的当前损失。该方法利用特定于检测的问题结构,其中每个SGD小批量仅由一个或两个图像组成,但是由数千个候选示例组成。候选示例根据偏向于多种高损失实例的分布进行二次采样。梯度计算(反向传播)仍然高效,因为它仅使用所有候选的一小部分。我们将OHEM应用于标准的Fast R-CNN检测方法,并显示与基线训练算法相比的三个好处:

  • 它消除了对基于区域的ConvNets中常用的几种启发式和超参数的需求;
  • 它产生了平均精度的一致且显著的提升;
  • 随着训练集变得越来越大和越来越困难,它的有效性也会增加,正如MS COCO数据集的结果所证明的那样。

此外,OHEM的收益是对近期目标检测改进的补充,例如多尺度测试[16]和迭代边界框回归[13]。结合这些技巧,OHEM分别在PASCAL VOC 2007和2012上给出了78.9%和76.3%mAP的最新结果。

2 相关工作

目标检测是计算机视觉中最古老,最基本的问题之一。数据集自举的想法[25,30],在最近的工作[12]中通常被称为难例挖掘,出现在大多数成功的目标探测器的训练中[7,9,12,13,15,16,23,25,29]]。其中许多方法使用SVM作为检测评分函数,即使在训练深度卷积神经网络(ConvNet)[19,20]进行特征提取之后也是如此。一个值得注意的例外是Fast R-CNN探测器[14]及其改进算法,例如Faster R-CNN [24]。由于这些模型不使用SVM,并且仅使用SGD在线进行训练,现有的难例挖掘算法难以直接应用。本文通过引入在线难例挖掘算法来解决该问题,该算法可提高优化和检测准确性。我们简要回顾一下难例挖掘,现代基于ConvNet的目标检测,以及使用难例选择来训练深度网络的关系。

难例挖掘:有两种常用的难例挖掘算法。第一个用于优化SVM。在这种情况下,训练算法维护一组数据集,并交替进行在数据集上训练SVM直至收敛的工作和通过特定规则添加和删除某些样本来更新数据集的工作。该规则删除了“简单”的示例,即它们能够被当前模型正确分类。相反,该规则添加了新的示例,这些示例在当前模型上很难正确分类。应用此规则将导致全局SVM解决方案。重要的是,工作集通常是整个训练集的一小部分。

第二种方法用于非SVM,并已应用于各种模型,包括浅层神经网络[25]和增强决策树[9]。该算法通常以正例和随机负例的数据集开始。然后训练机器学习模型以在该数据集上收敛,随后应用于更大的数据集以收获误报样本。然后将误报样本添加到训练集中,然后再次训练模型。此过程通常只迭代一次,并且没有任何收敛证明。

基于卷积网络的目标检测:在过去三年中,目标检测取得了重大进展。通过深度ConvNets [19]成功应用于ImageNet分类[8],这些改进成为可能。R-CNN [15]和OverFeat [26]探测器在PASCAL VOC [11]和ImageNet检测方面取得了令人瞩目的成果。OverFeat基于滑动窗口检测方法,这可能是最直观和最古老的检测方法。相反,R-CNN使用区域提议[1,2,3,4,6,10,18,32,34],这种方法在选择性搜索算法中很受欢迎[32]。自R-CNN以来,基于区域的ConvNets取得了快速进展,包括SPPnet [16],MR-CNN [13]和Fast R-CNN [14],我们的工作建立在此基础之上。

深度学习中的难例筛选:最近也有其他论文[22,27,33]研究训练深度网络时的难例筛选。与我们的方法类似,所有这些方法都基于每个数据点的当前损失进行选择。[27]从一组较大的随机样本集中独立选择正面和负面样本,依据就是当前图像描述符的损失。给出一对正面的图像块,[33]使用triplet损失从大数据集中发现负例样本。类似于我们的方法,[22]研究了小批量SGD方法的在线难例样本选择。他们的选择也是基于损失,但重点是基于ConvNets进行图像分类。作为[22]的补充,我们专注于基于区域的目标探测器的在线难例选择策略。

3 Fast R-CNN回顾

我们首先总结了Fast R-CNN [14](FRCN)框架。FRCN将图像和一组感兴趣的目标建议区域(RoI)作为输入。FRCN网络本身可以分为两个连续的部分:具有若干卷积和最大池层的卷积(转换)网络(图1,“卷积网络”);和一个带有RoI池层的RoI网络,几个完全连接的(fc)层和两个损失层(图1,“RoI网络”)。

在这里插入图片描述在推理期间,将conv网络应用于给定图像以产生卷积特征图,其大小取决于输入图像尺寸。然后,对于每个目标提议,RoI池化层将提议投影到卷积特征映射上并提取固定长度的特征向量。每个特征向量被送入fc层,最终给出两个输出:(1)对象类和背景上的softmax概率分布;(2)回归框重定位的回归坐标。(ROI池化层是指将各proposal对应区域的卷积特征提取出来之后,使用不同大小的池化核以保证池化输出向量长度固定)。

选择FRCN作为基础目标检测器有几个原因,除了它是一个快速的端到端系统。首先,基本的两个网络设置(conv和RoI)也被其他最近的检测器使用,如SPPnet和MR-CNN;因此,我们提出的算法更广泛适用。其次,虽然基本设置类似,但FRCN还允许训练整个卷积网络,而不是SPPnet和MR-CNN保持卷积网络固定。最后,SPPnet和MR-CNN都需要缓存RoI网络中的特征,以便训练单独的SVM分类器(使用难例挖掘)。FRCN使用RoI网络本身来训练所需的分类器。实际上,[14]表明在统一系统中,在后期阶段使用SVM分类器是不必要的。

3.1 训练

像大多数深度网络一样,FRCN使用随机梯度下降(SGD)进行训练。每个示例ROI的损失是鼓励预测正确对象(或背景)标签的分类log损失和鼓励预测准确边界框的定位损失的总和(详见[14])。

为了在RoI之间共享卷积网络计算,分层创建SGD小批量。对于每个小批量,首先从数据集中采样N个图像,然后从每个图像中采样B/N个RoI。设置N = 2和B = 128在实践中效果很好[14]。RoI采样程序使用了几种启发式方法,我们将在下面简要介绍。本文的一个贡献是消除其中一些启发式方法及其超参数。

前景ROI:对于标记为前景(fg)的示例RoI,其与真实目标之间的交并比(IoU)至少为0.5。这是一个相当标准的设计选择,部分灵感来自PASCAL VOC目标检测基准的评估协议。在R-CNN,SPPnet和MR-CNN的SVM难例挖掘过程中使用相同的标准。我们使用相同的设置。

背景ROI:标记为背景的区域与真实目标的最大IOU为[bg_lo;0.5)。FRCN和SPPnet都使用较低的bg_lo = 0.1阈值,并在[14]中假设粗略接近难例挖掘。这是基于一个假设,即与真实目标有一些重叠的区域更可能是混乱或困难的区域。我们在5.4节中表明,虽然这种启发式方法有助于收敛和提高准确性,但它不是最理想的,因为它忽略了一些不常见但很重要的困难背景区域。我们的方法删除了bg_lo阈值。

平衡前景和背景ROI:为了处理第1节中描述的数据不平衡,[14]设计了启发式方法,通过随机抽样背景块来重新平衡每个小批量中的前景 - 背景比率到1:3的目标,从而确保mini-batch中25%是前景块。我们发现这是训练FRCN的重要设计决策。去除该比率(即随机采样RoI)或增加它,将精度降低大约3个mAP点。使用我们提出的方法,我们可以删除这个比率超参数,没有带来不良影响。

4 本文方法

我们提出了一种简单而有效的在线难例挖掘算法,用于训练Fast R-CNN(或任何Fast RCNN样式的目标检测器)。我们认为,目前为SGD创建小批量的方法(第3.1节)是低效且不是最理想的,我们证明我们的方法可以带来更好的训练(更低的训练损失)和更高的测试性能(mAP)。

4.1 OHEM

回想一下定义难例挖掘算法的交替步骤:

  1. 在一段时间内,固定模型查找要添加到训练集的新样本;
  2. 在另一段时间内,在固定的训练集上训练模型。
    在基于SVM的目标检测器的环境中,例如在R-CNN或SPPnet中训练的SVM,步骤(a)检查可变数量的图像(通常是10或100),直到训练集达到预设大小。然后在步骤(b)中训练SVM以在训练集上收敛。重复此过程,直到活动训练集包含所有的支持向量。将类似策略应用于FRCN ConvNet训练会减慢学习速度,因为在从10或100的图像中选择示例时不会进行任何模型更新。

我们的主要观察是这些交替步骤可以与使用在线SGD训练FRCN的方式相结合。关键是尽管每个SGD迭代仅采样少量图像,但每个图像包含数千个示例RoI,我们可以从中选择难例而不是启发式采样子集。该策略通过仅冻结一个小批量的模型来使交替过程适用于SGD。因此,模型的更新与基本SGD方法的更新频率相同,因此学习不会延迟。

更具体地,在线难例挖掘算法(OHEM)按照如下步骤进行。**对于SGD迭代t的输入图像,我们首先使用conv网络计算卷积特征。然后,RoI网络使用此特征映射和所有输入的RoIs(R)而不是采样的小批量[14]来进行前向传播。回想一下,这一步只涉及RoI池化,几个fc层,以及每个RoI的损失计算。损失表示当前网络对每个RoI的检测性能。通过按损失对输入RoI进行排序并选择当前网络效果最差的B/N个示例来选择难例。**大多数前向计算通过卷积特征映射在RoI之间共享,因此所有RoI卷积运算所需的额外计算相对较小。此外,由于仅选择少量RoI来更新模型,因此反向传递相比之前没有增加运算量。

然而,有一个小警告:具有高重叠的关于相同目标定位的RoI可能具有相关的损失。此外,由于分辨率差异,这些重叠的RoI可以投射到卷积特征图中的相同区域,因此导致损失重复计算。为了处理这些冗余和相关的区域,我们使用标准的非最大抑制(NMS)来执行重复数据删除(来自[14]的实现)。给定RoI及其损失的列表,NMS通过迭代地选择具有最高损失的RoI,然后移除与所选区域具有高重叠的所有较低损失的RoI。我们使用宽松的IoU阈值0.7来仅抑制高度重叠的RoI。

我们注意到上述过程不需要fg-bg比率来进行数据平衡。如果任何一类被忽略,其损失将增加,直到它被抽样的可能性很高。对于fg RoI很容易提取的图像(例如汽车的正向视图),网络可以自由地仅使用mini-batch中的bg区域;反之,当bg是微不足道(例如天空,草等)时,mini-batch中可以完全是fg区域。

4.2 实现细节

有许多方法可以在FRCN检测器中实现OHEM,每种方法都有不同的权衡。一种显而易见的方法是修改损失层以进行难例选择。损失层可以计算所有RoI的损失,根据对它们的损失进行排序以选择最难的RoI,最后将所有非最难RoI的损失设置为0。虽然直观,但这种实现效率很低,因为RoI网络仍然为所有RoI分配内存并执行反向传递,即使大多数RoI损失为0并没有进行梯度更新(当前深度学习工具箱的限制)。

在这里插入图片描述
为了克服这个问题,我们提出了图2所示的架构。我们的实现维护了两个RoI网络副本,其中一个是只读的。这意味着只读RoI网络(图2(a))仅为所有RoI的前向传播分配内存,而不是标准的RoI网络为前向和反向传播都分配内存。对于SGD迭代,给定卷积特征映射,只读RoI网络执行前向传播并计算所有输入RoI(R)的损失(图2,绿色箭头)。然后,困难RoI采样模块使用4.1节中描述的过程来选择输入到常规RoI网络的难例(Rhard-sel)(图2(b),红色箭头))。该网络仅计算Rhard-sel的前向和反向通道,累积梯度并将它们传递给conv网络。在实践中,我们使用来自所有N个图像的所有RoI作为R,因此,只读RoI网络的有效批量大小是|R|,而常规RoI网络是3.1节中的标准B.

我们使用Caffe [17]框架实现上述两个选项(参见[14])。我们的实现使用梯度累积与单个图像小批量的N个前后传播。按照FRCN [14]的设置,我们使用N = 2(因此|R|≈4000)和B = 128。在这些设置下,建议的架构(图2)具有与FRCNN类似的内存占用,但速度> 2倍。除非另有说明,否则将在本文中使用上述架构和设置 。

5 分析OHEM

本节将使用了在线难例挖掘(OHEM)的FRCN的训练过程与基线启发式抽样方法进行比较。我们还将FRCN与采用效率较低的OHEM方法进行比较,该方法在每个小批量中使用所有可用的示例RoI,而不仅仅是最难的B个。

5.1 实验设置

我们使用两种标准的ConvNet架构进行实验:[5]中的VGG CNN M 1024(简称VGGM),这是AlexNet [19]的更广泛版本,以及[28]的VGG16。本节中的所有实验均在PASCAL VOC07数据集上进行。在trainval集上进行训练并在测试集上进行测试。除非另有说明,否则我们将使用FRCN [14]中的默认设置。我们使用SGD训练方法进行80k小批量迭代,初始学习率为0.001,并且每30k迭代我们将学习率降低0.1倍。表1(第1-2行)中报告的基线数据使用我们的训练计划进行复现,略高于[14]中报告的基线数据。

在这里插入图片描述

5.2 OHEM对比启发式选择

表1(第1-2行)中报告的标准FRCN使用bg_lo = 0.1作为难例挖掘的启发式参数(第3.1节)。为了测试这种启发式参数选取的重要性,我们使用bg_lo = 0运行FRCN。表1(第3-4行)显示,对于VGGM,mAP下降2.4点,而对于VGG16,它保持大致相同。现在将其与有OHEM的FRCN进行比较(第11-13行)。与FRCN相比,VGGM的bg_lo = 0.1时,OHEM将mAP提高2.4个点,对于没有启发式FPRN,OHEM将mAP提高了4.8个点。这个结果证明了这些启发式的次优性和我们的难例挖掘方法的有效性。

5.3 鲁棒的梯度估计

每批仅使用N = 2个图像的一个问题是它可能导致不稳定的梯度和缓慢的收敛,因为来自图像的RoI可能是高度相关的[31]。FRCN [14]报告说,这对他们的训练来说不是一个实际问题。但是这个细节可能引起我们对训练过程的担忧,因为我们使用来自同一图像的高损失的样本,因此它们可能具有更高的相关性。为了解决这个问题,我们试验N = 1以增加相关性以测试我们的方法。如表1所示(第5 - 6行;第11行),N=1时原始FRCN的性能下降了大约1个点,但在使用我们的训练程序时,mAP保持大致相同。这表明OHEM是健壮的,以便每批需要更少的图像以减少GPU内存占用。

5.4 为什么仅使用难例,什么时候可以使用所有的块

在线难例挖掘基于以下假设:考虑图像中的所有RoI然后选择难例用于训练是重要的。但是如果我们训练所有的RoI,而不仅仅是那些难例RoI呢?简单的样例将具有低损失,并且对梯度没有太大贡献;训练将自动侧重于难例。为了比较这个选项,我们使用bg_lo = 0,B=2048, N ∈ { 1 , 2 } N \in \{1,2\} N{1,2}进行标准FRCN训练,其他超参数固定不变。由于此实验使用大的小批量,因此调整学习率非常重要。我们通过将VGG16的学习率增加到0.003,将VGGM的学习率增加到0.004可以找到最佳结果。结果报告在表1中(第7-10行)。使用这些设置,与B = 128相比,VGG16和VGGM的mAP增加了~1个点,但是使用所有RoI,我们的方法的改进仍然超过1个点。此外,因为我们用较小的批量大小来计算梯度,所以训练更快。

5.5 更佳的最优化

最后,我们分析了上面讨论的各种FRCN训练方法的训练损失。以不依赖于采样过程的方式衡量训练损失是很重要的,从而实现不同方法之间的有效比较。为了实现这一目标,我们每20k步优化保存每种方法的模型快照,并在整个VOC07 ​​trainval集上运行它们,以计算所有RoI的平均损失。这实现了以不依赖于示例采样方案的方式测量训练集损失。

在这里插入图片描述
图3显示了VGG16的每个RoI的平均损失以及上面讨论的表1的各种超参数设置。我们看到bg_lo = 0导致最高的训练损失,而使用启发式bg_lo = 0.1时训练损失更低。在bg_lo = 0.1时,将mini-batch大小增加到B = 2048,同时增大学习率降低了训练损失。我们提出的在线难例挖掘方法实现了所有方法的最低训练损失,验证了我们声称OHEM可以为FRCN提供更好的训练。

5.6 计算耗时

在这里插入图片描述
OHEM增加了合理的计算和内存开销,如表2所示。对于VGGM网络,每次训练迭代,OHEM成本为0.09s(VGG16为0.43s),需要1G以上的内存(VGG16为2.3G)。鉴于FRCN [14]是一种快速的训练检测器,大多数用户可能会接受训练时间的增加。

在VOC和COCO上的效果都比FRCNN好,并且进行多尺度预测和迭代的bounding-box回归之后效果可以进一步改善。

8 结论

我们提出了一种在线难例挖掘(OHEM)算法,这是一种简单有效的方法来训练基于区域的ConvNet探测器。OHEM通过自动选择难例样本消除了常用的几种启发式和超参数,从而简化了训练过程。我们进行了广泛的实验分析,以证明所提算法的有效性,从而在标准基准测试中实现更好的训练收敛和一致的检测精度提高。我们还报告了使用OHEM和其他正交添加项时PASCAL VOC 2007和2012的最新结果。尽管我们在本文中使用了Fast R-CNN,但OHEM可用于训练任何基于区域的ConvNet探测器。

我们的实验分析基于整体检测准确性,但是研究各种训练方法对个体类别准确率的影响将是一个有趣的未来方向。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值