论文阅读——Loss odyssey in medical image segmentation

news2025/1/19 3:13:53

Loss odyssey in medical image segmentation

github:https://github.com/JunMa11/SegLossOdyssey

这篇文章回顾了医学图像分割中的20种不同的损失函数,旨在回答:对于医学图像分割任务,我们应该选择哪种损失函数?

首先是一张各类分割函数的图谱:

介绍函数之前先定义字母符号的含义:

分别代表分割结果和GT,代表里面的每个体素,N是一张图片体素数量,C是类别

损失函数分为四类:即分布不匹配,区域、边界或它们的某种组合。

1. Distribution-based Loss 

基于分布的损失函数旨在最小化两个分布之间的不相似性。以交叉熵cross entropy为代表。

1.1. Cross entropy

对于CNN模型,可以写为:

加权版——Weighted cross entropy (WCE)(2015):

,一般和类别占得比例成反比,本文实验中使用类别比例的倒数。另一种使用加权交叉熵的方式是根据GT对每个像素加权。

1.2. TopK loss(2016)

t∈ (0, 1]是个阈值,也就是说,容易分类的像素点(概率>t)被忽略了,另一个实现版本:

本文实验中k=10%

1.3. Focal loss(2018)

通过减少已经分好类的样本的损失来关注困难样本,可以处理前景背景类别不平衡的情况。原始论文中给出γ=2表现最好。

1.4. Distance map penalized cross entropy loss (DPCE)

具体地,通过取GT的距离变换的逆来生成Dc。通过这种方式,可以为边界上的像素分配更大的权重。

DPCE损失通过从GT掩码导出的距离图来加权交叉熵。它旨在引导网络将重点放在难以分割的边界区域。

2. Region-based Loss

基于区域的损失函数旨在最小化GT和预测S之间的不匹配或最大化两者的重叠区域。最有代表性的是Dice loss。

2.1. Sensitivity-specificity loss(2015)

将特异性加权得更高来解决类别失衡问题。w控制敏感性和特异性的平衡。

2.2. Dice loss(2016)

有两个变体:

直接优化Dice Similarity Coefficient (DSC)。与加权交叉熵不同,Dice损失不需要对不平衡分割任务进行类重新加权。

2.3. IoU (Jaccard) loss(2016)

和Dice loss很相似,也是直接优化目标类别的分割指标。

2.4. Lovász loss

定义类c ∈ C的像素误差:

与IoU损失类似,Lovasz损失也是直接优化Jaccard指数,但它使用了不同的替代策略。特别地,IoU损失(也称为软Jaccard)简单地用softmax概率代替Jaccard索引中的分割,while Lovász loss  uses a piecewise linear convex surrogate to the IoU loss based on the Lovász extension of submodular set functions。

2.5. Tversky loss

这个是改进的Dice loss,旨在得到更好的P、R的平衡,强调错误的负类样本。α,β是超参数,控制false negatives and false positives的平衡。

2.6. Generalized Dice loss

,is used to provide invariance to different label set properties.用于为不同的标签集属性提供不变性。

这个损失函数是多类别Dice loss的扩展,每个类别的权重与标签频率成反比。

2.7. Focal Tversky loss

γ∈[1, 3]。把focal loss用在Tversky loss上,使得困难样本概率低。

2.8. Asymmetric similarity loss

原始论文中β=1.5。当α+β=1时变为Tversky loss的一个特例。

Dice loss可以被视为准确度和召回率的调和平均值,它对假阳性(FP)和假阴性(FN)的权重相等。Asymmetric similarity loss的动机是通过引入加权参数β来更好地调整FPs和FNs的权重(并在精度和召回率之间实现更好的平衡)。

2.9. Penalty loss

,k is a non-negative penalty coefficient. When k = 0, pGD is equivalent to generalized Dice. When k > 0, pGD gives additional weights to false positives and false negatives. In the original paper (Su et al., 2019), k = 2.5 corresponds the best performance.

3. Boundary-based Loss

基于边界的损失函数,相对比较新,旨在最小化预测S和GT之间的距离。

3.1. Boundary (BD) loss(2019,2021)

有两种不同的框架来计算两个边界之间的距离。一种是微分框架,它将边界曲线上每个点的运动计算为沿曲线法线的速度。另一种是积分框架,通过计算两个边界的失配区域之间的界面上的积分来近似距离。微分框架不能直接用作网络softmax输出的损失,因为它是不可微分的。为了以微分的方式计算两个边界之间的距离,Boundary (BD) loss 使用积分框架来公式化边界失,这可以避免涉及边界曲线点的局部微分计算。

3.2. Hausdorff Distance (HD) loss

Hausdorff Distance (HD)距离是一种基于边界的度量,广泛用于评估分割方法。然而,在训练过程中直接最小化HD是难以解决的,并可能导致训练不稳定。为了解决这个问题,HD可以通过GT距离变换来近似。网络可以通过以下HD损失功能进行训练,以减少HD:

dG and dS分别是GT和预测分割的距离变换地图。距离变换计算了每个像素与对象边界之间的最短距离。

上面这两种边界损失用于训练神经网络时,应与基于区域的损失(例如Dice loss)相结合,以减少训练的不稳定性。

4. Compound Loss

混合损失是上面这些损失函数的加权。

4.1. Combo loss

4.2. Exponential Logarithmic loss (ELL)

对Dice损失和交叉熵损失进行指数和对数变换。通过这种方式,可以迫使网络在本质上更多地关注不太准确预测的结构。

4.3. Dice loss with focal loss

4.4. Dice loss with TopK loss

此外,文章还提到了有其他方法,一笔带过,未列出公式。

实验

3D U-Net+数据增强+Adam

三种损失函数在训练过程中需要额外的调度策略:Lova´sz loss, boundaries loss, and Hausdorff distance loss。对于 Lova´sz loss, 原论文作者建议先用交叉熵优化,然后用Lova´sz loss微调;对于 boundary loss 和 Hausdorff distance loss 应该和 Dice loss 结合使用:

α, β > 0。对于边界损失,(Kervadec et al.,2019)建议使用Dice损失来主导初始训练,从而稳定训练过程,快速获得合理的初始分割。具体来说,他们最初设置权重β=1−α和α=1,并在每个epoch后将α减少0.01,直到达到0.01的值。对于Hausdorff距离损失,(Karimi和Salcudean,2020)将α设置为基于HD的损失项的平均值与DSC损失项的均值之比,并且β=1。最近的一项实证研究(Ma et al.,2020)表明,实施细节会对绩效产生显著影响。在我们的实验中,我们首先用Dice损失对网络进行训练,然后用建议的调度策略对BD损失和HD损失进行微调,因为我们发现这种训练技巧可以获得稳健的训练过程,并给出最佳性能。所有其他17个损失函数都可以在训练期间以即插即用的方式使用,而无需任何特定的调度技巧。

在四个分割数据集评估,包括balanced and imbalanced foreground-background, binary and multi-class segmentation. 类别平衡的、不平衡的、二分类的多分类的都包括了。

数据集情况:

评估指标:Dice similarity coefficient 和 Normalized Surface Distance (NSD)

实验结果

1. Single segmentation task

1.1. Mildly imbalanced segmentation

Mildly imbalanced segmentation结果只看liver数据集上的结果。

大多数损失函数(17/20)在DSC高于0.90的情况下获得高度准确的结果。

DiceTopK损失获得最佳DSC和NSD,而pGDice损失获得最低DSC,TopK损耗在DSC和NSD中都获得最低的性能。

图2显示TopK loss 和 pGDice loss方差比较大。图3是失败示例,显示TopK loss 和 pGDice loss倾向于过度分割。

1.2. Highly imbalanced tumor segmentation

看liver tumor数据集上的结果。DiceHD,DiceBD表现比较好。加权交叉熵表现不好。

1.3. Highly imbalanced organ segmentation

DiceFocal loss表现最好,交叉熵不好。

1.4. Multi-class segmentation with both mildly and highly imbalanced labels

研究包含轻度和高度不平衡标签的多类分割任务

DiceFocal loss, DiceHD loss, and DiceTopK loss表现好

2. Different variants of TopK loss

除了liver数据集,其他的k=10%效果比较好,但是liver数据集需要90%,作者分析的原因是liver数据集在训练期间仅使用10%的像素对于肝脏是不够的,因为肝脏非常大(最大的腹部器官)。然而,在这项工作中,我们主要关注标签不平衡的任务。因此,我们选择TopK-10%的损失作为默认的TopK损失,因为它在具有挑战性的分割任务中获得了更好的性能。

所以应该就是说,标签不平衡的比较严重的话,k小一些,否则就大一些。

3. Different variants of Dice loss

4. Rank Results

作者自己设计了一套排序规则(具体看原文吧),然后给这些指标排序:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【多线程】-- 10线程同步synchronized方法/块

多线程 6 线程同步 同步方法 由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括以下两种用法: ​ synchronized方法和synchronized块 …

C语言--求一个十进制整数中1的个数

一.题目描述⭐ 求一个十进制整数中1的个数 比如: 输入:10201 输出:2 (这个数字中1的个数是2) 二.思路分析⭐ 数字类的问题我们可以用取模,或者取余运算。 首先定义一个计数器,用来统计1的个数。 输入数字…

Kubernetes实战(六)-多系统架构容器镜像构建实战

1 背景 最近在一个国产化项目中遇到了这样一个场景,在同一个 Kubernetes 集群中的节点是混合架构的,即其中某些节点的 CPU 架构是 x86 的,而另一些节点是 ARM 的。为了让镜像在这样的环境下运行,一种最简单的做法是根据节点类型为…

Python面向对象④:继承【侯小啾python领航班系列(二十二)】

Python面向对象④:继承【侯小啾python领航班系列(二十二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

随心玩玩(十)git

写在前面:研究生一年多了,一直浑浑噩噩的,在深度学习的泥潭挣扎了好久,终于走出了精神内耗的泥潭…好久没有写博客了,决定重新捡起来…记录一下学习吧~ 之前写了一篇git的博客,【github 从0开始的基本操作…

<蓝桥杯软件赛>零基础备赛20周--第8周第2讲--排序的应用

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周(读者可以按…

WakaTime一个用于跟踪和分析编程时间的工具

WakaTime是一个用于跟踪和分析编程时间的工具,它可以集成到各种代码编辑器和集成开发环境中,例如Visual Studio Code、Sublime Text、PyCharm等。它可以帮助开发人员了解他们花费在不同项目和编程语言上的时间,以及他们的编码习惯和生产力。 …

【Tkinter 入门教程】

【Tkinter 入门教程】 1. Tkinter库的简介:1.1 GUI编程1.2 Tkinter的定位 2. Hello word! 程序起飞2.1 第⼀个程序2.2 字体颜色主题 3. 组件讲解3.1 tkinter 的核⼼组件3.2 组件的使⽤3.3 标签Label3.3.1 标签显示内容3.3.2 多标签的应⽤程序3.3.3 总结 3.4 按钮but…

【动态规划】LeetCode-面试题 17.16. 按摩师

🎈算法那些事专栏说明:这是一个记录刷题日常的专栏,每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目,在这立下Flag🚩 🏠个人主页:Jammingpro 📕专栏链接&…

类和对象——(4)特殊的成员函数

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 一个人不是在逆境中成长,就…

强推六款满分AI写作工具,需要自取

🔗 运行环境:ChatGPT 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…

vite脚手架,手写实现配置动态生成路由

参考文档 vite的glob-import vue路由配置基本都是重复的代码,每次都写一遍挺难受,加个页面就带配置下路由 那就利用 vite 的 文件系统处理啊 先看实现效果 1. 考虑怎么约定路由,即一个文件夹下,又有组件,又有页面&am…

SSM项目实战-登录验证成功并路由到首页面,Vue3+Vite+Axios+Element-Plus技术

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/sysUser.js import request from "../util/request.js";export const login (…

Presto:基于内存的OLAP查询引擎

Presto查询引擎 1、Presto概述1.1、Presto背景1.2、什么是Presto1.3、Presto的特性2、Presto架构2.1、Presto的两类服务器2.2、Presto基本概念2.3、Presto数据模型3、Presto查询过程3.1、Presto执行原理3.2、Presto与Hive3.3、Presto与Impala3.4、PrestoDB与PrestoSQL4、Presto…

主键虽两个字,但含义丰富;创建新表,Access会自动创建主键,但也可以手动设置

主键是一种特殊类型的索引字段,用于唯一标识表中的每个记录或行。每个主键值必须是表中唯一一个此类主键值。创建新表时,Access会自动创建具有字段名ID和自动编号数据类型的主键。 你需要了解的有关主键的一些信息 一个表只能有一个主键。 主键字段中…

【Python】tensorflow学习的个人纪录(3)

sess tf.Session()actor Actor(sess, n_featuresN_S, lrLR_A, action_bound[-A_BOUND, A_BOUND])步进:

1+x网络系统建设与运维(中级)-练习3

一.设备命名 AR1 [Huawei]sysn AR1 [AR1] 同理可得,所有设备的命名如上图所示 二.VLAN LSW1 [LSW1]vlan 10 [LSW1-vlan10]q [LSW1]int g0/0/1 [LSW1-GigabitEthernet0/0/1]port link-type access [LSW1-GigabitEthernet0/0/1]port default vlan 10 [LSW1-GigabitEt…

[ffmpeg] aac 音频编码

aac 介绍 aac 简单说就是音频的一种压缩编码器,相同音质下压缩比 mp3好,目前比较常用。 aac 编码支持的格式 aac 支持的 sample_fmts: 8 aac 支持的 samplerates: 96000 88200 64000 48000 44100 32000 24000 22050 16000 12000 11025 8000 7350 通…

U盘不仅能在电脑上使用,在手机上也可使用,包括安卓和苹果手机,但苹果的较特殊

许多最好的安卓手机都使用USB-C端口在电脑上充电和来回传输文件,但如果你需要给老板发电子邮件的文件放在闪存驱动器或全尺寸SD卡上呢? 幸运的是,使用廉价的适配器电缆,你可以将USB加密狗或读卡器直接连接到手机上。你甚至可以直接使用USB-C闪存驱动器,以实现更轻松的过程…

带头双向循环链表:一种高效的数据结构

💓 博客主页:江池俊的博客⏩ 收录专栏:数据结构探索👉专栏推荐:✅cpolar ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🔥编译环境:Visual Studio 2022🎉欢迎大…