剖析 Focal Loss 损失函数: 消除类别不平衡+挖掘难分样本

论文名称:《 Focal Loss for Dense Object Detection 》

论文下载:https://arxiv.org/pdf/1708.02002.pdf

论文代码:https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines


一、概述:

剖析 Focal Loss 损失函数: 消除类别不平衡+挖掘难分样本_第1张图片

本文的目的就是为了探讨为什么one-stage detector相比two-stage detector精度要差。

one-stage detector的准确率不如two-stage detector的原因,本文给出的结论是:由样本的 类别不均衡 导致

在目标检测算法中,对于输入的一张图像,可能会生成成千上万的预选框(region proposal),但是其中只有很少一部分是包含真实目标的,这就带来了类别不均衡问题。

那么类别不均衡会带来两个后果:

(1) training is inefficient as most locations are easy negatives that contribute no useful learning signal;

(2) the easy negatives can overwhelm training and lead to degenerate models.

总的来说,就是无用的易分反例样本会使得模型的整体学习方向跑偏,导致无效学习,即只能分辨出没有物体的背景,而无法分辨具体的物体。负样本数量太大,占总的loss函数输入参数的大部分,而且多是容易分类的,因此使得模型的优化方向(即loss函数的梯度下降方向)并不是我们所希望的那样。

先前也有一些算法来处理类别不均衡的问题,比如OHEM(online hard example mining),OHEM的主要思想可以用原文的一句话概括:In OHEM each example is scored by its loss, non-maximum suppression (nms) is then applied, and a minibatch is constructed with the highest-loss examples。OHEM算法虽然增加了错分类(正、负)样本的权重,但是OHEM算法忽略了容易分类的(正)样本。

因此针对类别不均衡问题,作者提出一种新的损失函数:focal loss。

这个损失函数是在标准交叉熵损失基础上修改得到的。这个函数可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。为了证明focal loss的有效性,作者设计了一个dense detector:RetinaNet,并且在训练时采用focal loss训练。实验证明RetinaNet不仅可以达到one-stage detector的速度,也能有two-stage detector的准确率。

二、算法:

首先回顾二分类交叉熵损失

其中 y 是真实样本的标签(1正0负), y’ 是经过 sigmoid 激活函数的预测输出(数值在0-1之间)。可见普通的交叉熵对于正样本而言,输出概率越大损失越小。对于负样本而言,输出概率越小则损失越小。此时的损失函数在大量简单样本的迭代过程中比较缓慢且可能无法优化至最优。

作者由此提出Focal loss函数

首先在原有的基础上加了一个因子,其中Gamma>0使得减少易分类样本的损失,使得模型更关注于困难的、错分的样本

例如:Gamma为2时,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍。所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效

在此基础上,再引入一个平衡因子 Alpha,用来平衡正负样本本身的数量比例不均(即类别不均衡):

只添加Alpha虽然可以平衡正负样本的重要性,但是无法解决简单与困难样本的问题,因此针对难分样本的Gamma也必不可少。

这里的两个参数α和γ协调来控制,本文作者采用α=0.25,γ=2效果最好。

Gamma调节简单样本权重降低的速率,当Gamma为0时即为交叉熵损失函数,当Gamma增加时,调整因子的影响也在增加。

3. 总结:

作者认为one-stage和two-stage的表现差异主要原因是大量前景背景类别不平衡导致,以此提出Focal Loss函数。

作者设计了一个简单密集型网络RetinaNet,采用Focal Loss函数来训练,在保证速度的同时达到了精度最优,验证了效果。

剖析 Focal Loss 损失函数: 消除类别不平衡+挖掘难分样本_第2张图片

Two-Stage算法,在产生region proposal阶段,通过score筛选和nms筛选过滤掉了大量的负样本,然后在分类、回归阶段又固定了正负样本比例(1:3),或者通过OHEM技巧使得前景和背景相对平衡。类别不平衡的问题并不明显,算法精度得以保证。

One-Stage算法需要产生超大量的预选框,训练被大量负样本所主导,Focal Loss对此种情况卓有成效。

你可能感兴趣的:(目标检测,目标检测:经典论文解读)