1 背景

现有的最好的目标检测器是基于两阶段的目标检测算法。如流行的R-CNN结构,第一个stage生成一系列候选目标框位置,第二阶段使用CNN对每个候选框进行前景或背景的分类。经过一系列发展,两阶段目标检测算法在精度上已经了很大的提升。 既然这样,那么我们不禁要问:是什么原因造成了两阶段检测器的精度比单阶段的检测要好?
本文根据这个问题从一个方面进行了深入探究讨论。

2 问题分析

作者认为对于单阶段的分类器而言,主要是因为以下两个问题造成了目标检测精度较低

  1. 前后景样本不平衡。在单阶段检测器中,不加选择的进行分类和定位,会降低精度。
  2. 在分类样本中,充斥着大量的很容易区分的样本,拉低了分类器的学习效果。

在两阶段检测器中是怎样解决处理上面两个问题的:

  1. 有偏的正负样本比例采样,一般保持1:3。
  2. 对候选框进行随机选取的过程中,一定程度上的滤除容易分类的样本,保留不容易分类的样本。

作者通过设计了一个有偏的损失函数来解决上述两个问题

3. 损失函数的设计

Focal Loss 是设计来解决one-stage目标检测里训练时有着极端的前后景样本不平衡的场景的(如1:1000)。
我们从二分类的交叉熵loss来引入focal loss:

3.1 基本的二分类交叉熵损失函数

Focal Loss for Dense Object Detection

这个损失函数的一个显著特点就是即使容易分类的样本(pt≫.5pt≫.5)也会引起 loss,即便是很小的量级。当大量的easy 样本加到一起,这些个小的loss就会淹没难例,如下图的 Well-classified examples。
Focal Loss for Dense Object Detection

3.2 平衡的交叉熵函数

Focal Loss for Dense Object Detection

3.3Focal Loss损失的定义

我们在交叉熵上添加了一个带有focusing参数γ≥0γ≥0的调制因子(1−pt)γ(1−pt)γ,我们定义focal loss 如下:
Focal Loss for Dense Object Detection
我们注意到focal loss的两个特点。(1)当一个样本被错误分类,ptpt是很小的,那么对应的调制因子就接近于1,进而这个loss是不受影响的。如果pt→1pt→1,那么调制因子趋近于0,这个好分类样本的loss就被降低权重。(2)focusing参数γγ平滑地调整了好分类样本被降低权重的比率。当γ=0γ=0,FL就等于CE,当γγ增加,调制因子的影响也会相应的增加(实验中,我们发现γ=2γ=2效果最好)。
直观来看,调制因子减小了好分类例子的loss贡献,然后延伸了得到低loss的样本的范围。比如,在γ=2γ=2的情况下,一个pt=0.9pt=0.9的分类样本的FL相比于CE会小100倍,如果pt≈0.968pt≈0.968那就就会小1000倍。这就相应的增加了矫正错误分类样本的重要性(对于难例的权值减小最多是4倍,当pt≤.5pt≤.5和γ=2γ=2)。

4. RetinaNet Detector网络结构

Focal Loss for Dense Object Detection
对于分类子网络的最后一层卷积层,我们设置初始偏置项为b=−log((1−π)/π)b=−log⁡((1−π)/π),这里ππ被指定在训练开始时,所有的anchor都需要被标注为带有~ππ置信率的前景。在所有的实验中,我们使用π=.01π=.01,尽管结果对于这个值相对鲁棒。就像3.4节中介绍的一样,这个初始化是为了防止在训练的第一个周期大量的背景anchors生成一个巨大的不稳定的loss值。

相关文章: