案例4:脑部MRI图像分割
相关知识点:语义分割、医学图像处理(skimage, medpy)、可视化(matplotlib)
1 任务简介
本次案例将使用深度学习技术来完成脑部MRI(磁共振)图像分割任务,即对于处理好的一张MRI图像,通过神经网络分割出其中病变的区域。本次案例使用的数据集来自Kaggle[1],共包含110位病人的MRI数据,每位病人对应多张通道数为3的.tif格式图像,其对应的分割结果为单通道黑白图像(白色为病变区域),示例如下。
第一行: MRI图像;第二行: 对应的分割标签
更详细的背景介绍请参考文献[2].
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]。
3 要求和建议
在参考程序的基础上,使用深度学习技术,尝试提升该模型在脑部MRI图像上的分割效果,以程序最终输出的validation mean DSC值作为评价标准(参考程序约为90%)。可从网络结构(替换U-Net)、损失函数(替换Dice Loss)、训练过程(如优化器)等角度尝试改进,还可参考通用图像分割的一些技巧[8]。
4 注意事项
l提交所有代码和一份案例报告;
l案例报告应详细介绍所有改进尝试及对应的结果(包括DSC值和若干分割结果示例),无论是否成功提升模型效果,并对结果作出分析;
l禁止任何形式的抄袭,借鉴开源程序务必加以说明。
5 参考资料
[1] Brain MRI数据集: https://www.kaggle.com/mateuszbuda/lgg-mri-segmentation
[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] 示例程序: https://www.kaggle.com/mateuszbuda/brain-segmentation-pytorch
[5] Ronneberger et al. U-Net: Convolutional Networks for Biomedical Image Segmentation. MICCAI 2015.
[6] Dice Loss: https://zhuanlan.zhihu.com/p/86704421
[7] TensorBoard参考资料:https://www.tensorflow.org/tensorboard
[8] Minaee et al. Image Segmentation Using Deep Learning: A Survey. arXiv 2020.
完整代码私信