Libra R-CNN论文阅读笔记

Libra R-CNN论文阅读笔记

摘要

1、检测器的性能所限于训练过程的不平衡问题,作者主要从三个层面解决训练过程的不平衡问题–sample level,feature level,objective level。

2、IoU balanced对应sample level的解决方案,balanced feature pyrmaid对应feature level的解决方案,balanced L1 loss对应Objective level的解决方案。

ps:这种结构的文章看起来还是舒服的,写起来应该也很舒服吧,哈哈哈。

引言

无论是单阶段还是两阶段的目标检测算法,其训练的整体流程大致相同:sampling regions ->extracting feature->recoginizing the categories and refining the location.

那么在这个流程下,就有三个决定性的因素:

  • 选取的候选区域是否具有代表性?往往采用Random Sampling的方式来挖掘训练样本,而这样通常会导致Easy example的比例远大于Hard example,导致了不平衡(上图a)
  • 提取的特征是否足够鲁棒,包含了所有信息?往往High level feature缺少边缘等图像层级的特征,而Low level feature缺少语义层级的特征。(上图b)
  • 设计的目标函数是否最优?目标检测的损失函数往往由分类损失与定位损失共同组成,设计的损失函数可能会更偏向某一部分,而导致了不平衡。(上图c)

首先让我们来看下针对上述问题,过去有哪些解决方案。

1、针对Sample level imbalance:OHEM它能够让模型更专注Hard example,但是它对噪声标签很敏感,并且有相当大的内存和计算成本。而大名鼎鼎的Focal loss,在两阶段的目标检测算法上表现并不理想(RoI的存在)。

2、针对Feature level imbalance:FPN这种方式的特征串联,仅仅使集成后的特征更加关注相邻分辨率的特征,而却很少关注其他分辨率的特征。

3、针对Objective level imbalance:目标检测需要很好地权衡好分类损失和定位损失,如果没有很好的平衡好,有可能导致Easy example的小梯度被Hard example的大梯度给淹没了,导致模型学“歪”了。

本文的分别提出了三个方案来解决上述的三个Imbalance问题。

1、 IoU-balanced Sampling ->Sample level imbalance

2、Balanced Feature Pyramid->Feature level imbalance

3、Balanced L1 Loss->Objective level imbalance

方法

IoU-balanced Sampling

作者发现超过60%的Hard example与真值框有超过0.05的IoU,而Random sample仅仅提供了30%的IoU大于0.05的样本。极度的样本分布不平衡导致了众多的Hard example被淹没在了Easy example中。因此作者提出了以下的方案:

假设我们要从M个相关候选样本中选出N个负样本,则根据IoU的值,将采样区间换分成K个bin,然后N要求负样本在每个格子中使均匀分布,然后对其进行均匀采样

Balanced Feature Pyramid

不同于FPN,作者通过将不同深度的特征融合来增强融合特征后各个层级特征的信息。主要包含以下四个步骤:

rescaling,integrating,refining和strengthening

作者同样使用到了FPN,将FPN的各层特征选择层级处于中间尺寸的(如上图C4),通过插值或者最大池化操作,将其他层级的特征resacle到该层级的尺寸,然后将rescale后的各层级特征integrate起来(直接通过取均值的方式)。之后在通过卷积层或者non-local module对特征进行refine,最后像FPN一样输出多个层级的特征。(Question:1)strengthen步骤在哪里啊,和refine一起的吗? 2)为何要像FPN一样多层级输出呢,直接用refine后特征效果如何呢?)

Balanced L1 Loss

Smooth L1 Loss我们都知道是大部分两阶段目标检测算法的定位损失,可以看到上图(a),在regression error较小时,Smooth L1 loss的梯度是比较小的,regression error较小也就对应了那些定位相对比较准确的Easy example,其梯度也比较小。这样就有可能导致Easy example的小梯度被Hard example的大梯度给淹没了(ps:Focal loss不是说Easy example梯度虽然小,但是其量级大呀。)作者为了能够解决小梯度的Easy example梯度被淹没的情况,提出了Balanced L1 loss

作者通过两个参数,$\alpha$ 和 $\gamma$两个参数来权衡。 当$\alpha$取越小的值时,它对Easy Example梯度回传的力度更大,但对Hard Example的梯度回传不会有影响。

感想

这篇文章看下来,提供了很多训练目标检测算法的trick,文章展现的效果是挺好的,但还是要结合实际的项目去实践。