Focal loss

        一张图像中能够匹配到目标的候选框(正样本)个数一般只有十几个活几十个。而没有匹配到的候选框(负样本)大概有10000 - 100000个。在这10000 - 100000个未匹配的候选框中大部分都是简单易分的负样本(对训练网络起不到什么作用,但由于数量太多淹没掉少量但有助于训练的样本)focal loss 的设计是为了去应对one stage目标检测里面正负样本极度不平衡的情况(前景和背景极度不平衡的情况)。因此,focal loss具有两个重要的特点: 1、控制正负样本的权重 2、控制容易分类和难分类样本的权重。

公式(1)交叉熵loss:

CE(p,y) = \begin{cases} -log(p)& \text{ if } p= 1\\ -log(1-p)& otherwise \end{cases}

公式(2):

p_{t}= \begin{cases} p& \text{ if } y= 1\\ 1-p& otherwise \end{cases}

CE(p,y) = CE(p_{t}) = -log(p_{t}) 

        对于二分类而言计算公式如(1)所示。y=1表示正样本。公式里的log = ln。将公式(2)带入公式(1)中可简化为 -log(pt)。为了控制各部分的权重引入参数α。此时公式如(3)所示。当为正样本时αt = α ,当为负样本时αt = 1 - α。α本质上是超参数,不是正负样本的比例。作者实验得出α为0.75时效果最好。

公式(3):

\alpha _{t}= \begin{cases} \alpha & \text{ if } y= 1\\ 1-\alpha & otherwise \end{cases}

CE(p,y,\alpha ) = \begin{cases} -log(p)*\alpha & \text{ if } p= 1\\ -log(1-p)*(1-\alpha )& otherwise \end{cases}

        为了降低简单样本的权重,聚焦于困难样本的训练。作者引入新因子(1-pt)^{\gamma }。公式如(4)所示,其中p代表样本为1类的概率,因此对于正样本而言p值越小也就是1-p越大越难分类,对于负样本而言p值越大越难分类,所以利用1-Pt就可以计算出每个样本属于容易分类或者难分类。 当样本为正时我们希望p越大越好,当样本为负时我们希望p越小越好。因此无论正负样本我们都希望pt越大越好。α是平衡正负样本的权重,但是它并不能区分样本是容易区分还是困难区分。

p_{t}= \begin{cases} p& \text{ if } y= 1\\ 1-p& otherwise \end{cases}

 FL(p_{t}) = -(1-p_{t})^{\gamma }log(p_{t})

其中:

(1-p_{t})^{\gamma }

        就是每个样本容易区分的程度,\gamma为调制系数。当Pt趋于0时调制系数趋于1,对于总的loss的贡献很大,当Pt趋于1的时候,调制系数趋于0,对总的loss贡献很小。当\gamma=0时。focal loss就是传统的交叉熵损失,可以通过调整\gamma实现调制系数的改变。

Focal loss最终的表达式

FL(p)= \begin{cases} -\alpha (1-p)^{ \gamma }log(p) & \text{ if } y= 1\\ -(1-\alpha )p^{\gamma }log(1-p)& otherwise \end{cases}

        作者经过实验得出当α = 0.25 γ = 2时效果最好 。

例子

Focal loss_第1张图片

 此图的γ=2,α=0.25。

        其中:p表示预测的目标概率, y表示真实的标签 (1为正样本0为负样本),CE是采用二分类获得的损失, FL 为采用Focal loss得到的损失,  rate为CE和FL之间的倍数。

        首先看前两行两个都是正样本,而且他们的p都很大,在正样本中属于易分的正样本。求得他们的CE 分别为0.105 ,0.033。可以看到使用FL会使易分的样本loss占比下降很多。同理第三四行也是一样。最后两行可以看出他们都是相对难区分的样本,FL对其的倍数相较于易分的样本差距很大。从而可以看出FL能够降低易分样本的损失贡献。

Focal loss的缺点:容易受到噪音的干扰。因为你一旦正负样本标注错了,就会一直针对训练你标错的样本。因此使用Focal loss一定要把样本标注正确。

你可能感兴趣的:(机器学习)