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

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

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

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

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

案例4:脑部MRI图像分割

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

1 任务简介

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

第一行: 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实验结果

首先运行原始代码,得到结果如下
【深度学习】: 脑部MRI图像分割_第1张图片
【深度学习】: 脑部MRI图像分割_第2张图片
在这里我选择训练 20 个周期, dsc 结果基本在周期内都能趋于最优
训练很多次 DSC 基本都在 90%

网络结构改进

这里主要的改进是在原始代码的基础上添加了 注意力机制 ,注意力机制可以帮助
模型更关注重要的信息,减少对无关信息的干扰,从而提高模型的性能和准确性。
模型能够更有针对性地捕捉数据中的关键特征,做出更准确的预测。
【深度学习】: 脑部MRI图像分割_第3张图片
从图中看出在训练到第 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.

你可能感兴趣的:(深度学习,深度学习,人工智能)