论文相关:
Lin, Tsung-Yi, Priya Goyal, Ross Girshick, Kaiming He, and Piotr Dollár. "Focal loss for dense object detection." arXiv preprint arXiv:1708.02002 (2017).
1.论文摘要
检测器分为一阶段检测器和二阶段检测器两种。目前来讲,二阶段检测器的精度一般较高,但是速度比较慢(如R-CNN系列)。而一阶段检测器运行起来更快更简单,但是精度却不如二阶段检测器。在本文中,作者发现,在密集检测器的训练过程中出现的前景/背景样本的极端不平衡是出现这个情况的主要原因。作者通过重塑标准的交叉熵损失函数来解决这种类别不平衡问题,使得那些已经可以被很好区分开的样本在训练时权重降低。作者提出的焦点损失函数(Focal Loss)令模型在训练时将精力集中在一组较为稀疏的难分类的样本上,这样的话,那些大量存在的易于区分的负样本就不会使得检测器在训练时失衡。
2.背景及动机
当前,精度较高的检测器是以二阶段的检测器为基础,以推荐区域来驱动的。比如R-CNN框架中,第一个阶段先生成一组稀疏的候选目标位置,第二阶段再对这些候选目标一一加以识别。尽管二阶段检测器的效果很好,但是大家还是很自然地会想用一个更为简单的一阶段检测器来达到相似的精度。最近的一些工作比如YOLO,SSD,证明了这种方法很有潜力。相对于二阶段检测器,它们速度快,但精度不足。而作者认为,样本不平衡是阻碍一阶段检测器性能的主要障碍。
在二阶段检测器中,它们的第一个区域推荐阶段已经解决了样本不平衡问题(使用Selective Search,EdgeBoxes,DeepMask,RPN等方法)。这些方法迅速过滤掉了大部分背景样本。然后在第二阶段,一些启发式的采样手段的应用(比如正负样本比例为1:3或者在线困难样本挖掘)使得正负样本处于一个平衡状态。
与此相反,一阶段检测器每次处理一张图片时要处理大量的候选目标,在实际操作中,这个数量可能达到10万个。尽管也可以采取一些启发式手段,但是训练阶段仍然被大量的很简单就可以区分出来的背景样本主导。对于检测器来说,每张图片它要评估10^4~10^5个候选目标,而其中只有很少一部分是包含物体的,这个比例大概为1000:1.
总的来说,类别不平衡导致2个问题:1)训练过程中大部分样本为easy negatives,它们对学习没有什么贡献;2)这些大量的easy negatives会主导整个训练过程,可能会导致模型退化。
本文提出的Focal Loss函数是一个动态的规模缩放的交叉熵损失函数。也就是说。样本越容易被区分,它的尺度因子越趋向于0.如下图所示。直观的理解为,这个尺度因子降低在模型训练过程中,那些容易区分的样本的影响,而让模型把更多注意力集中到难以区分的样本身上。
3.焦点损失(Focal Loss)
我们从二分类的交叉熵损失函数来引入焦点损失:
上面这个式子中,y属于{+1,-1},表示目标类别。我们定义一个变量:
将CE(p,y)改写为。
3.1平衡交叉熵
我们通过逆类别频率或者交叉验证来设置一个权重因子,类别1是α,类别2就是1-α。此时α平衡交叉熵损失函数就可以写作:
这是交叉熵损失函数的基本拓展,也是我们实验的一个baseline。
3.2焦点损失定义
α平衡的交叉熵损失只平衡了正/负样本,但是并没有区分难/易样本。我们引入一个调节因子,来平衡难易样本的损失权重:
图1显示了不同γ的焦点损失函数。这个损失函数有2个性质:1)当样本被错分时,p_t比较小,此时调节因子接近1,损失无影响。而分类正确时调节因子接近0,被正确区分的样本的损失就降低了2)γ控制了这个调节的速率。
直观的讲,焦点损失函数降低了容易分类的样本的损失。举例来讲,但γ=2时,如果一个样本以0.9的概率被正确区分,那么它的损失和交叉熵损失函数相比就被降低了100倍左右;而这个样本如果以0.968的概率被正确区分,那么它的损失就会被降低1000倍左右。
在实际实验中,我们将α平衡和焦点损失相结合,如下:
3.3类别平衡和模型初始化
一般的二分类模型,初始化的时候都是按照正负样本相同的概率来随机初始化。在类别不平衡的情况下,这种初始化方法会使得数量多的类的损失主导整个损失,导致模型训练初期的不稳定性。我们在初始化的时候给不常出现的类(比如目标出现的次数就比背景出现的次数少很多)一个先验概率p。具体做法是初始化分类网络时,除了最后一层,其他层仍然无偏差的随机初始化,而在最后的分类层,我们将偏差初始化为,π本文取0.01。实验证明这种初始化方法增加了训练的稳定性,不管是交叉熵损失或者是焦点损失。
4.RetinaNet检测器
网络结构如图,包含一个骨干网络和两个分类子网络。骨干网络是一个特征金字塔网络,负责在一张输入图片上计算出来一个卷积特征,这用一个现成的卷积网络即可。网络的很多参数比如通道数可能并不是决定性的,但是这个特征金字塔骨干至关重要,没有这个特征金字塔网络的话RetinaNet只能产生一个很低的AP。对于子网络,第一个子网络负责在骨干网络计算出来的卷积特征上进行分类;第二个子网络负责在骨干网络计算出来的卷积特征上进行bounding box回归。网络的具体设置看查看论文。
5.总体实验结果
各个超参数对结果的影响