医学影像处理--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

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序