一、Focal Loss定义
Focal Loss通过调整loss的计算公式使单级结构达到和Faster RCNN一样的准确度,公式1是Focal Loss的计算方法。pt是不同类别的分类概率,r是个大于0的值,αt是个[0,1]间的小数,r和αt都是固定值,不参与训练。从表达式可以看出:
1、无论是前景类还是背景类,pt越大,权重(1-pt)r就越小。也就是说easy example可以通过权重进行抑制;
2、αt用于调节positive和negative的比例,背景类别使用αt时,对应的前景类别使用1-αt;
关于指标αt的选择问题,论文中描述如下:
In practice,α may be set by inverse class frequency or treated as a hyperparameter to set by cross validation.For notational convenience, we define αt analogously to how we defined pt.
根据论文中的描述,对于背景的α应该取值为前景的频率,而前景的α应该取值为背景的频率。所以,这里需要注意一个问题,论文中说可以按照pt的形式来定义αt,那么αt的取值应该是和pt相反。即,αt=α对应1-p,αt=1-α对应与p。
因此,论文中,αt取值为0.25,那么它应该是对应于背景,因为背景的数量远多于前景,所以对应的α取值要使用较小的。
3、r和αt的最优值是相互影响的,所以在评估准确度时需要把两者组合起来调节。作者在论文中给出r=2、αt=0.25时,ResNet-101+FPN作为backbone的结构有最优的性能。
二、注意,到这里还Focal Loss的计算才完成一半
从上面得到的FL(pt)还需要进行标准化才能得到最终的结果。标准化的方法:除以groud-truth box的数量。
三、此外作者还给了几个实验结果:
1、在计算pt时用sigmoid方法比softmax准确度更高;
2、Focal Loss的公式并不是固定的,也可以有其它形式,性能差异不大,所以说Focal Loss的表达式并不crucial。
3、在训练初始阶段因为positivie和negative的分类概率基本一致,会造成公式1起不到抑制easy example的作用,为了打破这种情况,作者对最后一级用于分类的卷积的bias(具体位置见图2)作了下小修改,把它初始化成一个特殊的值b=-log((1-π)/π)。π在论文中取0.01,这样做能提高模型在训练阶段的稳定性,在训练初始阶段提高positive的分类概率。
这个修改很重要,这个偏置b可以防止大量的背景anchor在第一次迭代训练中产生一个大的,不稳定的损失值。如果不加的话,有可能在训练中会出现爆炸的可能。
参考:
1、https://arxiv.org/pdf/1708.02002.pdf
2、https://www.jianshu.com/p/204d9ad9507f