论文下载:Focal Loss for Dense Object Detection
????????Focal Loss损失函数何凯明大神在RetinaNet网络中提出来的,主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的比重,也可以理解为一种困难样本的挖掘。它通过调整标准的交叉熵损失函数,使得模型在训练过程中更加关注难以分类的样本。
????????Focal Loss是在交叉熵损失函数基础上进行的修改,首先回顾二分类交叉熵损失:
????????y'是经过激活函数的输出,所以在0-1之间。
????????可见普通的交叉熵对于正样本而言,输出概率越大损失越小。对于负样本而言,输出概率越小则损失越小。
????????此时的损失函数在大量简单样本的迭代过程中比较缓慢且可能无法优化至最优。那么Focal Loss是怎样改进的呢?
????????Focal Loss会在常规的交叉熵损失函数基础上增加一个调整项,这个调整项的目的是减小容易分类样本对总损失的贡献,而增加难分类样本对总损失的贡献。通过这种方式,模型在训练过程中会更加关注那些难以分类的样本,从而提高模型的分类性能。
????????1、首先在原有的基础上加了一个因子,其中γ>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本。
????????例如,gamma=2时,对于正类样本而言,预测样本结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。
????????而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍。
????????所以更加关注与这种难以区分的样本。这样减少了简单样本影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。
????????2、此外,文中还加入平衡因子alpha,用来平衡正负样本本身的比例不均:当alpha取0.25,即正样本要比负样本占比小,这是因为负例易分。所以剩下来的困难样本重负样本反而少了,所以加权。
????????只添加alpha虽然可以平衡正负样本,但是无法解决简单与困难样本的问题。
????????gamma调节简单样本权重减低的速率,当gamma=0时,即为交叉熵损失函数。当gamma增加时,调整因子的影响也在增加。
????????作者认为one-stage和two-stage的表现差异主要原因是大量前景背景类别不平衡导致。作者设计了一个简单密集型网络RetinaNet来训练,在保证速度的同时达到了精度最优。
? ? ? ? 为什么two-stage可以避免样本极不平衡?
????????在双阶段算法中,在候选框阶段,通过得分和NMS筛选过滤掉了大量的负样本,然后在分类回归阶段又固定了正负样本比例,或者通过OHEM在线困难挖掘是的前景和背景相对平衡。
? ? ? ? 为什么one-stage不能避免样本极不平衡?
????????one-stage阶段需要产生100k的候选位置,虽然有类似的采样,但是训练仍然被大量负样本所主导。