医学影像处理--Unet在Multimodal Brain Tumor Segmentation Challenge 2019上的应用

本文主要是介绍医学影像处理--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上的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626046

相关文章

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口