行业报告 AI展会 数据标注 标注供求
数据标注数据集
主页 > 机器学习 > 正文

超详细的语义分割中Loss盘点

前言
前两天介绍了一下Contrastive Loss,Triplet Loss以及Center Loss。今天正好是周六,时间充分一点我就来大概盘点一下语义分割的常见Loss,希望能为大家训练语义分割网络的时候提供一些关于Loss方面的知识。此文只为抛转引玉,一些Loss笔者暂时也没有进行试验,之后做了实验有了实验结果会继续更新。

 

带权交叉熵 Loss

 

Focal Loss
何凯明团队在RetinaNet论文中引入了Focal Loss来解决难易样本数量不平衡,我们来回顾一下。 我们知道,One-Stage的目标检测器通常会产生10k数量级的框,但只有极少数是正样本,正负样本数量非常不平衡。我们在计算分类的时候常用的损失——交叉熵的公式如下:
 
 

 

 

Focal Loss的Pytorch代码实现如下:

 

Dice Loss

 

另外一种解决类别不平衡的方法是简单的对每一个类别根据赋予不同的权重因子(如对数量少的类别赋予较大的权重因子),使得样本数量不均衡问题得到缓解(上面已经介绍过了,就是带权重的交叉熵Loss)。
这两种处理方式,哪种更好,还是建议自己针对自己的数据做一个实验。
 
代码实现:

 

IOU Loss
IOU Loss和Dice Loss一样属于metric learning的衡量方式,公式定义如下:
 
Tversky Loss

 

在极小的病灶下的分割效果图如下:

 

而在较大的病灶下的分割效果图如下:

 

在这里插入图片描述
 
Keras代码实现如下:
def tversky(y_true, y_pred):
    y_true_pos = K.flatten(y_true)
    y_pred_pos = K.flatten(y_pred)
    true_pos = K.sum(y_true_pos * y_pred_pos)
    false_neg = K.sum(y_true_pos * (1-y_pred_pos))
    false_pos = K.sum((1-y_true_pos)*y_pred_pos)
    alpha = 0.7
    return (true_pos + smooth)/(true_pos + alpha*false_neg + (1-alpha)*false_pos + smooth)
 
def tversky_loss(y_true, y_pred):
    return 1 - tversky(y_true,y_pred)
 
Generalized Dice loss

 

BCE + Dice Loss
即将BCE Loss和Dice Loss进行组合,在数据较为均衡的情况下有所改善,但是在数据极度不均衡的情况下交叉熵Loss会在迭代几个Epoch之后远远小于Dice Loss,这个组合Loss会退化为Dice Loss。
 
Focal Loss + Dice Loss
这个Loss的组合应该最早见于腾讯医疗AI实验室2018年在《Medical Physics》上发表的这篇论文:https://arxiv.org/pdf/1808.05238.pdf。论文提出了使用Focal Loss和Dice Loss来处理小器官的分割问题。公式如下:

 

 

Exponential Logarithmic loss

 

 
在这里插入图片描述
 
Lovasz-Softmax Loss
这是今天要介绍的最后一个Loss,Kaggle神器。这篇论文是CVPR 2018的,原地址为:https://arxiv.org/pdf/1705.08790.pdf。对原理感兴趣可以去看一下论文,这个损失是对Jaccard(IOU) Loss进行Lovaze扩展,表现更好。因为这篇文章的目的只是简单盘点一下,就不再仔细介绍这个Loss了。之后可能会单独介绍一下这个Loss,论文的官方源码见附录,使用其实不是太难。
 
补充(Softmax梯度计算)
在介绍Dice Loss的时候留了一个问题,交叉熵的梯度形式推导,这里给一下推导。

 

这篇文章介绍了近些年来算是非常常用的一些语义分割方面的损失函数,希望可以起到一个抛砖引玉的作用,引发大家对分割中的损失函数进一步思考。当然对于工程派和比赛派来讲,掌握一种新Loss并且应用于自己的项目或者比赛也是不错的。
 
附录
参考资料1:https://www.aiuai.cn/aifarm1159.html
参考资料2:https://blog.csdn.net/m0_37477175/article/details/83004746
参考资料3:https://blog.csdn.net/m0_37477175/article/details/85335415
Generalized Dice loss代码实现:https://github.com/keras-team/keras/issues/9395
参考资料4:https://blog.csdn.net/CaiDaoqing/article/details/90457197
Lovasz-Softmax Loss代码:https://github.com/bermanmaxim/LovaszSoftmax
 
声明:文章收集于网络,版权归原作者所有,为传播信息而发,如有侵权,请联系小编删除,谢谢!
 
 

微信公众号

声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
SEM推广服务

Copyright©2005-2026 Sykv.com 可思数据 版权所有    京ICP备14056871号

关于我们   免责声明   广告合作   版权声明   联系我们   原创投稿   网站地图  

可思数据 数据标注行业联盟

扫码入群
扫码关注

微信公众号

返回顶部