1. Dice loss 是什么?

​ Dice loss是Fausto Milletari等人在V-net中提出的Loss function,其源于Sørensen–Dice coefficient,是Thorvald SørensenLee Raymond Dice于1945年发展出的统计学指标。这种coefficient有很多別名,最响亮的就是F test的F1 score。在了解Dice loss之前我们先谈谈Sørensen–Dice coefficient是什么。

​ 回顾一下比较常听到的F1 score,统计学中有所谓的SensitivitySpecificity,而机器学习(模式识别)则有PrecisionRecall,它们的关系如下:

Truth\Classified Positive Negative
Positive True Positive False Negative
Negative False Positive True Negative

可看到Precision和Recall的主角都是被正确选择的那一群,分別用挑选总数(TP+FP)正确总数(TP+FN)來评估正确的比例。F1 score便是想以相同权重(β=1)的Harmonic mean(调和平均)去整合這两个指标:

现在回到Sørensen–Dice coefficient的常见表现方式:

QSQuotient of Similarity(相似商),就是coefficient的值,只会介于0~1。Image segmentation中,模型分割出的mask就是影像的挑选总数,专家标记的mask就是正确总数。对应到公式便可知挑选总数(TP+FP)正确总数(TP+FN)分別就是XY,交集便是TP,可見Dice coefficient等同F1 score,直观上是计算X与Y的相似性,本质上则同时隐含Precision和Recall两个指标。

​ 谈完了coefficient,Dice loss其实就是它的顛倒。当coefficient越高,代表分割結果与标准答案相似度越高,而模型则是希望用求极小值的思維去训练比较可行,因此常用的Loss function有 "1-coefficient""-coefficient"

2. Dice loss 实现

实现环境:

  • Windows 10
  • Python 3.6.4
    • MXNet 1.0.1

因为是小测试就不用GPU了。公式中的交集在image segmentation中很好实现,因为通常标准答案的mask都是由0和1組成的,所以只要将两张mask作逐点乘积(Hadamard product),也就是对应点相乘起來而不作向量內积,再加总起來就好了。因为False Positive跟Negative的情况就是其中一张mask值是0,所以在后续加总时会被排除。

​ 另一个有趣的点是我在公式中加入了Laplace smoothing,也就是分子分母同時加1,這是启发自一个pytorch的issue comment。据他所說,Laplace smoothing可以减少Overfitting,我想是因為让整个coefficient值变大,让loss变小,就可以更快达到收敛,而避免過多的训练迭代。

from mxnet import nd
smooth = 1.
def dice_loss(y_pred, y_true):product = nd.multiply(y_pred, y_true)intersection = nd.sum(product)coefficient = (2.*intersection +smooth) / (nd.sum(y_pred)+nd.sum(y_true) +smooth)loss = 1. - coefficient# or "-coefficient"return(loss)

接著随机生成两个矩阵测试:

y_pred = nd.random.uniform(0, 1, (3,3))
y_true = nd.random.uniform(0, 2, (3,3)).astype('int8').astype('float32')
dice_loss(y_pred, y_true)
---------------------------------------------------------y_pred = [[0.38574776 0.08795848 0.83927506][0.21592768 0.44453627 0.10463644][0.8793516  0.65118235 0.5184219 ]]<NDArray 3x3 @cpu(0)>y_true = [[1. 0. 0.][0. 0. 0.][1. 1. 1.]]<NDArray 3x3 @cpu(0)>product = [[0.38574776 0.         0.        ][0.         0.         0.        ][0.8793516  0.65118235 0.5184219 ]]<NDArray 3x3 @cpu(0)>intersection = [2.4347036] <NDArray 1 @cpu(0)>coefficient = [0.64307916] <NDArray 1 @cpu(0)>
# no smooth : [0.59916145] <NDArray 1 @cpu(0)>loss = [0.35692084] <NDArray 1 @cpu(0)>
# no smooth : [0.40083855] <NDArray 1 @cpu(0)>

以上结果用计算机敲一敲就可以验证了,可以看到在有smooth的情況下,coefficient增大了而loss减少了,因此可以让神经网络更快收敛。

3. 后记

​ 在2016年V-net开始使用后,Dice loss在2017年得到了一些进化,其中有篇文献实验比较了Dice loss和影像深度学习常用的Cross-entropy的性能,发现Dice loss在image segmentation真的表现比较好。

本文源自:鄭仕群

Dice loss是什么相关推荐

  1. msra数据集_ACL2020 | 香侬科技提出使用Dice Loss缓解数据集数据不平衡问题

    论文标题:Dice Loss for Data-imbalanced NLP Tasks 论文作者:Xiaofei Sun, Xiaoya Li, Yuxian Meng, Junjun Liang, ...

  2. L1/L2/smooth_l1_loss/center_loss+Dice Loss+focal loss+各种IOU loss+kl散度

    一.L1/L2/smooth_l1_loss/center_loss公式与代码 1.公式 L2公式: smooth_L1公式: 2.三种函数numpy代码实现 import numpy as np i ...

  3. Dice Loss,balanced cross entropy,Focal Loss

    Dice Loss Dice系数是一种集合相似度度量函数,取值范围在[0,1]:s=2∣X∩Y∣∣X∣+∣Y∣s=\frac{2|X\cap Y|}{|X|+|Y|}s=∣X∣+∣Y∣2∣X∩Y∣​其 ...

  4. Dice Loss与mIoU

    Dice系数和mIoU是语义分割的评价指标,在这里进行了简单知识介绍. 一.Dice系数 1.1 概念理解 Dice系数源于二分类,本质上是衡量两个样本的重叠部分,是一种集合相似度度量函数,该指标范围 ...

  5. dice系数 交叉熵_ACL2020 | 香侬科技提出用Dice Loss缓解数据集数据不平衡问题

    论文标题: Dice Loss for Data-imbalanced NLP Tasks 论文作者: Xiaofei Sun*, Xiaoya Li*, Yuxian Meng, Junjun Li ...

  6. ACL 2020 | 香侬科技提出用Dice Loss缓解数据集数据不平衡问题

    论文标题: Dice Loss for Data-imbalanced NLP Tasks 论文作者: Xiaofei Sun*, Xiaoya Li*, Yuxian Meng, Junjun Li ...

  7. 图像分割中的Dice Loss

    本文只总结我对Dice Loss的一些理解,如有不同见解欢迎批评指正 1.首先简单介绍一下,这个不多说,详细如知乎所讲. Dice 定义为2倍交集/和, 范围在[0,1]: Dice Loss 取反或 ...

  8. 图像分割之常用损失函数-Dice Loss

    哈喽大家好 ! 我是唐宋宋宋,很荣幸与您相见!! Dice Loss Dice Loss是由Dice系数而得名的,Dice系数是一种用于评估两个样本相似性的度量函数,其值越大意味着这两个样本越相似,D ...

  9. 类别不均衡问题之loss大集合:focal loss, GHM loss, dice loss 等等

    数据类别不均衡问题应该是一个极常见又头疼的的问题了.最近在工作中也是碰到这个问题,花了些时间梳理并实践了类别不均衡问题的解决方式,主要实践了"魔改"loss(focal loss, ...

  10. python中dice常见问题_【Pytorch】 Dice系数与Dice Loss损失函数实现

    由于 Dice系数是图像分割中常用的指标,而在Pytoch中没有官方的实现,下面结合网上的教程进行详细实现. 先来看一个我在网上经常看到的一个版本. def diceCoeff(pred, gt, s ...

最新文章

  1. 从路由原理出发,深入阅读理解react-router 4.0的源码
  2. Quartz定时框架CronTrigger开发使用实例
  3. Socket网络编程--聊天程序(8)
  4. 开放性32位RISC处理器IP核的比较与分析(Z)
  5. S3C2440_MMU
  6. 一张图讲清M0中断请求
  7. 斩断亏损,让利润奔跑
  8. 苍南二职计算机专业分数线,苍南第二职业中专2021年招生录取分数线
  9. Mac版Python3安装/升级
  10. CMSIS-DSP lib 矩阵运算示例和源码
  11. 华为语音解锁设置_华为手机语音唤醒解锁 华为语音助手解锁屏幕
  12. 【树莓派】USB摄像头+python+opencv
  13. 知物由学 | SO加固如何提升Android应用的安全性?
  14. 科研写作之word技巧——首行缩进、图 表 公式 自动编号和引用、子标题细节
  15. java项目-第90期基于ssm的嘟嘟二手书商城系统
  16. 2022版中国科技中介服务产业运行现状分析与发展机遇规划报告
  17. navicat导入excel表中数据出错问题
  18. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计
  19. 游戏约玩app源码开发,重复请求如何处理?
  20. Rabbit的字符串

热门文章

  1. UOS桌面操作系统定制镜像(下)
  2. 「CSS畅想」何以解忧,美食足矣,用技术给好友开发了一个零食盲盒小游戏
  3. 何以解忧,唯有暴富,2019再见
  4. 心理学的166个现象---之五
  5. 计算机用户名更改不了,分享简单几步解决win10电脑用户名改不了的问题
  6. 数钱游戏——聪明的放弃
  7. 本周大新闻|传苹果MR开发样机已送出,比尔盖茨:不太看好Web3和元宇宙
  8. 一次线上紧急事故的处理复盘
  9. 成为游戏开发者的一流技巧
  10. 薛辽中学2021高考成绩查询,运城:薛辽中学被指众多高中生没有学籍