Libra R-CNN: Towards Balanced Learning for Object Detection论文学习
论文地址:https://arxiv.org/abs/1904.02701v1
代码地址:https://github.com/OceanPang/Libra_R-CNN
Abstract
与模型的结构相比,目标检测领域中模型的训练所受到的关注度就要少很多,但它对检测器而言也很重要。在这篇论文中,作者仔细地研究了检测器的训练方式,发现检测性能在训练过程中经常受到不均衡问题的限制,它一般由3个层级组成:样本层级、特征层级和目标层级。为了减轻这个问题的负面影响,作者提出了 Libra R-CNN,一个简单、高效框架,在目标检测中平衡地学习。它整合了3个创新点:IoU-平衡采样、平衡的特征金字塔、平衡的L1损失,分别用于减少样本、特征和目标层级的不均衡状况。得益于整体的平衡设计,Libra R-CNN 极大地提升了检测性能。在 MSCOCO 上,它的 AP 值要比 FPN Faster R-CNN 和 RetinaNet 高和。
1. Introduction
伴随深度卷积网络的发展,近些年我们看到目标检测领域的显著进步。人们提出了很多检测框架,如Faster R-CNN、RetinaNet和Cascade R-CNN,极大地推动了SOTA进步。尽管pipeline结构有一些不同,如单阶段和双阶段方法,当前的目标检测框架大多延续一个通用的训练模式,即在一个标准的多任务目标函数的监督下,进行区域采样,特征提取,然后协同识别类别及优化定位。
基于这样一个模式,目标检测器的训练取决于3个关键方面:(1)选取的区域样本是否具有代表性;(2)提取出来的视觉特征是否被充分利用;(3)目标函数是否是最优的。但是,作者的研究表明,一般的训练过程在这3个方面都是不均衡的。这种不均衡阻碍了模型的能力被充分利用,束缚了整体的性能,如图1所示。下面,作者挨个介绍这些issues:
-
样本层级不均衡:当我们训练一个目标检测器时,难例样本非常有价值,因为它们对提升检测性能更有用。但是,随机采样机制通常造成选取的样本大多是容易样本。目前流行的难例挖掘方法(如OHEM)可以将关注聚焦在难例样本上。但是,它们对噪音标签经常过于敏感,消耗大量的内存和算力。Focal Loss 在单阶段检测器中缓解了这个问题,但是在R-CNN中却效果不大,因为大多数的容易样本在双阶段方法中被过滤掉了。因此,我们需要用更优美的方式来解决这个问题。
-
特征层级不均衡:主干网络中的深度high-level特征包含更丰富的语义信息,而浅层low-level 特征则包含更多的细节信息。最近,FPN和PANet 通过 lateral 连接进行特征融合,推动了目标检测的发展。这些方法启发我们,low-level特征和high-level特征在目标检测中是互补的。它们融合金字塔特征的方式决定了检测的性能。但是,什么是最佳的融合这些特征的方法呢?本文的研究表明,融合后的特征在每个分辨率上都应该具备平衡的信息。但是前文方法里面的按照顺序的方式,使得融合后的特征更加关注在相邻的分辨率上。非相邻层级中的语义信息会在信息流的每一次融合后稀释掉。
-
目标层级不均衡:一个检测器需要执行两个任务,即分类和定位。因此在训练过程中,我们要包含2个不同的目标。如果它们之间不均衡,其中1个目标可能就会妥协,影响整体的性能。这种情况对训练过程中的样本是一样的。如果它们不均衡,容易样本产生的小梯度可能就会淹没难例产生的大梯度,限制进一步模型优化。因此,我们需要重新平衡任务和样本,实现最优的收敛。
为了缓解这些问题的负面影响,作者提出了 Libra R-CNN,一个简单而有效的目标检测框架,它在3个层级上显式地强制均衡。这个框架融合了3个创新点:(1) IoU-平衡采样,根据它们和ground-truth的IoU来挖掘难例。(2)平衡的特征金字塔,使用一样的深度融合的、平衡的语义特征来增强多层级特征。(3)平衡的L1损失函数,提升重要的梯度,重新平衡分类、粗定位和细定位。
在MS COCO 上,Libra R-CNN 相较于FPN Faster R-CNN 和 RetinaNet ,AP要高2.5和2.0。Libra R-CNN 基于 RestNet-50 和 ResNeXt-101-64x4d 可以达到38.7 AP 和 43.0AP。
作者总结了主要的贡献:(1)系统地研究了检测器的训练过程,显示三个层级上的不均衡问题限制了检测的性能。(2)提出了 Libra R-CNN,该框架通过结合3个新的组成:IoU-平衡采样、平衡特征金字塔和平衡的L1损失函数,对训练过程进行再平衡。(3)在MS COCO上测试了该框架,取得了比SOTA检测器明显的提升,包括单阶段和双阶段检测器。
2. Related Work
目标检测的模型结构。 最近,目标检测常用的方法有双阶段检测器和单阶段检测器。双阶段检测器首先由R-CNN提出。后来衍生出的SPP,Fast R-CNN,Faster R-CNN 进一步推动了目标检测发展。Faster R-CNN 提出了 RPN 来改善检测器的效率,允许检测器端到端地训练。此后,人们又从不同的角度出发,想出了很多方法来增强 Faster R-CNN。例如,FPN 通过金字塔预测来解决尺度差异。Cascade R-CNN 通过经典但有效的级联结构,将Faster R-CNN 扩展为一个多阶段的检测器。Mask R-CNN 增加了一个 mask 分支,从而扩展 Faster R-CNN,在多任务学习的帮助下优化检测的结果。HTC 通过级联结构进一步提升了 Mask R-CNN 中的 mask 信息流。另一方面,单阶段检测器,如YOLO和SSD也很流行。它们要比双阶段检测器更简单、更迅速,但是在准确率上要差一截子,直到出现了 RetinaNet。CornerNet 引入了一个新的思路,可以用一对关键点来预测边框。其他方法则关注在级联方式、duplicate removal、多层级、对抗学习和更多语境信息上。它们在各个方面都取得了长足的进步。
目标检测的平衡学习 。缓解目标检测训练过程中的不均衡问题,对于最优训练和充分利用模型能力是非常重要的。
样本层级不均衡。OHEM 和 focal loss 是目标检测中样本级不均衡问题的主要解决方法。常用的OHEM 方法自动地根据置信度来选取难例。但是,这个方法会带来额外的内存和速度损耗,使得训练过程臃肿。而且,OHEM 方法也会遇到噪音标签的问题,无法在所有的情形中适用。在单阶段检测器中,Focal loss 对损失函数进行了改进,解决了前景-背景类别不均衡问题。但是它对双阶段检测器却没有多少帮助。与这些方法相比,本文的方法计算成本要更低,解决方式要更优美。
特征层级不均衡。利用多层级特征生成具有判别度的金字塔特征,对于目标检测非常重要。FPN 通过一个 top-down 通路,提出了 lateral 连接来丰富浅层的语义信息。之后,PANet 加入了一个 bottom-up 的通路,进一步增强深层中的low-level 信息。Kong等人基于SSD,提出了一个新的高效金字塔,以一种 highly-nonlinear 但是高效的方式来融合特征。与这些方法不同,本文的方法依赖于融合后的、均衡的语义特征来增强原始特征。这样,金字塔中的每个分辨率,都可以从其它分辨率那里获取同样的信息,平衡了信息流,使得特征更具判别度。
目标层级不均衡。Kendall等人证明,基于多任务学习的模型的表现非常依赖损失函数中各任务的相互权重。但是之前的方法主要关注在如何增强模型结构的识别能力上。最近,UnitBox 和 IoUNet 引入了一些新的、有关IoU的目标函数,提升定位精度。与这些方法不同,Libra R-CNN 对各任务和样本进行了再平衡,收敛得更好。
3. Methodology
Libra R-CNN 的整体结构如图2所示。我们的目的是,通过一个整体均衡的结构设计,缓解检测器训练过程中的不均衡问题,尽可能地发掘模型的能力。
3.1 IoU-balanced sampling
首先有一个问题:训练样本与ground truth之间的重叠度是否和它的检测难度相关?为了回答这个问题,作者在后面进行了一系列的实验。结果如图3所示。本文主要考虑难例样本。作者发现超过的难例的重叠度要大于0.05,而随机采样中,只有的训练样本高于该阈值。该极端的样本不均衡使得许多难例被误认为是容易样本。
受此启发,作者提出了IoU-均衡采样:一个简单而高效的难例挖掘方法,成本几乎为0。假设我们要从个样本中采样出个负样本。在随机采样中,难例样本被选中概率是:
为了提升难例被选中的概率,作者根据IoU大小,均匀地划分个区间。将个负样本平均地分到各个区间。每个区间的候选样本数为。因此,在IoU-均衡采样下,难例被选中概率是:
其中,是第个区间的候选样本的个数。在实验中,作者设。
IoU-均衡采样的直方图如图3中绿色部分所示。可以看到,IoU-均衡采样可以让训练样本分布更接近难例的分布。实验证明,更高IoU的样本更容易被挑选出来,其性能与K的取值无关。
此外,这个方法对 hard positive样本同样适用。然而,大多数情况下,没有足够的候选样本,对正样本进行扩充,因此,本文选择了一个替代的方法来达到平衡采样的目的,即对每个ground truth采样相同数量的正样本。
3.2 平衡特征金字塔
和之前通过lateral 连接来融合多层级特征的方法不同,本文的核心思想是通过同样的深度融合的、平衡的语义特征来增强多层级特征。流程如图4所示。它由4个步骤构成,再缩放、融合、优化和增强。
获取平衡的语义特征。分辨率层级的特征用表示。多层级特征的个数用表示。最低和最高的层级索引分别用和表示。图4中,有着最高的分辨率。为了同时融合多层级特征,并保留它们的语义层级,我们首先将多层级特征进行缩放至一个中间的大小,即的大小,分别通过插值和max pool操作。一旦有了缩放后的特征,我们就可以通过简单的平均操作来得到平衡的语义特征:
得到的特征,进行rescale然后通过反向操作增强原始每层的特征,此过程不包含任何参数,证明了信息传递的高效性。
优化平衡的语义特征。平衡的语义特征可以进一步优化,使之更具判别度。本文发现卷积和non-local 模型的增强效果都很好,但是non-local模型更加稳健。因此,作者在本文中使用了embedded Gaussian non-local 注意力机制。优化这一步有助于丰富特征信息,进而改善结果。
有了这个方法,就可以同时融合low-level特征和high-level特征了。输出延续了FPN中同样的方式,用于后续的目标检测。值得注意的是,该平衡的特征金字塔可以作为FPN和PAFPN的补充,不会产生任何冲突。
3.3 Balanced L1 Loss
自从Fast R-CNN,在多任务损失函数的监督下,我们同时解决分类和定位问题,定义如下:
和 是目标函数,分别对应着识别和定位。中的预测和目标分别用和表示。是类别对应的回归结果。是回归目标。用于调节多任务学习中的损失权重。我们将损失大于或等于1.0的样本称为outliers。其它的样本称为inliers。
平衡各项任务的一个自然的方法就是调节各损失的权重。但是,由于回归目标没有边界,直接升高定位损失的权重会使模型对outliers更加敏感。这些outliers,可以视作为难例,会产生特别大的梯度,对训练过程不利。Inliers 可以视作容易样本,与outliers相比,对总体梯度的贡献较少。更具体点说,和outliers相比,inliers只贡献在每个样本上只贡献了的梯度。因此,作者提出了平衡的L1损失,记做。
Balanced L1损失由传统的smooth L1损失而来,Smooth L1损失通过设置一个拐点来分开 inliers 与 outliers,并对outliers通过一个max(p,1.0)进行梯度截断,如图5-a虚线所示。Balanced L1 损失的核心思想是,提升影响较大的回归梯度,(像inliers的梯度,即准确样本的梯度),进而平衡所包含的样本及任务。从而可以在分类、粗定位,及细定位中实现训练的平衡,基于Balanced L1 损失的定位损失如下,
对应的梯度如下:
基于上述公式,作者设计了一个改进的梯度式子:
图5-a 展示了该balanced L1损失在控制因子的控制下,inliers梯度上升。小的使得inliers梯度增长的更快,而outliers的梯度并不受影响。此外,通过设置参数来调整回归误差的上界,有助于目标函数更好地平衡所包含的任务。通过调整这两个参数,可以得到更加平衡的训练。用于确保在等式8中的式子中,有相同的值。
将上面的梯度式子整合起来,我们可以得到balanced L1损失函数:
其中参数受下式约束:
在实验中,默认参数的值设为:。