参考:https://blog.csdn.net/wwwhp/article/details/83317738
paper:Focal Loss for Dense Object Detection
link:RetinaNet
Abstract
迄今为止,精度最高的目标检测器是基于R-CNN推广的两阶段方法,其中分类器应用于稀疏的一组候选对象位置。相比之下,对可能的目标位置进行常规、密集采样的单级探测器有可能更快、更简单,但迄今仍落后于两级探测器的精度。在本文中,我们将探讨为什么会出现这种情况。我们发现,在密集探测器训练过程中所遇到的极端的前后级不平衡是其主要原因。我们建议通过重新构造标准的交叉熵损失来解决这个类的不平衡,这样它就可以降低分配给分类良好的示例的损失 Focal Loss 。
检测中两阶段的方法比单阶段的效果好的原因是 前后类样本不均衡,在rcnn系列中,由于经过类似rpn的选择器,前景和背景相对均衡,而类似yolo,ssd就会产生大量无效背景。作者希望构造新的交叉熵损失来解决此问题
Introduction
类不平衡问题是通过两阶段级联和采样启发式算法来解决的。建议阶段(例如,选择性搜索[35],EdgeBoxes [39],深度掩码[24,25],RPN[28])快速地将候选对象位置的数量缩减到一个很小的数目(例如,1-2k),过滤掉大部分背景样本。在第二个分类阶段,执行采样启发式,例如固定的前背景比(1:3)或在线硬示例挖掘(OHEM)[31],以保持前景和背景之间的可管理的平衡。
在本文中,我们提出了一个新的损失函数,它比以往处理阶级不平衡的方法更有效
Related Work
我们的RetinaNet的设计与之前的高密度探测器有很多相似之处,特别是RPN[28]引入的“锚”概念,以及SSD[22]和FPN[20]中使用的特征金字塔。我们强调,我们的简单检测器之所以能取得最好的结果,不是基于网络设计上的创新,而是由于我们的新损失。
设计鲁棒的损失函数(例如Huber loss[13]),通过降低具有较大误差的例子(硬例子)的损失的权重来减少异常值的贡献,已经引起了很大的兴趣。相比之下,我们的重点损失不是处理异常值,而是通过降低inliers的权重(简单的例子)来解决阶级不平衡,这样即使inliers的数量很大,它们对总损失的贡献也很小。换句话说,Focal Loss的作用与鲁棒损失相反:它将训练集中在一组稀疏的硬示例上
Focal Loss
本文从交叉熵损失(CE)出发引入 Focal Loss
至于交叉熵不会的,去吧,pkq
https://blog.csdn.net/a984297068/article/details/81197893
https://blog.csdn.net/weixin_37567451/article/details/80895309
然后设
则 CE(p, y) = CE(pt) = − log(pt).
可以看出,大量容易分类的淹没少量不易分类的。
Balanced Cross Entropy
一个常见的方法解决类失衡是引入权重因子α∈f [0, 1],在实践中α可以设置通过逆类频率或视为超参数设置交叉验证。
实验结果表明,在稠密探测器训练过程中所遇到的较大的类不平衡抵消了交叉熵损失。容易分类的底片构成了大部分的损失,并主导梯度。而
α平衡的重要性在积极/消极的例子,不区分容易/难的例子。相反,我们建议重塑损失函数,减少简单例子的权重,从而将训练重点放在困难的负面因素上。
这里可以这么理解,因为用的交叉熵损失,α可以增大或减少正样本的权重,所以α可以用来处理样本不均衡,但是对于容易难的样本,α可能就不太起作用了。
Focal Loss Definition
当一个例子被错误分类并且pt很小时,调制因子接近于1,并且损失不受影响。就是,当pt=0,1-pt=1,损失= -logpt,和之前的一样,当pt=1时,因子趋于0,分类良好的例子的损失是向下加权的,就是会变小,是易分类的权重降低。直观地说,调制因子减少了来自简单示例的损失贡献,并扩展了示例接受低损失的范围。
例如,γ= 2,一个例子分类pt = 0.9将有100×低损失相比与CE和pt≈0.968会1000×低损失。这反过来增加纠正错误分类的例子的重要性
给大家解释一下,就是当样本是正样本时,你的模型给一个很高的值,可以,说明这个样本容易分吗,那我就不管你了,给你x一个很小的权重,但是你的模型假如给一个低的分数,那就表示这个样本你得着重注意,就不要降低权重了。
很容易理解,主要看1-pt,正样本pt越接近0 ,1-pt趋向1,就是不降低权重,否则,权重依次降低,直到接近1,权重趋向0
Focal Loss
最后的网络模型就不多介绍了,正如文中提出的,loss最重要。