论文地址:https://arxiv.org/abs/1708.02002
代码地址:https://github.com/facebookresearch/Detectron
摘要
论文中指出类不平衡是导致一阶段检测器与二阶段检测器之间性能差异的主要原因。
论文提出通过重塑标准交叉熵(standard cross entropy loss)来解决类不平衡,继而提出了一个新颖的损失函数:焦点损失(Focal Loss)。
Focal Loss重点训练一组稀疏的困难样本(hard examples),并防止大量容易样本在训练过程中淹没检测器。
Cross Entropy Loss
Focal Loss提出的目的:解决一阶段检测器在训练中存在前景与背景极端不平衡(e.g.,1:1000)的场景。
在介绍Focal Loss之前,先介绍下用于二元分类的交叉熵损失函数。
公式:
理解:
y ∈ {±1} ,代表标签类别;
p ∈ [0, 1] 是模型对带有标签y=1的类的估计概率。
为简洁表示,定义pt:
所以二元分类的交叉熵损失函数可表示为:
通俗理解:pt代表模型对类的估计概率,pt越大,代表模型分类越正确,即该样本越容易分类,其对损失函数的贡献也就越小。
下图可直观反映损失值CE Loss随pt增大的下降趋势。
该损失函数的劣势:
即使是易于分类的样本(pt>=0.5),在二元分类的交叉熵损失函数中也遭受了一个不可忽视的损失值,当存在大量的容易样本时,这些不可忽视的损失值可以压倒困难样本。
Balanced Cross Entropy
解决类不平衡的一种常见方法是为y=1类引入一个加权因子α∈ [0, 1],为y=-1类引入1-α,与pt类似,为简洁表达,定义了αt.
公式:
作用与劣势:
虽然加权因子α平衡了正负样本,但不能区分容易、困难样本。
Focal Loss
在交叉熵损失(cross entropy loss)函数的基础上加入一个调制因子
公式:
其中可调节的聚焦参数γ≥ 0
理解:当一个样本被错误分类且pt较小时,调制因子接近1,该样本对损失函数的贡献变化不大;当一个样本容易分类且pt较大时,调制因子接近0,该样本对损失函数的贡献会大幅下降。直观变化见下图。
在实验中,最后采用以下的损失函数形式: