【深度学习】: 脑部MRI图像分割

news2025/1/13 17:13:04

 清华大学驭风计划课程链接 

学堂在线 - 精品在线课程学习平台 (xuetangx.com)

代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主,接实验技术指导1对1

有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~

案例4:脑部MRI图像分割

相关知识点:语义分割、医学图像处理(skimage, medpy)、可视化(matplotlib)

1 任务简介

      本次案例将使用深度学习技术来完成脑部MRI(磁共振)图像分割任务,即对于处理好的一张MRI图像,通过神经网络分割出其中病变的区域。本次案例使用的数据集来自Kaggle[1],共包含110位病人的MRI数据,每位病人对应多张通道数为3的.tif格式图像,其对应的分割结果为单通道黑白图像(白色为病变区域),示例如下。

image.png

第一行: MRI图像;第二行: 对应的分割标签

      更详细的背景介绍请参考文献[2].

参考程序

      本次案例提供了完整、可供运行的参考程序,来源于Kaggle[3]和GitHub[4],建议在参考程序的基础上进行修改来完成本案例。各个程序简介如下:

ltrain.ipynb用来完成模型训练

linference.ipynb用来对训练后的模型进行推理

lunet.py定义了U-Net网络结构,参考资料[5]

lloss.py定义了损失函数(Dice Loss),参考资料[6]

ldataset.py用来定义和读取数据集

ltransform.py用来预处理数据

lutils.py定义了若干辅助函数

llogger.py用来记录训练过程(使用TensorBoard[7]功能),包括损失函数曲线等

参考程序对运行环境的要求如下,请自行调整环境至适配,否则可能无法运行:

ltorch==2.0.*

ltorchvision==0.15.*

lipykernel==6.26.*

lmatplotlib==3.8.*

lmedpy==0.4.*

lscipy==1.11.*

lnumpy==1.23.* (1.24+版本无法运行,需要先降级)

lscikit-image==0.22.*

limageio==2.31.*

ltensorboard==2.15.*

ltqdm==4.*其它细节以及示例运行结果可直接参考Kaggle[3]和GitHub[4]。

要求和建议

      在参考程序的基础上,使用深度学习技术,尝试提升该模型在脑部MRI图像上的分割效果,以程序最终输出的validation mean DSC值作为评价标准(参考程序约为90%)。可从网络结构(替换U-Net)、损失函数(替换Dice Loss)、训练过程(如优化器)等角度尝试改进,还可参考通用图像分割的一些技巧[8]。

注意事项

l提交所有代码和一份案例报告;

l案例报告应详细介绍所有改进尝试及对应的结果(包括DSC值和若干分割结果示例),无论是否成功提升模型效果,并对结果作出分析;

5实验结果

首先运行原始代码,得到结果如下
在这里我选择训练 20 个周期, dsc 结果基本在周期内都能趋于最优
训练很多次 DSC 基本都在 90%

网络结构改进

这里主要的改进是在原始代码的基础上添加了 注意力机制 ,注意力机制可以帮助
模型更关注重要的信息,减少对无关信息的干扰,从而提高模型的性能和准确性。
模型能够更有针对性地捕捉数据中的关键特征,做出更准确的预测。
从图中看出在训练到第 14 周期时 dsc 值就达到 91% ,并且在分割结果来看明显
比原始结果更好,最差的 HT-7617 也达到 80% 以上,除了 cs_4944 HT_7617
其他 8 Dice Coefficient 均达到了 90%以上 (这也是此次实训中我调的最好的
结果,其他改进均不如此)

改进损失函数和替换损失函数

在网上查资料时候发现一种 LogCoshDiceLoss 函数是根据 Dice Loss Log-Cosh Loss 特点改

进而来,Dice Loss 是一种广泛用于图像分割任务的损失函数,衡量模型预测结果与真实标签之间的 相似性。而 Log-Cosh Loss 是一种光滑的损失函数,对异常值具有更好的鲁棒性,避免了异
常值对训练造成较大的影响。 Log-Cosh Loss 可以在训练过程中减少异常值的影响,使得模
型更加稳定。
Log-Cosh Dice Loss 将这两种损失函数结合在一起,通过计算 Dice Coefficient (用于衡量预测
与真实标签的相似性)和应用 Log-Cosh 函数(用于光滑损失),得到最终的损失值。
从结果看出效果并不是有明显提升,虽然 dsc 值接近 91% ,因为我用原始代码最高得出的结
果为 0.9098 差不多,所以这里我认为并没有提升实际效果

使用 FocalTverskyLoss 替换掉 Dice loss

Focal Loss Focal Loss 是一种用于处理类别不平衡问题的损失函数,旨在提高模型对难分
类样本的敏感性。它通过对易分类样本的损失进行缩小,从而使模型更集中地关注难分类的
样本。
Tversky Loss Tversky Loss 是一种基于集合相似性度量的损失函数,广泛用于图像分割任务
中,特别是在类别不平衡严重的情况下。它允许你在损失函数中调整模型对于错误预测的惩
罚程度,而更好地适应不平衡情况。
FocalTverskyLoss Focal Loss Tversky Loss 结合在一起,能实现更好的类别不平衡处理
和分割性能
从结果看出还没有原始代码 dsc 值高,并且初始 loss 比较大,在这个实训中运行效果并不好

优化器

这一部分我使用了 Adam 的一个变体, AMSGrad Adaptive Moment Estimation for
Stochastic Gradient Descent )是优化算法 Adam 的一个变体,旨在改善其在一些情况下
的性能问题。 Adam 作为一种自适应学习率的优化算法,结合了动量和 RMSProp 的思想
从结果来看也并没有明显提升,仍然在 0.90 左右

参考资料

[1] Brain MRI数据集: Brain MRI segmentation | Kaggle

[2] Buda et al. Association of genomic subtypes of lower-grade gliomas with shape features automatically extracted by a deep learning algorithm. Computers in Biology and Medicine 2019.

[3] 示例程序: brain-segmentation-pytorch | Kaggle

[4] 示例程序: GitHub - mateuszbuda/brain-segmentation-pytorch: U-Net implementation in PyTorch for FLAIR abnormality segmentation in brain MRI

[5] Ronneberger et al. U-Net: Convolutional Networks for Biomedical Image Segmentation. MICCAI 2015.

[6] Dice Loss: 医学影像分割---Dice Loss - 知乎

[7] TensorBoard参考资料:https://www.tensorflow.org/tensorboard 

[8] Minaee et al. Image Segmentation Using Deep Learning: A Survey. arXiv 2020.

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

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

相关文章

不可错过!10款超赞实用插件框架

Cocos 游戏开发十八般武器,尽在 Cocos Store 今天给大家分享10款实用插件与框架! 1. 快闪-Tab标签王(prefab标签栏) 作者:嘉年华(gameWs) 《快闪-标签王》插件,解决了日常开发过程中,经常需要通…

一起玩儿Proteus仿真(C51)——05. 红绿灯仿真(一)

摘要:本文介绍如何仿真红绿灯 今天来做一个红绿灯仿真的程序,这个程序主要包括一下这些功能: 模拟的路口为十字交叉路口,假设东西和南北方向都是双向行驶,因此需要设置4组红绿灯和4个倒计时显示屏。倒计时时间最长为9…

.NET高级面试指南专题七【SocketWebSocket】

Socket(套接字)是一种在计算机网络中实现通信的一种机制,它提供了一种标准的接口,使不同计算机上的程序能够通过网络进行数据交换。Socket允许在网络中的不同设备之间建立连接,进行双向的数据传输。 Socket通常用于实现…

C语言学习day13:for循环练习(生成随机数)

题目: 通过程序随机一个1-100的数,用户通过键盘输入数字 看是否匹配,匹配成功则跳出循环,失败则继续循环。 思路: 然后生成一个随机数需要写成死循环,同时需要有其他的出口可以写一个提示,比…

猫头虎分享已解决Bug || 任务调度失败(Cron Job Failure):CronJobError, ScheduledTaskFailure

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

炫酷3D按钮

一.预览 该样式有一种3D变换的高级感&#xff0c;大家可以合理利用这些样式到自己的按钮上 二.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

URL编码算法:解决特殊字符在URL中的烦恼

引言&#xff1a; URL编码算法是一种将URL中的特殊字符转换为特定格式的编码方式。它在网络传输中起到了保护数据安全与完整性的重要作用。本文将深入探讨URL编码算法的优点与缺点&#xff0c;并介绍它在Web开发、网络安全等方面的应用。 URL编码解码 | 一个覆盖广泛主题工具…

Decian 12.x基于LNMP安装phpIPAM(IP管理系统)

phpipam是一个开源Web IP地址管理应用程序&#xff08;IPAM&#xff09;。其目标是提供轻便&#xff0c;且有用的IP地址管理系统。它是基于PHP的应用程序&#xff0c;具有MySQL数据库后端&#xff0c;使用jQuery库&#xff0c;ajax和HTML5 / CSS3功能。 在Debian 12中&…

20240212请问如何将B站下载的软字幕转换成为SRT格式?

20240212请问如何将B站下载的软字幕转换成为SRT格式&#xff1f; 2024/2/12 12:47 百度搜索&#xff1a;字幕 json 转 srt json srt https://blog.csdn.net/a_wh_white/article/details/120687363?share_token2640663e-f468-4737-9b55-73c808f5dcf0 https://blog.csdn.net/a_w…

PHP开发日志 ━━ 深入理解三元操作与一般条件语句的不同

概况 三元运算符的功能与“if…else”流程语句一致。 在一般情况下&#xff0c;三元操作替换if条件语句可以精简代码&#xff0c;并且更为直观&#xff0c;但是在下面的情况中使用三元操作将会返回警告。 借图&#xff1a; 案例 比如原代码&#xff1a; class classA{publ…

Vue3.0(六):VueX 4.x详解

Vuex4状态管理 什么是状态管理 在开发中&#xff0c;我们的应用程序需要处理各种各样的数据&#xff0c;这些数据需要保存在应用程序的某一个位置&#xff0c;对于这些数据的管理&#xff0c;就是 状态管理目前前端项目越来越复杂&#xff0c;多组件共享同一数据的状态很常见…

高校危化试剂管理:Java与SpringBoot的革新

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

机器学习2---逻辑回归(基础准备)

逻辑回归是基于线性回归是直线分的也可以做多分类 ## 数学基础 import numpy as np np.pi # 三角函数 np.sin() np.cos() np.tan() # 指数 y3**x # 对数 np.log10(10) np.log2(2) np.e np.log(np.e) #ln(e)# 对数运算 # log(AB) log(A) logB np.log(3*4)np.log(3)np.log(4) #…

HTML5+CSS3+移动web——HTML 基础

目录 一、标签语法 HTML的基本框架 1. 标题标签 2. 段落标签 3. 换行和水平线 4. 文本格式化标签 5. 图像标签 6. 路径 相对路径 绝对路径 7. 超链接标签 8. 音频 9. 视频 10. 注释 二、标签结构 一、标签语法 HTML 超文本标记语言——HyperText Markup Langua…

【大数据Hive】hive 表设计常用优化策略

目录 一、前言 二、hive 普通表查询原理 2.1 操作演示说明 2.1.1 创建一张表&#xff0c;并加载数据 2.1.2 统计3月24号的登录人数 2.1.3 查询原理过程总结 2.2 普通表结构带来的问题 三、hive分区表设计 3.1 区表结构 - 分区设计思想 3.2 操作演示 3.2.1 创建分区表…

如何使用六图一表七种武器

六图一表七种武器用于质量管理&#xff1a; 描述当遇到问题时应该用那张图来解决&#xff1a; 一、如果题目说出了质量问题需要找原因&#xff1f; 解&#xff1a;用因果图&#xff0c;因果图也称石川图或鱼骨图 二、如果要判断过程是否稳定受控&#xff1f; 解&#xff1a…

谷歌浏览器,如何将常用打开的网站创建快捷方式到电脑桌面?

打开谷歌浏览器&#xff0c;打开想要创建的快捷方式的网页 点击浏览器右上角的三个点&#xff1a; 点击选择【更多工具】 选择【创建快捷方式】 然后&#xff0c;在浏览器上方会弹出一个框&#xff0c;让命名此创建的快捷方式的名称 命名好之后&#xff0c;再点击【创…

Python-web自动化-Playwright的学习

Python-web自动化-Playwright的学习 1. 安装playwright2. 界面等待3. 自动化代码助手4. 定位元素1. css selector定位2. xpath定位3. get_by_XXX定位 5. 操作元素1. 单选框、复选框2. select下拉框3. 网页操作4. 框架页 frame5. 窗口切换6. 截屏 1. 安装playwright pip命令 pi…

【Windows】常用快捷键

文章目录 文本编辑相关快捷键窗口管理和操作系统快捷键浏览器快捷键其他常用快捷键系统无响应快捷键 快捷键&#xff1a;shortcut key、keyboard shortcuts。 文本编辑相关快捷键 这部分是非常常用的内容&#xff0c;在很多编辑器中都适用的&#xff0c;比如csdn的markdown和t…

Python 数据分析库之polars使用详解

概要 数据分析是现代应用程序和业务决策的关键组成部分。Python 作为一门强大的编程语言,拥有丰富的数据处理库和工具,其中之一就是 Polars。Polars 是一个现代化的数据操作和分析库,它提供了高性能的数据操作功能,支持链式方法调用,并且兼容 Pandas 和 Arrow 格式。本文…