导语
今天重新回顾一下经典的Focal Loss,是Kaiming He大神于2017 ICCV上发表的经典论文,主要用于解决不平衡分类问题。
- 会议:ICCV 2017
- 链接:arxiv.org/pdf/1708.02…
1 简介
目标检测方法主要可以分为两大类:two-stage detector和one-stage detector。二阶段检测器是指类似Faster RCNN这种需要region proposal的检测算法,这类两阶段算法可以达到很高的准确率,但速度慢。后者是指类似YOLO,SSD这样不需要region proposal,直接回归的检测算法,这类算法速度很快,但是准确率不如前者。
例如R-CNN框架中,第一阶段生成少量候选目标位置,第二阶段使用卷积神经网络将每个候选位置分类为前景类别或背景。然而,最近的一阶段检测器(如YOLO和SSD)表现出了很好的速度和准确性,使人们想知道是否有可能设计出一个简单的一阶段检测器,能够实现与两阶段检测器相似的准确性。
本文提出了一个称为RetinaNet的一阶段检测器,它通过在输入图像中正常密集采样物体位置、尺度和长宽比来实现。本文发现,一阶段检测器训练过程中的类别不平衡是阻碍其达到最先进准确性的主要障碍,并提出了一种名为Focal loss的新损失函数,它可以有效解决这个问题。RetinaNet使用Focal loss进行训练,它的速度和准确性都很高,超过了之前最好的单一模型结果,实现了与复杂两阶段检测器相当的准确性。
2 相关工作
略
3 Focal Loss
在介绍Focal loss前,我们先回顾一下最原始的CE Loss,
为了表示简便,用定义pt如下:
那么,就有CE(p,y)=CE(pt)=−log(pt).CE(p, y) = CE(p_t) = −log(p_t).
CE Loss如图1中的蓝色(顶部)曲线所示。这种loss的一个值得注意的性质,可以很容易地从它的图中看到,就是即使是容易分类的例子(pt>0.5p_t > 0.5)也会产生非平凡的损失。当对大量简单的例子求和时,这些小的损失值可能会压倒罕见的类。
3.1 平衡的CE
解决类失衡的一个常用方法是为类1引入一个加权因子α∈[0,1],为类-1引入1 – α。在实际应用中,α可以用逆类频率来设定,也可以作为一个超参数,通过交叉验证来设定。为了表示方便,我们像定义p t一样定义α t。我们将α-平衡CE损失写成:
这种损失是CE的简单延伸,作者认为这是提出的Focal loss的Baseline。
3.2 Focal loss定义
Dense检测器训练过程中遇到的大类不平衡压倒了交叉熵损失。容易分类的类构成了大部分的损失,并主导了梯度。虽然α平衡了积极/消极例子的重要性,但它并不区分简单/困难的例子。相反,作者建议重新加权损失函数以降低简单示例的权重,从而将训练重点放在困难的否定上。
更正式地说,作者提出在交叉熵损失中加入一个调制因子(1−pt)γ(1−p_t)^γ,可调focal参数γ≥0γ≥0。Focal loss定义为:
图1显示了γ∈[0,5]的几个值下的Focal loss。其具备两个特性:
- 当样本被误分类,且ptp_t较小时,调制因子接近1,损失不受影响。当pt→1p_t→1时,因子趋于0,并且对分类良好的示例的损失是下加权的。
- 聚焦参数γ平滑地调整了简单样例的降权率。当γ = 0时,FL相当于CE,并且随着γ的增加,调制因子的效果也同样增加(作者发现γ = 2在我们的实验中效果最好)。
直观地,调制因子减少了简单示例的损耗贡献,并扩展了示例接收低损耗的范围。例如,当γ = 2时,一个分类为pt=0.9p_t = 0.9的例子的损失比CE低100倍,当pt≈0.968p_t≈0.968时,其损失比CE低1000倍。这反过来又增加了纠正错误分类示例的重要性(当pt≤0.5p_t≤0.5且γ = 2时,其损失最多减少4倍)。
在实践中,使用α-平衡型焦损:
作者在实验中采用这种形式,因为它比非α-平衡形式的精度略有提高。
4 RetinaNet Detector
作者在Focal loss的基础上提出了一个新的RetinaNet Detector,其模型框架如下:
5 实验
实验结果如下表所示:
6 总结
本文认为类不平衡是阻碍单阶段目标检测器超越表现最好的两阶段方法的主要障碍。为了解决这个问题,作者提出了焦点损失,它将调制项应用于交叉熵损失,以便将学习集中在硬负例上。Focal loss简单而高效,通过设计一个全卷积单级检测器证明其有效性,并报告了广泛的实验分析,表明它达到了最先进的精度和速度。