医学图像分割之 Dice Loss

文章目录

  • 医学图像分割之 Dice Loss
    • 1. Dice coefficient 定义
      • 1.1. Dice 系数计算示例
      • 1.2. Dice-coefficient loss function vs cross-entropy
    • 2. Dice 系数的 Pytorch 实现
      • 2.1. Dice 系数
      • 2.2. Dice Loss
      • 2.3. BCELoss2d
    • 3. Dice 系数的 Keras 实现
    • 4. Dice 系数的 TensorFlow 实现
    • 参考资料

医学图像分割之 Dice Loss

在很多关于医学图像分割的竞赛、论文和项目中,发现 Dice 系数(Dice coefficient) 损失函数出现的频率较多,自己也存在关于分割中 Dice Loss 和交叉熵损失函数(cross-entropy loss) 的一些疑问,这里简单整理.

1. Dice coefficient 定义

Dice系数 - 维基百科

Dice系数, 根据 Lee Raymond Dice[1] 命名,是一种集合相似度度量函数,通常用于计算两个样本的相似度(值范围为 [0, 1]):
s = 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ s = \frac{2|X\cap Y|}{|X|+|Y|} s=X+Y2XY
|X⋂Y| - X 和 Y 之间的交集;|X| 和 |Y| 分别表示 X 和 Y 的元素个数. 其中,分子中的系数 2,是因为分母存在重复计算 X 和 Y 之间的共同元素的原因.

语义分割问题而言,X - GT 分割图像, Y - Pred 分割图像.

Dice 系数差异函数(Dice loss):

s = 1 − 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ s =1- \frac{2|X\cap Y|}{|X|+|Y|} s=1X+Y2XY

1.1. Dice 系数计算示例

预测的分割图的 dice 系数计算,首先将 |X⋂Y| 近似为预测图与 GT 分割图之间的点乘,并将点乘的元素结果相加:

[1] - Pred 预测分割图与 GT 分割图的点乘:

在这里插入图片描述

[2] - 逐元素相乘的结果元素的相加和:

在这里插入图片描述

对于二分类问题,GT 分割图是只有 0, 1 两个值的,因此 |X⋂Y| 可以有效的将在 Pred 分割图中未在 GT 分割图中激活的所有像素清零. 对于激活的像素,主要是惩罚低置信度的预测,较高值会得到更好的 Dice 系数.

关于 |X| 和 |Y| 的量化计算,可采用直接简单的元素相加;也有采用取元素平方求和的做法:

在这里插入图片描述

:dice loss 比较适用于样本极度不均的情况,一般的情况下,使用 dice loss 会对反向传播造成不利的影响,容易使训练变得不稳定.

1.2. Dice-coefficient loss function vs cross-entropy

这是在 stackexchange.com 上一个提问:

Dice-coefficient loss function vs cross-entropy

问题:

在训练像素分割的神经网络时,如 FCN,如何选择交叉熵损失函数还是 Dice-coefficient 损失函数?

回答:

采用交叉熵损失函数,而非 dice-coefficient 和类似 IoU 度量的损失函数,一个令人信服的愿意是其梯度形式更优(the gradients are nicer.)

交叉熵损失函数中交叉熵值关于 logits 的梯度计算形式类似于 p−t ,其中,p 是 softmax 输出;t 为 target.

而关于 dice-coefficient 的可微形式,loss 值为
2 p t p 2 + t 2 或 2 p t p + t \frac{2pt}{p^2+t^2}或\frac{2pt}{p+t} p2+t22ptp+t2pt
,其关于 p 的梯度形式是比较复杂的:
2 t 2 ( p + t ) 2 或 2 t ( t 2 − p 2 ) ( p 2 + t 2 ) \frac{2t^2}{(p+t)^2}或\frac{2t(t^2-p^2)}{(p^2+t^2)} (p+t)22t2(p2+t2)2t(t2p2)
. 极端场景下,当 p 和 t 的值都非常小时,计算得到的梯度值可能会非常大. 通常情况下,可能导致训练更加不稳定.

直接采用 dice-coefficient 或者 IoU 作为损失函数的原因,是因为分割的真实目标就是最大化 dice-coefficient 和 IoU 度量. 而交叉熵仅是一种代理形式,利用其在 BP 中易于最大化优化的特点.

另外,Dice-coefficient 对于类别不均衡问题,效果可能更优. 然而,类别不均衡往往可以通过简单的对于每一个类别赋予不同的 loss 因子,以使得网络能够针对性的处理某个类别出现比较频繁的情况. 因此,对于 Dice-coefficient 是否真的适用于类别不均衡场景,还有待探讨.

2. Dice 系数的 Pytorch 实现

2.1. Dice 系数

# https://github.com/pytorch/pytorch/issues/1249
def dice_coeff(pred, target):smooth = 1.num = pred.size(0)m1 = pred.view(num, -1)  # Flattenm2 = target.view(num, -1)  # Flattenintersection = (m1 * m2).sum()return (2. * intersection + smooth) / (m1.sum() + m2.sum() + smooth)

2.2. Dice Loss

import torch.nn as nn
import torch.nn.functional as Fclass SoftDiceLoss(nn.Module):def __init__(self, weight=None, size_average=True):super(SoftDiceLoss, self).__init__()def forward(self, logits, targets):num = targets.size(0)smooth = 1probs = F.sigmoid(logits)m1 = probs.view(num, -1)m2 = targets.view(num, -1)intersection = (m1 * m2)score = 2. * (intersection.sum(1) + smooth) / (m1.sum(1) + m2.sum(1) + smooth)score = 1 - score.sum() / numreturn score

2.3. BCELoss2d

import torch.nn as nn
import torch.nn.functional as Fclass BCELoss2d(nn.Module):def __init__(self, weight=None, size_average=True):super(BCELoss2d, self).__init__()self.bce_loss = nn.BCELoss(weight, size_average)def forward(self, logits, targets):probs = F.sigmoid(logits)  # 二分类问题,sigmoid等价于softmaxprobs_flat = probs.view(-1)targets_flat = targets.view(-1)return self.bce_loss(probs_flat, targets_flat)

3. Dice 系数的 Keras 实现

From:Dice’s coefficient  实现

smooth = 1. # 用于防止分母为0.
def dice_coef(y_true, y_pred):y_true_f = K.flatten(y_true) # 将 y_true 拉伸为一维.y_pred_f = K.flatten(y_pred)intersection = K.sum(y_true_f * y_pred_f)return (2. * intersection + smooth) / (K.sum(y_true_f * y_true_f) + K.sum(y_pred_f * y_pred_f) + smooth)def dice_coef_loss(y_true, y_pred):return 1. - dice_coef(y_true, y_pred)

4. Dice 系数的 TensorFlow 实现

def dice_coe(output, target, loss_type='jaccard', axis=(1, 2, 3), smooth=1e-5):"""Soft dice (Sørensen or Jaccard) coefficient for comparing the similarity of two batch of data, usually be used for binary image segmentationi.e. labels are binary. The coefficient between 0 to 1, 1 means totally match.Parameters-----------output : TensorA distribution with shape: [batch_size, ....], (any dimensions).target : TensorThe target distribution, format the same with `output`.loss_type : str``jaccard`` or ``sorensen``, default is ``jaccard``.axis : tuple of intAll dimensions are reduced, default ``[1,2,3]``.smooth : floatThis small value will be added to the numerator and denominator.- If both output and target are empty, it makes sure dice is 1.- If either output or target are empty (all pixels are background), dice = ```smooth/(small_value + smooth)``, then if smooth is very small, dice close to 0 (even the image values lower than the threshold), so in this case, higher smooth can have a higher dice.Examples--------->>> outputs = tl.act.pixel_wise_softmax(network.outputs)>>> dice_loss = 1 - tl.cost.dice_coe(outputs, y_)References------------ `Wiki-Dice <https://en.wikipedia.org/wiki/Sørensen–Dice_coefficient>`__"""inse = tf.reduce_sum(output * target, axis=axis)if loss_type == 'jaccard':l = tf.reduce_sum(output * output, axis=axis)r = tf.reduce_sum(target * target, axis=axis)elif loss_type == 'sorensen':l = tf.reduce_sum(output, axis=axis)r = tf.reduce_sum(target, axis=axis)else:raise Exception("Unknow loss_type")dice = (2. * inse + smooth) / (l + r + smooth)dice = tf.reduce_mean(dice)return dice

参考资料

医学图像分割常用的损失函数

Dice系数 - 维基百科

图像分割结果的评估—DICE参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医学图像分割常见评价指标(单目标)——包含源码讲解和指标缺陷

单目标分割常见评价指标 1 知道4个常见指标&#xff0c;TP&#xff0c;TN&#xff0c;FP&#xff0c;FN2 评价分割区域准确率2.1 Recall Sensitivity TPR(True Positive Rate)2.2 Specificity (True Negative Rate)2.3 Precision (PPV&#xff0c; 精确率)2.4 Dice Coefficient…

医学图像分割之Attention U-Net

目录 一、背景 二、问题 三、解决问题 四、Attention U-Net网络结构 简单总结Attention U-Net的操作&#xff1a;增强目标区域的特征值&#xff0c;抑制背景区域的目标值。抑制也就是设为了0。 一、背景 为了捕获到足够大的、可接受的范围和语义上下文信息&#xff0c;在标…

常用的医学图像分割评价指标

常用的图像分割评价指标非常多&#xff0c;论文中常用的指标包括像素准确率&#xff0c;交并比&#xff08;IOU&#xff09;,Dice系数&#xff0c;豪斯多夫距离&#xff0c;体积相关误差。 下面提到的所有案例都是二分类&#xff0c;标签中只有0和1 目录 一&#xff1a;像素…

医学图像分割评判标准及程序代码

文章目录 1.图像分割指标2. 两个问题3.IOU和假阳性率4. 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure 参考资源&#xff1a; 1.https://blog.csdn.net/zichen_ziqi/article/details/80408465 2.https://blog.csdn.net/HXG2006/article/details/79649154 …

基于Android studio开发的图灵智能聊天机器人

前言 在人工智能时代&#xff0c;开发一款自己的智能问答机器人&#xff0c;既可以提升自己的编程能力&#xff0c;又可以作为开发项目的实战练习。 百度有小度&#xff0c;小米有小爱&#xff0c;VIVO有小V&#xff0c;总之类似的智能聊天机器人是越来越多了。面对这些智能的机…

短视频矩阵源码开发部署--开原

短视频矩阵源码是一种常见的视频编码标准&#xff0c;它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。在本文中&#xff0c;我们将介绍短视频矩阵的原理和实现&#xff0c;并提供示例代码。 开发链路解析 短视频矩阵系统源码开发链路包括需求分析、技术…

ChatGPT危了!注意力机制的神秘bug曝光!Transformer模型恐大受冲击...

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【Transformer】微信交流群 转载自&#xff1a;新智元 【导读】「注意力公式」存在8年的bug首现&#xff0c;瞬间引爆舆论。爆料者称&#xff0c;基于Transformer架构打造的模…

短视频抖音seo矩阵源码如何搭建开发?

抖音SEO矩阵源码排名逻辑采用一系列算法进行生成&#xff0c;其中包括用户行为、关键词匹配和内容质量等多维度指标的衡量。首先&#xff0c;用户行为是决定视频排名的主要因素&#xff0c;包括点赞数、评论数、观看时长和转发次数等。其次&#xff0c;关键词匹配也是影响排名的…

chatgpt赋能python:使用Python让照片动起来:一种新颖的SEO方法

使用Python让照片动起来&#xff1a;一种新颖的SEO方法 在当今数字时代&#xff0c;社交媒体已经成为营销策略中不可或缺的一部分。人们越来越喜欢以图像的形式来获取信息。然而&#xff0c;在面对大量的图像时&#xff0c;如何让自己的图片和品牌脱颖而出&#xff1f;答案是&…

chatgpt赋能python:PythonWand:用Python实现的ImageMagick工具箱

Python Wand: 用Python实现的ImageMagick工具箱 ImageMagick是一款强大的图像处理工具箱&#xff0c;经常被用于缩放、裁剪和转换图像等任务。Python Wand是对ImageMagick命令行工具的Python封装&#xff0c;使得Python程序员能够使用Python代码来操作图像。 为什么使用Pytho…

短视频如何进行高效制作?元引擎助你一臂之力

在当今社会&#xff0c;视频制作已经成为了一种非常流行和重要的创意方式。越来越多的人开始尝试制作自己的短视频&#xff0c;但是对于很多新手小白来说&#xff0c;短视频制作可能是一项相对困难的任务。但是现在&#xff0c;使用元引擎AI一键生成原创视频系统&#xff0c;可…

Python预测彩票中奖

文章目录[隐藏] python来解答你有生之年可以中双色球 python来解答你有生之年可以中双色球 昨天买了几注双色球开奖了&#xff0c;规划好了中奖后怎么花&#xff0c;紧张又刺激的等待后&#xff0c;狗带…… 到底我们能不能中双色球呢&#xff0c;用Python来验证一下吧&#xf…

基于GPT-4的 IDEA 神仙插件,无需魔法,非常不错!

大家好&#xff0c;我是不才陈某~ 最近发现了一款很厉害的 Intellij IDEA 插件——Bito。 Bito 插件无需魔法&#xff0c;亲测有效&#xff0c;可以基于 GPT-4 来写代码同时还提供了一些有用的功能&#xff0c;如自动补全提交信息、快速查看历史记录等。 没使用魔法的情况下&am…

IDEA懒人必备插件:自动生成单元测试,太爽了!

程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 7 分钟。 来自&#xff1a;blog.csdn.net/sun5769675/article/details/111043213 今天来介绍一款工具Squaretest&#xff0c;它是一款自动生成单元测试的插件&#xff0c;会用到它也是因为最近公司上了代…

Mac Automator 图片自动压缩上传 COS

把个人博客放在了 netilfy 托管&#xff0c;它给了一个优化建议&#xff0c;可以压缩图片节省带宽。但是每次截图后都要再压缩下图片有点麻烦&#xff0c;于是想着应该可以偷偷懒。目标很明确&#xff0c;截图后图片传到我的 git 仓库 images 目录后&#xff0c;能给我自动压缩…

IDEA 28 个天花板技巧,YYDS!

因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号&#xff0c;领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇&#xff1a;ChatGPT研究框架&#xff08;80页PPT&#xff0c;附下载&#xff09;…

CSDN 去除图片水印

想要保存 CSDN 博客中的一张图片时&#xff0c;发现图片上有水印&#xff0c;想要删除&#xff0c;怎么办呢&#xff1f; 如下图 右击图片 --> [在新标签中打开图片] 把问号以及问号后面的内容全部删掉&#xff0c;再访问 呐&#xff0c;水印不见了。 PS&#xff1a;写博…

免费的图片去水印消除水印清除水印去水印方法去水印软件免费下载

是一款免费的图片去水印工具。适用于微博下载的&#xff08;偷的&#xff09;图&#xff0c;从别的地方下载的&#xff08;偷的&#xff09;图等。 ** 直接说下载链接&#xff1a;请点击链接里的普通下载&#xff0c;&#xff08;其他是别的下载器&#xff09; 当然&#xff…

批量图片去水印,操作简单,赶紧收藏!

图片怎么去水印?在平时的日常生活中&#xff0c;我们有时候需要用到一些图片或者视频&#xff0c;但是这些视频或者图片往往会有烦人的水印&#xff0c;我们需要去除水印后才能更好来使用~那么你都是怎么去除水印的呢?有什么比较简单轻松的批量图片去水印方法吗?小编这里有一…

2023新版 多功能去水印工具微信小程序源码_带流量主功能(已更新)

简介&#xff1a; 2023新版 多功能去水印工具微信小程序源码_带流量主功能 自带去水印接口的多功能小程序 支持各大平台短视频去水印 支持保存封面,图集,标题等等 支持本地图片去水印 支持图片拼接 支持九宫格切图 支持修改视频的MD5等等 另外当然也有流量主功能的 链…