深度学习技术在多个行业中的应用日益广泛,从图像安全、监控、自动驾驶系统到机器检查等领域都有其身影。目前,基于深度学习的目标检测主要分为两大类:两阶段检测器,如基于区域的CNN(R-CNN)及其后续版本;以及一阶段检测器,如YOLO系列检测器和SSD。一阶段检测器通过在规则的、密集的锚框(可能的物体位置)上应用检测,有潜力实现更快、更简单的检测,但由于在训练过程中遇到的极端类别不平衡问题,其准确度一直落后于两阶段检测器。
2018年,FAIR发布了一篇论文,介绍了一种名为RetinaNet的一阶段检测器,并提出了Focal Loss的概念来解决类别不平衡问题。在深入探讨Focal Loss的细节之前,首先需要理解什么是类别不平衡问题以及它可能引起的问题。
传统的一阶段检测方法,如提升检测器、DPM等,以及更近期的方法如SSD,每张图片评估近10^4到10^5个候选位置,但只有少数位置包含物体(即前景),其余都是背景。这导致了类别不平衡问题。这种不平衡导致两个问题:一是训练效率低下,因为大多数位置是容易负样本(即可以被检测器轻易分类为背景),对学习没有贡献;二是由于容易负样本(高概率检测)占输入的大部分,虽然它们单独导致的损失值很小,但总体上可能会压倒损失和计算梯度,导致模型退化。
简单来说,Focal Loss(FL)是Cross-Entropy Loss(CE)的改进版本,它通过为难以分类或容易被误分类的样本(如具有嘈杂纹理的背景、部分物体或感兴趣的物体)分配更多权重,而为容易样本(如背景物体)降低权重,来尝试解决类别不平衡问题。因此,Focal Loss减少了容易样本的损失贡献,并增加了纠正误分类样本的重要性。
交叉熵损失的核心思想是比奖励正确预测更多地惩罚错误预测。二分类的交叉熵损失公式如下:
CE(p, y) = -[y * ln(p) + (1 - y) * ln(1 - p)]
其中,y是Y的实际值,p是Y的预测值。为了符号方便,将预测值p记为p_t,实际值y记为y。y属于{0,1},是真实类别;p属于[0,1],是模型对类别y=1的估计概率。
如所见,在下面的图表中,当p非常接近0(当y=0)或1时,容易分类的样本(p_t > 0.5)可能会产生非微不足道的损失大小。
解决这种类别不平衡问题的常见方法是引入一个权重因子α∈[0,1],用于类别1和1-α用于类别-1。
CE(p_t) = -α_t * ln(p_t)
其中,α_t是损失函数中的权重因子。
Focal Loss是交叉熵损失函数的扩展,它会减少容易样本的权重,并专注于训练中的困难负样本。为了实现这一点,研究人员提出了:
FL(p_t) = -α_t * (1 - p_t)^γ * log(p_t)
其中,γ是一个可调的聚焦参数,≥0。RetinaNet目标检测方法使用了α-平衡的Focal Loss变体,其中α=0.25,γ=2效果最佳。