Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记

前言

作者认为,在目前的目标检测器的训练过程中存在三个方面的不平衡问题,如下图所示:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记

  • (a)样本层次的不平衡: 在训练目标检测器时,hard样本是最有价值的,它能够有效提升检测器的性能。但是,随机采样机制会导致样本中大多数都是easy样本。OHEM虽然能够选出更多hard样本,但这个方法对噪声不鲁棒,并且计算量较大。Focal loss虽然在single-stage检测器中很有效,但对于two-stage检测器则收效甚微,因为在RPN阶段就已经过滤掉很多easy negative样本。
  • (b)特征层次的不平衡: 较深的高级特征通常包含更多的语义信息,而浅层的低级特征包含更多的细节信息。虽然已经有FPN和PANet通过横向连接将高级特征和低级特征进行融合,但是这种融合方法并不是最优的。融合特征应该包含不同大小特征图的平衡信息,但通过FPN和PANet得到的融合特征包含更多的是相邻特征图的信息,其它特征图的信息基本没有。在信息的传递过程中,每次融合操作会使得非相邻层级的语义信息被稀释。
  • (c)损失函数层次的不平衡: 检测器需要完成分类和定位两个任务,如果这两部分的损失不平衡,如上图所示,那么整体的性能就不能达到最优,由easy样本产生的较小的梯度会“淹没”由hard样本产生的较大的梯度,进而限制了后续的一些细化操作。因此需要重新调整样本和损失函数的平衡,以使模型达到最优收敛。

针对以上三个问题,本文提出Libra R-CNN,它由三部分组成:

  1. IoU-balanced sampling:根据与gt的IoU来挖掘hard样本;
  2. balanced feature pyramid:使用相同深度的融合后的平衡的语义特征,来加强多层级特征;
  3. balanced L1 loss:增强关键梯度,使得分类、粗定位和细定位实现平衡。

方法实现

Libra R-CNN的整体结构如下图所示:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
接下来对三个部分进行介绍。

1. IoU-balanced sampling

训练样本和gt之间的IoU能够表示该样本的困难程度吗?如下图所示,超过60%的hard negative的IoU大于0.05,但在随机采样时,IoU大于0.05的hard样本仅有30%,也就是说,随机采样会导致极端的样本不平衡,绝大多数样本都是easy样本。
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
由此本文提出IoU-balanced sampling,假设要从MM个候选样本中采样NN个hard negative样本,那么在随机采样的情况下,每个hard样本被选择到的概率为:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
为了提升hard negative被选择到的概率,本文根据IoU将候选集合MM划分为KK个区间,每个区间的候选样本数为MkM_kNN要求每个区间内的hard negative样本是均匀分布的,然后对其进行均匀采样。这样IoU-balanced sampling的采样概率就变成了:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
IoU-balanced sampling如上图的绿色柱子所示,可以看到,它能够使得训练样本的分布更接近于hard negative。实验证明性能与KK的取值无关,IoU更高的样本更容易被选出来。

虽然对于hard positive样本也能采用这种方法,但由于正样本本来就不多,因此大多数情况下没有足够的候选样本对正样本进行扩充。因此,本文对每个gt采样相同数量的正样本作为一种替代方法。

2. balanced feature pyramid

本文使用相同深度的融合后的平衡的语义特征对多层级特征进行增强,如下图所示,整个过程包含四个阶段:rescaling,integrating,refining和strengthening。
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记

获取平衡的语义特征(rescaling&integrating)

将位于层级ll的特征记为ClC_l,多层级特征的数量为LL,最低和最高的层级分别为lminl_{min}lmaxl_{max}。在上图中,C2C_2的分辨率最大。为了在融合多层级特征的同时保留它们各自的语义层级,首先将多层级特征{C2,C3,C4,C5}\lbrace C_2,C_3,C_4,C_5\rbrace调整为和C4C_4相同的大小,然后取其均值得到平衡的语义特征:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
然后将平衡的语义特征分别调整为与多层级特征相同的大小,并进行融合,以增强原始特征。这样每个层级的特征都获得了来自其它层级特征的相等的信息,并且这一过程不包含任何参数。

对平衡的语义特征进行调整(refining&strengthening)

平衡的语义特征能够通过进一步调整,变得更具有判别性。本文发现卷积和non-local模块的增强效果都很好,但是non-local更稳定,因此使用embedded Gaussian non-local attention对平衡的语义特征进行增强。通过refining可以进一步丰富特征信息,进而提升结果。融合后得到的特征{P2,P3,P4,P5}\lbrace P_2,P_3,P_4,P_5 \rbrace用于后续的目标检测中,流程和FPN相同。

3. balanced L1 loss

在目标检测中的损失由两部分组成:分类损失和回归损失,通过λ\lambda来调整不同损失的权重,而一般来讲分类损失是大于回归损失的。那么为了平衡两种损失,最直接的方法是调整λ\lambda的值,但由于回归是没有界限的,直接增加回归损失的权重会使模型对outliers更加敏感。outliers可以看作是hard样本,它们产生的梯度值很大,会导致训练过程的不稳定。inliers可以看作是easy样本,与outliers相比它们对总梯度的贡献很少,只占总梯度的30%。对此本文对原来的smooth L1 loss做出了改进,称为balanced L1 loss,记为LbL_b

Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记

在smooth L1 loss中,通过设置一个拐点来区分inliers和outliers,并对outliers设置最大值1.0进行梯度截断,如上图中的虚线所示。balanced L1 loss的主要思想就是提升关键的回归梯度,也就是inliers中准确样本的梯度,在上图中表现为将直线“掰弯”,让位于拐点之前的inliers产生的梯度更大。 基于balanced L1 loss的定位损失LlocL_{loc}为:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
它对应的梯度流为:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
基于式(5)和(6),可以得到提升的梯度公式为:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
上图说明在α\alpha的控制下可以增加inliers的梯度,这并不会影响outliers的梯度。通过设置参数γ\gamma来调整回归损失的上界,如下图所示。通过调整α\alphaγ\gamma,可以得到更加平衡的训练。
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
通过整合以上的梯度公式,可以得到balanced L1 loss为:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记
其中几个参数需要满足以下条件:
Libra R-CNN: Towards Balanced Learning for Object Detection 论文笔记


结论

本文指出目标检测器训练过程中存在的三个不平衡问题,并针对这些问题,提出Libra R-CNN实现整体上平衡的设计。其中balanced feature pyramid可以作为FPN的一种补充。