focal loss for multi-class classification

转自:https://blog.csdn.net/Umi_you/article/details/80982190

Focal loss 出自何恺明团队Focal Loss for Dense Object Detection一文,用于解决分类问题中数据类别不平衡以及判别难易程度差别的问题。文章中因用于目标检测区分前景和背景的二分类问题,公式以二分类问题为例。项目需要,解决Focal loss在多分类上的实现,用此博客以记录过程中的疑惑、细节和个人理解,Keras实现代码链接放在最后。

框架:Keras(tensorflow后端)

环境:ubuntu16.04 python3.5

二分类和多分类

从初学开始就一直难以分清二分类和多分类在loss上的区别,虽然明白二分类其实是多分类的一个特殊情况,但在看Focal loss文章中的公式的时候还是不免头晕,之前不愿处理的细节如今不得不仔细从很基础的地方开始解读。

多分类Cross Entropy

H(y,y′)=−∑yi′logyi" role="presentation">H(y,y′)=?∑y′ilogyiH(y,y′)=?∑yi′logyi

二分类Cross Entropy

H(y,y′)=−∑i=01yi′logyi=−(y0′∗logy0+y1′∗logy1)=−[y0′∗logy0+(1−y0′)∗log(1−y0)]" role="presentation">H(y,y′)=?∑1i=0y′ilogyi=?(y′0?logy0+y′1?logy1)=?[y′0?logy0+(1?y′0)?log(1?y0)]H(y,y′)=?∑i=01yi′logyi=?(y0′?logy0+y1′?logy1)=?[y0′?logy0+(1?y0′)?log(1?y0)]

可以看出二分类问题的交叉熵其实是多分类扩展后的变形,在FocalLoss文章中,作者用一个分段函数代表二分类问题的CE(CrossEntropy)以及用pt的一个分段函数来代表二分类中标签值为1的 yi" role="presentation">yiyi部分(此处的标签值为one-hot[0 1]或[1 0]中1所在的类别):

文章图中的p(predict或probility?)等价于多分类Cross Entropy公式的y,也即经激活函数(多分类为softmax函数,二分类为sigmoid函数)后得到的概率,而文章中的y对应的是Cross Entropy中的y′" role="presentation">y′y′,即label。

CE经分段函数pt作为自变量后可以转化为CE(p,y)=CE(pt)=−log(pt)" role="presentation">CE(p,y)=CE(pt)=?log(pt)CE(p,y)=CE(pt)=?log(pt),实际上pt" role="presentation">ptpt所代表的就是多分类CE中的yi′" role="presentation">y′iyi′(标签值)为1对应的yi" role="presentation">yiyi的值,只不过在二分类中y0" role="presentation">y0y0和y1" role="presentation">y1y1互斥(两者之和为1),所以可以用一个分段的变量pt" role="presentation">ptpt来表示在i取不同值情况下的yi" role="presentation">yiyi,我理解pt" role="presentation">ptpt为当前样本的置信度,pt" role="presentation">ptpt越大置信度越大,交叉熵越小。总结:多分类中每个样本的pt为one-hot中label为1的index对应预测结果pred的值,用代码表达就是max(ypred∗ylabel,axis=−1)" role="presentation">max(ypred?ylabel,axis=?1)max(ypred?ylabel,axis=?1)

了解pt" role="presentation">ptpt所代表的是什么之后,接下来多分类的Focal Loss就好解决了。接下来举个三分类的例子来模拟一下流程大致就知道代码怎么写了:

假设

ypred" role="presentation">ypredypred为softmax之后得出的结果:

ylabel" role="presentation">ylabelylabel为one-hot标签:

pt=ypred∗ylabel" role="presentation">pt=ypred?ylabelpt=ypred?ylabel:

1−pt" role="presentation">1?pt1?pt :

log(pt)" role="presentation">log(pt)log(pt):(注意pt可能为0,log(x)的取值不能为0,所以加上epsilon)

Fl:

可以看到3.4538..的地方本该是0才对,原因是log函数后会得到一个很小的值,而不是0,所以应该先做log再乘y_label:

原: log(pt)=log(ylabel∗ypred)" role="presentation">log(pt)=log(ylabel?ypred)log(pt)=log(ylabel?ypred)

改: log(pt)=ylabel∗log(ypred)" role="presentation">log(pt)=ylabel?log(ypred)log(pt)=ylabel?log(ypred)

顺带一提,在多分类中alpha参数是没有效果的,每个样本都乘以了同样的权重

详细信息可以看代码中的注释

代码:Keras版本

原文地址:https://www.cnblogs.com/leebxo/p/10547091.html

时间: 2024-10-09 19:31:30

focal loss for multi-class classification的相关文章

Focal Loss 的理解

论文:<Focal Loss for Dense Object Detection> Focal Loss 是何恺明设计的为了解决one-stage目标检测在训练阶段前景类和背景类极度不均衡(如1:1000)的场景的损失函数.它是由二分类交叉熵改造而来的. 标准交叉熵 其中,p是模型预测属于类别y=1的概率.为了方便标记,定义: 交叉熵CE重写为: α-平衡交叉熵: 有一种解决类别不平衡的方法是引入一个值介于[0; 1]之间的权重因子α:当y=1时,取α; 当y=0时,取1-α. 这种方法,当

Focal Loss for Dense Object Detection(RetinaNet)

Focal Loss for Dense Object Detection ICCV2017 RBG和Kaiming大神的新作. 论文目标 我们知道object detection的算法主要可以分为两大类:two-stage detector和one-stage detector.前者是指类似Faster RCNN,RFCN这样需要region proposal的检测算法,这类算法可以达到很高的准确率,但是速度较慢.虽然可以通过减少proposal的数量或降低输入图像的分辨率等方式达到提速,但是

[论文理解]Focal Loss for Dense Object Detection(Retina Net)

Focal Loss for Dense Object Detection Intro 这又是一篇与何凯明大神有关的作品,文章主要解决了one-stage网络识别率普遍低于two-stage网络的问题,其指出其根本原因是样本类别不均衡导致,一针见血,通过改变传统的loss(CE)变为focal loss,瞬间提升了one-stage网络的准确率.与此同时,为了测试该loss对网络改进的影响,文章还特地设计了一个网络,retina net,证明了其想法. Problems 为啥one-stage网

Focal Loss for Dense Object Detection 论文阅读

何凯明大佬 ICCV 2017 best student paper 作者提出focal loss的出发点也是希望one-stage detector可以达到two-stage detector的准确率,同时不影响原有的速度.one-stage detector的准确率不如two-stage detector的原因,作者认为原因是:样本的类别不均衡导致的.因此针对类别不均衡问题,作者提出一种新的损失函数:focal loss,这个损失函数是在标准交叉熵损失基础上修改得到的.这个函数可以通过减少易

Focal Loss

转自:https://blog.csdn.net/u014380165/article/details/77019084 论文:Focal Loss for Dense Object Detection 论文链接:https://arxiv.org/abs/1708.02002 优化版的MXNet实现:https://github.com/miraclewkf/FocalLoss-MXNet RBG和Kaiming大神的新作. 我们知道object detection的算法主要可以分为两大类:t

Focal Loss解读

Focal loss论文详解 链接:https://zhuanlan.zhihu.com/p/49981234 何恺明大神的「Focal Loss」,如何更好地理解? 链接:https://zhuanlan.zhihu.com/p/32423092 原文地址:https://www.cnblogs.com/kandid/p/11453572.html

处理样本不平衡的LOSS—Focal Loss

0 前言 Focal Loss是为了处理样本不平衡问题而提出的,经时间验证,在多种任务上,效果还是不错的.在理解Focal Loss前,需要先深刻理一下交叉熵损失,和带权重的交叉熵损失.然后我们从样本权利的角度出发,理解Focal Loss是如何分配样本权重的.Focal是动词Focus的形容词形式,那么它究竟Focus在什么地方呢?详细的代码请看Gitee. 1 交叉熵 1.1 交叉熵损失(Cross Entropy Loss) 有\(N\)个样本,输入一个\(C\)分类器,得到的输出为\(X

Focal Loss2

Introduction 此篇论文获得了ICCV最佳学生论文奖,指导人是FAIR的He Kaiming大神: 众所周知,detector主要分为以下两大门派: - one stage系 two stage系 代表性算法 YOLOv1.SSD.YOLOv2.YOLOv3 R-CNN.SPPNet.Fast R-CNN.Faster R-CNN 检测精度 低 高 检测速度 快 慢 这种鱼(speed)与熊掌(accuracy)不可兼得的局面一直成为Detection的瓶颈. 究其原因,就是因为one

图像分割loss集合

我们只是大佬的搬运工 1.log loss 2.WBE loss 带权重的交叉熵 3.Focal loss 容易过拟合?不知why 4.DIce loss 对于肿块太小的梯度容易变化剧烈 5.IOU loss 6.Tversky loss 7.敏感性-特异性损失 8.Generalized Dice loss 9.BCE + Dice loss 10.Dice + Focal loss 11.Exponential Logarithmic loss 原文地址:https://www.cnblog