它主要是为了挖掘在极度样本不平衡(负远大于正)的情况的困难样本,也就是那些loss大的样本(正)。我现在就是遇到这种情况,背景样本太多,缺陷样本太小,导致即使训练的很好,也会出现漏报现象。所以,我要在线挖掘出那些漏报的样本,让其再训练,这就是OHEM的本质
Training Region-based Object Detectors with Online Hard Example Mining
使用在线硬实例挖掘训练基于区域的对象检测器
Abstract
对象检测领域在基于区域的ConvNets的浪潮中取得了重大进展,但是他们的训练过程仍然包括很多启发式和超参数,调整成本很高。我们提出了一种简单但令人惊讶的有效在线硬件示例挖掘(OHEM)算法,用于训练基于区域的ConvNet探测器。我们的动机是一样的,因为它一直是检测数据集包含大量简单的例子和少量的困难例子。自动选择这些困难样本可以使训练更加有效和高效。 OHEM是一种简单直观的算法,可以消除常用的几种启发式和超参数。但更重要的是,它在基准测试如PALASAL COC2007和2012上产生了一致且显着的检测性能提升。随着数据集变得越来越大和越来越困难,它的有效性也越来越高,正如MS COCO数据集上的结果所证明的那样。此外,结合该领域的互补进展,OHEM可以获得78.9%和76.3%mAP的最新结果。 PASCAL VOC分别于2007年和2012年。
region-based ConvNets(R-CNN)极大的推动了目标检测领域的发展,但是其训练过程仍然包括很多启发知识和超参来进行优化。我们提出一种简单但是非常有效的在线困难样本挖掘算法online hard example mining(OHEM)用于训练R-CNN检测器。我们的动机是:在被检测的数据集中总是包含大量简单的样本和少量困难样本。自动的选择这些困难样本进行训练能够更加快速和有效。OHEM是一种简单直观的算法,能够避免一些常用的启发只是和超参。更重要的是,其对检测性能有稳定和显著的提升。在数据集变得越来越大的今天,如MS COCO,这项工作是十分有意义的。最后,OHEM与该领域先进的方法结合后,在PASCAL VOC 2007和2012数据集上实现78.9%和76.3%的mAP。
摘要主要讲了四点:
(1) 训练过程需要进行参数的空间搜索
(2) 简单样本与难分辨样本之间的类别不平衡是亟需解决的问题
(3) 自动地选择难分辨样本来进行训练不仅效率高而且性能好
(4) 提出了OHEM算法,不仅效率高而且性能好,在各种数据集上表现优越
1. Introduction
图像分类和目标检测是计算机视觉两项基本任务。通常将目标检测任务简化为分类任务进行训练。这个简化操作带来了图像分类任务中不存在的新挑战:训练集中的目标和背景样本的数量非常不平衡。在滑窗目标检测器中,例如DPM,这种不平衡的比例可以达到100000:1。最近研究提出的基于目标推荐的检测器能够缓解上述问题,但是比例仍然有70:1。这项挑战属于学习方法领域,如何处理不平衡,并且更快速的训练,实现更高精度。
很明显,这不是一个新问题,一种标准的解决方法叫做bootstrapping,现在称为hard negative mining,从提出已有20年。Bootstrapping是Sung和Poggio33在90年代中期提出,用于训练人流检测模型。其核心思想是逐渐的增长或bootstrap,选择检测器检测的虚警样本,进行训练。通过一种迭代的算法,先以当前训练集训练检测器,然后发现新的虚警样本增加到bootstrapped训练集。这个操作一般包含所有的目标样本和少量随机的背景样本(所以说,这个方法可以辅助选择负样本)。
Bootstrapping广泛应用于目标检测研究:
• Dala和Triggs的SVM行人检测器
• Felzenszwalb之后证明bootstrapping能够使得SVM在整个数据集上达到全局优化的效果。
这些算法一般被认为是hard negative mining,经常用于训练目标检测的SVM。Bootstrapping还成功的用于许多其他的学习模型,包括浅层神经网络、boosted决策树。甚至目前先进的基于深度卷积神经网络19,20,如R-CNN15,SPPnet16,仍然采用hard negative mining训练的SVM。
然而目前先进的目标检测器如Fast R-CNN以及变体没有使用Bootstrapping。可能的原因是将目前的技术转为纯在线学习算法是困难的,尤其是在几百万个样本中进行SGD训练深度卷积网络的情况下。Bootstrapping需要依赖上述交换模版:(a)一会固定模型寻找新样本;(b)一会固定样本训练模型。SGD训练深度卷积网络需要几十万次SGD,因此在几个迭代中固定模型也会极大的减慢处理过程。因此,需要的是一种在线的困难样本选择方法。
本文,我们提出一个新型的Bootstrapping技术,称为OHEM——在线困难样本挖掘,用于训练基于深度卷积网络的检测器。该算法是对SGD的简单修改,其中训练样本根据正在计算的每个样本当前的损失进行不均匀、非平稳分布的采样。该方法利用了检测问题的优势,该问题中每个SGD mini-batch虽然仅包含1或2个图像,但是有上千个候选样本。对候选样本进行降采样,考虑样本多样性和高损失值。由于仅使用候选区的一个小子集,因此梯度计算仍然是高效的。 我们将OHEM应用与Fast R-CNN方法,显示出3个优点:
• 去除了一些常用的启发式线索和超参
• 在mAP上显示出稳定、显著的提升
• 在更大更困难的数据集上效率更高,如MS COCO数据集
除此之外,OHEM与目前的一些方法互补,如多尺度测试16,迭代bounding-box回归13。与上面这些技巧结合,OHEM在VOC 2007和2012的结果分别为78.9%,76.3%。
2. Related Work
目标检测是计算机视觉领域最古老也是最基础的问题之一。数据集的Bootstrapping,目前称为hard negative mining,应用于很多目标检测器的训练中。这些方法用深度卷积神经网络提取特这后,大部分使用SVM作为检测器对样本打分排序。其中的例外是Fast R-CNN和Faster R-CNN。由于这些方法步使用SVM,使用纯粹的在线SGD训练,因此目前的困难样本挖掘方法不能直接使用。本文使用在线困难样本挖掘算法解决这个问题,提高效率和进度。我们简单回顾下困难样本挖掘、基于卷积网络的目标检测器,以及他们之间的合作——使用困难样本挖掘训练深度网络。
困难样本挖掘HEM
目前主要有两种HEM。
第一种主要用于优化SVM。方法就是先在一个样本集上训练SVM至收敛,然后根据一定的规则去除一些样本,新增一些样本。去除的是在当前模型下离分类边界很远的那些“容易”分类的样本。反之,将违反当前边界的样本,即错分的样本加入训练集中。应用上述规则实现全局优化的SVM。重要的是通常工作集是整个训练样本集的一个小子集。
第二种一般用于非SVM方法,例如浅神经网络和boosted决策树。该算法首先包含正样本和随机负样本。然后训练模型至收敛。之后在一个更大的数据集上获取虚警。将虚警加入训练集中再次进行训练。这个流程一般只迭代一次,并且没有任何收敛性证明。
基于卷积网络的目标检测
近三年,目标检测领域发展迅速。这种进步主要是由于ImageNet出现后对深度卷积网络的训练。R-CNN和Over Feat26检测器在PASCAL VOC和ImageNet detection上的结果改善显著。Over Feat基于滑窗法,R-CNN基于区域推荐法——Selective search算法。由于R-CNN基于卷积网络的处理流程更快,SPPnet16,MR-CNN13,Fast R-CNN14,因此我们的工作主要在此模型上展开。
深度学习中的困难样本选择
目前有也有一些工作研究在训练深度网络中挑选困难样本222733。与我们的方法类似,这些方法也都是具有当前数据点的损失值来挑选样本。
• 论文27从一个大型数据集中随机样本的loss独立的选择困难正样本和负样本,用于学习图像描述符。
• 论文33对于给定的一对正样本块,使用triplet loss在数据集中寻找困难负样本块
• 与我们的方法类似,论文22研究对mini-batch SGD的在线困难样本选择方法。他们的方法也基于loss,但是主要面向分类问题。而我们的关注于基于区域推荐的目标检测器的在线困难样本选择策略。(这个理由有点牵强)
3. Fast R-CNN简介
我们首先总结下Fast R-CNN(FRCN)的框架。FRCN是输入一幅图像和一系列ROI。FRCN网络本身分为两个部分:一个是卷积网络层,包含卷积和池化层;另一个是ROI网络,包含ROI池化层,以及全连接层和两个损失层。如图1。
卷积网络将图像转换为卷积特征图,然后对于每个目标推荐,ROI池化层,将ROI映射到卷积特征图上,然后提取固定长度的特征向量(通过插值或超采样)。每个特征向量输入给fc层,最后输出两个结果:(1)softmax,所有类别和背景的概率分布;(2)bounding-box的重新定位的位置回归。
选择FRCN作为我们的基础目标检测器有以下原因:
• 一个快速的端到端的系统
• conv和ROI两个网络层是设计也用于其他的检测器SPPnet和MR-CNN,因此我们提出的方法更加有广泛性
• 基本设置相似,FRCN也允许训练整个卷积网络,相反SPPnet和MR-CNN会固定卷积层。
• SPPnet和MR-CNN都需要缓存ROI网络的特征用于训练一个分离的SVM分类器(用于困难负样本挖掘)。FRCN使用ROI网络本身来训练期望的分类器。后面会证明在统一系统中使用SVM分类器是没必要的。
3.1 Training
类似大部分深度网络,FRCN也是使用随机梯度下降进行训练。每个ROI的loss是所有分类的log loss的综合,目的是鼓励准确预测目标类别;另一个位置loss孤立预测精确的bounding box位置。
为了分享ROI之间的卷积计算,SGD的mini-batch创建为层级结构。对于每个mini-batch,先从数据集中选择N个图像,每个图像选择B/N个ROI。设置N=2,B=128。ROI的采样设计到一些启发式方法,后面我们进行简要介绍。本文的一个贡献是去除一些启发式方法和他们的超参数。
前景ROI
例如一个ROI被标记为前景fg,其与gt的IoU应该≥0.5。这是一种标准的设计选择,是PASCAL VOC目标检测基准数据集的评估标准。相同的标准也用在R-CNN,SPPnet,MR-CNN等模型中SVM的困难样本挖掘。我们也使用相同的标准。
背景ROI
一个区域被标记为bg,其最大IoU的区间在[bg_lo, 0.5)之间。在FRCN和SPPnet中使用bg_lo=0.1,文献14使用更粗略的困难负样本。这里假设区域与gt有一些重叠的区域更有可能混淆,称为困难样本。5.4节显示启发式方法能够帮助收敛、提高精度,这是一种次优方法,因为忽略一些不经常出现但是重要困难的背景区域。我们的方法移除了bg_lo的阈值。
平衡fg-bg的ROI
为了处理section1中的数据不平衡性,论文14设计启发式方法平衡每个mini-batch的fg-bg比例,目标比例为1:3,通过随机降采样背景块,因此确保mini-batch中25%的样本是fg。我们发现这是一个训练FRCN的重要设计。去除这个比例(随机采样ROI)或者增加比例,会降低检测精度mAP,3个点。基于我们的方法,可以去除这个比例参数,并且不造成影响。
4. 我们的方法
我们提出简单、有效的在线困难样本挖掘算法用于训练Fast R-CNN(或Fast R-CNN类似的目标检测器)。我们认为目前的方法构造mini-batch用于SGD是低效、次优的。我们方法能够更好的训练(训练误差更低)更高的检测性能(mAP)。
4.1 在线困难样本挖掘
基于SVM的目标检测器中,例如R-CNN或SPPnet中训练的SVM,其步骤是:
• 激活一定数量的图片(j经常为10多,100多)使得训练集达到一定阈值
• 在该激活的训练集上训练SVM至收敛。
• 重复上述过程,直到激活训练集包含所有支持向量
将类似的策略应用于FRCN后会减慢训练速度,因为在挑选样本时不能更新模型。
我们发现,两个步骤可以结合FRCN的在线SGD进行训练。主要原因是虽然每个SGD迭代只有少量图像,但是每个图像包含上千个ROI样本,从中我们可以挑选困难样本,而不是启发式筛选子集。这个策略适用于SGD中固定模型用于mini-batch的交换模版,且只固定模型一次,在一个mini-batch中。因此模型更新速度跟SGD方法一样快,所以学习没有延迟。
• 输入图像,在SGD的第t次迭代,计算卷积特征图
• ROI网络计算所有输入的ROI,ROI池化,几个全连接层,计算loss
• loss表示对当前ROI的性能
• 对ROI以loss排序选择前B/N个ROI表示当前检测最差的ROI
• 由于只选择一小部分ROI更新模型,反向传播更加快速
但是,这里有个小问题:区域重叠的位置相关ROI区域具有相关的损失。并且重叠的ROI可能投影到相同的卷积特征区域,因此导致对同一区域的loss加倍考虑。为了处理这些冗余和相关的区域,我们使用标准的非极大值抑制NMS删除重复数据。对于给定的ROI列表和他们的损失,NMS的工作是选择高loss的ROI,删除低loss的ROI和具有高度重叠的区域。我们选择的IoU阈值为0.7。
4.2 实现细节
有很多方法可以实现OHEM,每种都有不同的权衡。一个明显的方法是修改loss层来做困难样本的选择。loss层可以计算所有ROI的loss,然后排序,然后选择困难的ROI,然后将所有非困难ROI的loss置0。这种方法虽然直接,但是并不高效,因为ROI网络仍然会分配内存给所有的ROI,进行反向传播,即使大部分ROI的loss是0,因此没有梯度更新。
为了解决这个,我们提出的架构如图2所示。我们实现维护两个相同的ROI网络,其中一个是只读的。这意味着,只读的ROI网络只在前向传播的时候分配内存,而一般的网络是前向/反向都分配内存。对于一个SGD迭代,给定一个卷积特征图,只读ROI网络前向计算所有ROI的损失值,然后困难ROI采样模块使用如4.1描述的方法选择困难样本( R h a r d − s e t R_{hard-set} Rhard−set),其输入给一般的ROI网络这个网络分别计算前向和反向,但是仅在 R h a r d − s e t R_{hard-set} Rhard−set上累计梯度并传递给卷积网络。实际中,我们使用N个图片的所有ROI作为R,因此只读网络的的batch尺寸是 ∣ R ∣ |R| ∣R∣,而常规网络是 ∣ B ∣ |B| ∣B∣。
我们使用Caffe实现上述网络,N次前向反向梯度累积,在一个image mini-batch。对于FRCN,我们使用N=2,B=128。使用上述方法后速度提升两倍。除非特殊说明,否则本文使用上述方法。
5. 分析在线困难样本挖掘
这一节比较采用OHEM的FRCN的模型和一般的启发式样本算则方法。我们还比较了一些更抵消的方法,即使用所有ROI,而不是仅仅B个最困难的样本。
5.1 实验设置
我们主要对两个标准卷积网络架构实验:一个是VGG_CNN_M_1024(VGGM),是AlexNet的一种扩展版,一个是VGG16。所有实验都在VOC 07数据集上进行。训练所有的SGD对80k个mini-batch迭代,初始化学习率为0.001,每30k次迭代衰减0.1。表1中的1,2行是我们的标准做法,比原文的结果稍微提高。
5.2 OHEM与启发式方法
标准的FRCN,如表1所述,1-2行。为了测试启发式方法的重要性,去除bg_lo,之后VGGM的mAP掉了2.4,但是VGG16基本一致。与OHEM训练FRCN相比,有2.4mAP的提升。这证明启发式方法是次优的,我们的OHEM是更有效的方法。
5.3 鲁棒梯度估计
采用两个图片的ROI进行优化,这是因为单一图像由于ROI具有较高的相似性,可能会导致不稳定的梯度,从而减慢收敛的过程。这个对于FRCN可能不是一个问题,但是对我们的方法可能是需要考虑的,因为我们对同一幅图像中的高loss进行采样,这些ROI可能具有较高的相似性。为了解决这个问题,我们实验了当N=1时,增加ROI相关性,FRCN会产生1个点的下降,但是我们的方法没有下降,说明更加具有鲁棒性。
5.4 为什么只是困难样本,当你使用所有样本的时候呢?
在线困难样本挖掘有一个基本假设,考虑所有ROI是必要的,然后选择困难的样本进行训练。但是如果我用所有ROI进行训练呢?容易样本具有低loss,不会对gradient具有太多贡献,本身训练的过程就会关注困难的样本。为了比较这个,我们使用了大尺寸的mini-size,B=2048,由于使用了大数据量,调整学习率是必要。虽然结果比基准要高1个点,但是我们的方法更加好。
5.5 更好的优化
最后,我们分析上述不同FRCN训练方法的loss的变化。我们每20k次优化计算一次所有ROI的平均loss。图3显示了结果:
5.6 计算成本
OHEM整机了合理的计算量和内存消耗。
7 增加的方法
Multi-scale(M)多尺度
我们采用多尺度策略。尺度定义为图像的短边长s,训练期间随机选择尺度,测试时测试所有尺度。对于VGG16,训练时s={480,576,688,864,900},测试时s={480,576,688,864,1000}
迭代BB回归(B)
论文13中采用迭代定位和bbox投票方案。网络评估每个ROI得到一个得分和重新定位的box R1。高得分的R1进行再次评价和定位得到R2。R1和R1组成最终的RF用于后处理,RF_NMS得到NMS后的RF,IoU为0.3。
算法概述:
OHEM(online hard example miniing)算法的核心思想是根据输入样本的损失进行筛选,筛选出hard example,表示对分类和检测影响较大的样本,然后将筛选得到的这些样本应用在随机梯度下降中训练。在实际操作中是将原来的一个ROI Network扩充为两个ROI Network,这两个ROI Network共享参数。其中前面一个ROI Network只有前向操作,主要用于计算损失;后面一个ROI Network包括前向和后向操作,以hard example作为输入,计算损失并回传梯度。作者将该算法应用在Fast RCNN中,网络结构还是采用VGG16和VGG_CNN_M_1024,数据集主要采用VOC2007,VOC2012和COCO数据集。
算法优点:1、对于数据的类别不平衡问题不需要采用设置正负样本比例的方式来解决,这种在线选择方式针对性更强。2、随着数据集的增大,算法的提升更加明显(作者是通过在COCO数据集上做实验和VOC数据集做对比,因为前者的数据集更大,而且提升更明显,所以有这个结论)。
算法的测试结果:在pascal VOC2007上的mAP为78.9%,在pascal VOC2012上的mAP为76.3%。注意,这些结果的得到包含了一些小tricks,比如multi-scale test(测试时候采用多尺度输入),bounding box的不断迭代回归。
代码的github地址:https://github.com/abhi2610/ohem