Focal Loss for Dense Object Detection

来源:互联网 发布:java使用百度地图api 编辑:程序博客网 时间:2024/05/21 03:58

    论文地址:Focal Loss for Dense Object Detection 

    目标检测的算法主要可以分为两大类:two-stage 和one-stagetwo-stage指类似Faster RCNN,RFCN这样需要region proposal的检测算法,这类算法可以达到很高的准确率,但是速度较慢。one-stage指类似YOLO,SSD这样不需要region proposal,直接回归的检测算法,这类算法速度很快,但是准确率不如前者。

    作者认为one-stage detector准确率不高的原因是:样本的类别不均衡导致的

    在object detection领域,一张图像可能生成成千上万的候选框,但是其中只有很少一部分是包含object的,这就带来了类别不均衡。    那么类别不均衡会带来什么后果呢?作者认为:负样本数量太大,占总的loss的大部分,而且多是容易分类的,因此使得模型的优化方向并不是我们所希望的那样

    因此针对类别不均衡问题,作者提出一种新的损失函数:focal loss,这个损失函数是在标准交叉熵损失基础上修改得到的。这个函数可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。    

    以二分类为例,交叉熵损失公式如下:

这里写图片描述

    因为是二分类,所以y的值是正1或负1,p的范围为0到1。当真实label是1,也就是y=1时,假如某个样本x预测为1这个类的概率p=0.6,那么损失就是-log(0.6),注意这个损失是大于等于0的。如果p=0.9,那么损失就是-log(0.9),所以p=0.6的损失要大于p=0.9的损失。

    用pt代替p,如下公式2:

这里写图片描述

    接下来介绍一个最基本的对交叉熵的改进,也将作为本文实验的baseline,如下公式3。什么意思呢?增加了一个系数at,跟pt的定义类似,当label=1的时候,at=a;当label=-1的时候,at=1-a,a的范围也是0到1。因此可以通过设定a的值(一般而言假如1这个类的样本数比-1这个类的样本数多很多,那么a会取0到0.5来增加-1这个类的样本的权重)来控制正负样本对总的loss的共享权重。

这里写图片描述

    显然前面的公式3虽然可以控制正负样本的权重,但是没法控制容易分类和难分类样本的权重于是就有了focal loss:

这里写图片描述

    这里的γ称作focusing parameter,γ>=0。

这里写图片描述

    称为调制系数(modulating factor) 


    这里介绍下focal loss的两个重要性质:1、当一个样本被分错的时候,pt是很小的(请结合公式2,比如当y=1时,p要小于0.5才是错分类,此时pt就比较小,反之亦然),因此调制系数就趋于1,也就是说相比原来的loss是没有什么大的改变的。当pt趋于1的时候(此时分类正确而且是易分类样本),调制系数趋于0,也就是对于总的loss的贡献很小。2、当γ=0的时候,focal loss就是传统的交叉熵损失,当γ增加的时候,调制系数也会增加。 focal loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失的贡献。

    作者在实验中采用的是公式5的focal loss(结合了公式3和公式4,这样既能调整正负样本的权重,又能控制难易分类样本的权重):

这里写图片描述

    在实验中a的选择范围也很广,一般而言当γ增加的时候,a需要减小一点(实验中γ=2,a=0.25的效果最好)

原创粉丝点击