炼数成金 门户 商业智能 深度学习 查看内容

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

2020-2-1 10:52| 发布者: 炼数成金_小数| 查看: 46331| 评论: 0|原作者: BBuf|来自: GiantPandaCV

摘要: 何凯明团队在RetinaNet论文中引入了Focal Loss来解决难易样本数量不平衡,我们来回顾一下。 我们知道,One-Stage的目标检测器通常会产生10k数量级的框,但只有极少数是正样本,正负样本数量非常不平衡。
前言
前两天介绍了一下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

声明:文章收集于网络,版权归原作者所有,为传播信息而发,如有侵权,请联系小编删除,谢谢!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

 

GMT+8, 2020-11-29 18:16 , Processed in 0.153141 second(s), 23 queries .