Focal loss

阿里云教程2个月前发布
18 0 0

图像分割任务在设计loss时需要思考两个问题,一是类别间样本不均衡,二是无法区分难易个体。在类别不均衡的时候,会被数量多的类别主导loss,可能造成小的样本分类不出来,这个问题可以通过平衡权重的CE loss解决,给每个类别赋予不同的权重,权重可以通过类别的反频率计算得到或者凭经验设置。无法区分难易个体是说分类每个像素点的难易程度不同,列如分类物体边缘所在的像素点要更困难,而分类一片天空的中间像素点简单一些。而balanced CE loss很明显对每个像素点它都认为同等重大,这会造成一个问题,大量简单易分类样本提供的单个小loss积少成多,影响整体loss的走向。

对这两个问题举个例子,一张200×200的图像,里面有只猫,占据200个像素点,做一个二分类分割,猫(1),背景(0),其中背景里面有100个点是与猫边缘结合的点(较难预测),现假设预测所有点的预测都为0.1(全预测为背景),pred = 「0.1」,阈值设为0.5吧。

对于CE loss, 负样本损失negloss = 39800 * (-log(1-0.1))= 1821,正样本损失posloss = 200*(-log(0.1))= 200。可以看到在类别不均衡情况下,数量较少的类别猫在完全预测错误的情况下,损失依旧远小于预测正确的类别,只由于背景类别数量多。loss更偏向背景类别下降,最后可能就使猫分割不出来。

目前使用平衡权重,权重为类别对应的频率的倒数,大约就是pos:neg=1:200

negloss2 = negloss*1 = 1821,posloss2 = posloss*200 = 40000。此时完全分割错误的正样本带来的损失远远大于负样本。

现单独看背景类别,假设100个边缘结合的点预测为「0.9」,其余依旧预测为「0.1」。背景的损失loss3 = 39700*(-log(1-0.1))+100*(-log(1-0.9)) =1816+100。大量易分类样本的小loss积少成多又主导了loss。为了让loss更为关注难分类样本,我们又可以把赋权操作再拿出来,什么是难分类样本?就是预测的概率与真实值偏差大嘛,于是就可以用预测的概率来赋权,这大致就是focal loss的想法了。

gamma=2时 focalloss2 = 0.01*39700*(-log(1-0.1))+0.81*100*(-log(1-0.9))=18.16+81。

这样较难的样本主导了loss。gamma的作用就是减小易分类样本的影响,gamma越大,效果越强。交叉熵损失到这里就相比较完善了,平衡了类别和区分了难易。

小点:

focal loss使用的alpha-balanced weights,但是文中给正样本的alpha=0.25,原本正样本就少,还给小一些的权重,不是更雪上加霜吗?有说这是由于经过(1-p_t)^gamma,损失大小反转了,需要再次平衡损失。就像上个例子gamma=2时一样,此时正样本损失反而比负样本大。

focal loss 有时候没ce loss好用。

© 版权声明

相关文章

暂无评论

none
暂无评论...