本文主要是介绍医学影像处理--Unet在Multimodal Brain Tumor Segmentation Challenge 2019上的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景
Multimodal Brain Tumor Segmentation Challenge 2019 http://braintumorsegmentation.org/ 是一个脑部肿瘤分割的比赛,主要是利用病人的核磁共振的图像,预测病人脑部胶质瘤的位置,预测病人的生存期,这两部分会有一个排名,这是属于图像的语义分割的问题。
数据分析
原始的数据需要在这个网站上注册下载,分成两部分,train和validation,validation是没有标签的,需要预测出标签然后上传到网站上,最后会给你一个成绩。
数据总共有335个样本,加上127个validation(需要自己做预测的),335个样本里面有259个HGG(高级别胶质瘤)和76个LGG(低级别胶质瘤),数据格式是nifti文件(.nii.gz),需要专门的软件才能打开,这里推荐MITK,下载地址在这http://mitk.org/wiki/Downloads,打开之后应该和下面的样子是差不多的。
github上有一些医疗影像的常用的操作库,这里推荐SimpleITK,是一个专门的医疗影像的python库,也是我们后面要用的一个库,可以从这个网址上https://github.com/SimpleITK/SimpleITK下载,熟悉一下基本操作。还有一个notebookhttps://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks,就和教程一样,也可以跑一下看看每个操作都会有什么样的效果。
要分析的数据是病人脑部的核磁共振图像,这个图像是三维的,图像大小为240 × \times × 240 × \times × 155,它的成像原理比较复杂,有想更清楚的了解的可以去b站上看看https://www.bilibili.com/video/av19579047,为了简单起见,我就不仔细描述了。只要知道核磁共振图像会产生如下四种模态的三维图像:
(1)原始的T1
(2)T1加权(t1ce)
(3)T2加权
(4)T2的flair
每个样本都包括上面的四个文件,另外还有一个标签,这个标签也是三维的,是在相应的位置上标记为0,1,2,4。具体含义是
0–正常组织
1–坏死和非增强肿瘤核心
2–肿瘤周围水肿
4–GD增强肿瘤
具体的含义也是可以不用深究,只要知道不同的标签是不一样的肿瘤组织就行。
数据预处理
脑部核磁共振影像的值和图片的像素值不太一样,它表示的是一种强度,数值范围在0到2000都是很正常的,所以数据预处理部分是很有必要做的,在数据预处理之前,再来理解医学影像上的一个概念,偏置矫正,可以看看这篇文章http://www.pianshen.com/article/6998420061/。然后就可以对影像进行归一化的处理。
模型搭建
对于医学影响的处理,Unet是一种很有效的模型,在理解Unet
之前,我们先看一下FCN(全卷积网络,https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf),其具体的模型结构可以用下面这张图表示。这是一种通用的模型结构,可以在这个基础上根据自己的需要自由发挥。
上面这幅图就是全卷积网络的一个代表,没有全连接层,前面几层网络和一般的cnn是一样的,在最后一层采用了一个上采样,直接恢复成了原图像的大小,关于上采样其实就是卷积的反过程,也叫反卷积,是图像从小变大的一个过程。也可以看成是encoder-decoder结构。但是这种结构直接从最后一层恢复成原始图像的大小,中间丢失了很多信息,所以就有了借助于中间过程的下面这种网络。
上面这种网络不仅仅是借助于最后一层恢复成原始图像的大小,还借助于中间生成的图像。比如,在pool4之后,把图像暂存,和resize之后的cov7相加,这时候再恢复成原始图像的大小,是比cov7之后恢复成原始图像的大小要精细的多的。
原论文中也给出了这几个图像上采样的结果,可以看出FCN32s其实是比较模糊的,FCN8s恢复的很好。
有了上面的概念之后,我们再来看一下Unet,Unet论文的下载链接在这https://arxiv.org/abs/1505.04597,Unet的典型结构如下。
先来解释一下。先总体的看一下,左半部分是特征提取部分,右半部分是上采样,这也是一种模型架构,可以根据自己的需要随便修改,比如加大深度之类的。
先看左半部分。横着的蓝色箭头表示卷积,经过两次卷积之后,一部分向右,一部分向下,向下的是池化层,向右的是crop,也就是从568 × \times × 568大小的图像随机裁剪392 × \times × 392的图像,然后concat到右边。左边就是多层的一个卷积->(pool+crop)的结构。
右半部分是一个上采样的结构,就是从小图像变成大图像,蓝色和白色是concat(拼接)到一起的,应该没有做其他的类似加法、平均之类的处理。
2D模型
脑部核磁共振的数据是三维数据,但是其实也可以当成二维数据来做。原始数据的大小为240 × \times × 240 × \times × 155,可以按照155的方向切片,但是要注意的是,可用的切片只有存在肿瘤的切片,因为不存在肿瘤的话,输入进去损失是0,对于训练没有用处。这个地方需要事先处理一下。
2.5D模型
2.5D模型可以看成是一种特殊的2D模型,具体做法是将三个切片合成一个,作为一个输入,这里的3片合成1片不是(123,456)这种形式,而是(123,234,345,456)这种形式,就可以看成是一个3通道的2D卷积了,也是要注意,只要肿瘤存在的切片就好。
3D模型
重点来看一下3D的模型,3D模型的输入是一个240 × \times × 240 × \times × 155的三维矩阵,那么3D的Unet是如何操作的呢?先做几个假设,3D卷积核为3 × \times × 3 × \times × 3,一共有n个,步长为1,则输出的大小为(240-3+1) × \times × (240-3+1) × \times × (155-3+1) × \times × n = 238 × \times × 238 × \times × 153 × \times × n。也可以选择其他的卷积方式,比如same卷积。
确定好卷积的方式之后,就能按照上面的方式搭建一个Unet网络了。
生存期预测
生存期预测是指病人在确诊患了高级别胶质瘤(HGG)之后,做过手术,还能存活多长时间,因为低级别胶质瘤(LGG)是不会致死的,所以实际的样本只有259个,在259个HGG里面,官方给的有一个csv文件,里面记录着病人的年龄,做的哪种手术,以及手术后存活了多长时间。我们把它看成一个回归问题,即预测存活时间,但比赛中还有一个指标,将存活时间分类成短期(10个月以内),中期(10-15个月),长期(15个月以上)。
剔除掉未知存活天数的样本,剩余有210个,实际上患HGG的也有痊愈的,不过只有2个,也是直接剔除掉了。用年龄简单的做了一下和存活天数的相关性,为-0.3,相关性可以看做是负相关,即年龄越大,生存的天数就越短。
我们想到了两个方案,但是只实现了其中的一个,先把这两个方案记录下来。
- 采用和人脸年龄预测的方式去作比较,可以看成是图像的回归问题
输入是去黑边的3维原始图像,resize到统一大小后,用3维卷积的方式,中间卷积,池化,最后得到一个值,loss函数定义成均方误差的形式。 - 从肿瘤三维图像里面手工设计特征,这就是采用传统的机器学习的方式来做,包括强度,位置,纹理等特征,然后再采用回归的方式做。
我们实现的是上面第二种方式,这里推荐一个提取特征的库https://pyradiomics.readthedocs.io/en/latest/index.html,非常强大的一个库,要是让我们当时自己写,估计得写好一阵子,最后用的是一个线性模型回归,顺便看了一下相关性,正相关最大的是距脑部中间的距离,也就是肿瘤的中心越靠近脑袋的中心,生存期就越短,年龄是最大的负相关,即年龄越大,生存期越短。这也符合人的一般的观念。
这篇关于医学影像处理--Unet在Multimodal Brain Tumor Segmentation Challenge 2019上的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!