今天将继续分享从网络结构上进行改进提出NonLocalVNet模型来分割脑肿瘤。为了方便大家学习理解整个分割流程,我将整个流程步骤进行了整理,并给出每个步骤的结果,希望对大家有所帮助。

一、NonLocal模块介绍

在前面的文章中已经介绍过NonLocal模块,其主要思想就是自注意力机制,详细介绍请阅读​Tensorflow入门教程(三十二)——Non-Local VNet3D​NonLocal模块结构如下所示。

BraTS18——多模态MR图像脑肿瘤分割挑战赛续7_非零值

复现的tensorflow实现代码如下所示。












































def non_local_block(x, compression=2, scope=None):"""    non_local_block form Non_local Neural NetWorks paper,hekaiming    :param x:input image    :param compression:channel reduce rato    :param scope:name scope    :return:    """with        _, Z, H, W, C = x.get_shape().as_list()# step11, 1, 1, C, C // compression)0] * kernal1[1] * kernal1[2] * kernal1[3],-1], activefunction='relu', variable_name=scope + 'thetaW')-1]], variable_name=scope + 'thetaB')        theta = conv3d(x, thetaW) + thetaB-1, Z * H * W, C // compression])
0] * kernal1[1] * kernal1[2] * kernal1[3],-1], activefunction='relu', variable_name=scope + 'phiW')-1]], variable_name=scope + 'phiB') phi = conv3d(x, phiW) + phiB-1, Z * H * W, C // compression])0, 2, 1])# step2 energy = tf.matmul(theta, phi) energy = tf.nn.softmax(energy)# step30] * kernal1[1] * kernal1[2] * kernal1[3],-1], activefunction='relu', variable_name=scope + 'gW')-1]], variable_name=scope + 'gB') g = conv3d(x, gW) + gB-1, Z * H * W, C // compression])# step4 y = tf.matmul(energy, g)-1, Z, H, W, C // compression])1, 1, 1, C // compression, C)0] * kernal2[1] * kernal2[2] * kernal2[3],-1], activefunction='relu', variable_name=scope + 'yW')-1]], variable_name=scope + 'yB') y = conv3d(y, yW) + yB y = resnet_Add(x, y)return


二、脑肿瘤图像分析与预处理

(1)、多模态MR脑肿瘤图像分析。

分析的过程基本上跟上一篇一致,这里就不多言了,直接从数据处理开始。

(2)、准备脑肿瘤分割数据。

首先将4个模态序列的MR原始图像进行合并生成4个通道的三维图像,原始图像大小都是(240x240x155x1),合并后大小是(240x240x155x4);

其次对Mask图像进行one-hot操作,将原始图像大小都是(240x240x155x1),生成大小是(240x240x155x4):通道0中非零值区域是背景区域,通道1中非零值是坏疽区域,通道2中非零值是浮肿区域,通道3中非零值是增强肿瘤区域;

最后对图像和Mask进行分块——取Patch操作,生成若干个(128,128,64)大小的图像和Mask,判断并输出非零的Mask和对应的图像。


三、脑肿瘤分割

(1)、搭建NonLocalVNet3d模型,与VNet3d模型不同之处就是在解码网络的最后增加一个NonLocal模块,网络输入大小是(128x128x64)。

BraTS18——多模态MR图像脑肿瘤分割挑战赛续7_3d_02


(2)、loss采用的是多类Focalloss,具体实现可以点击原文链接查看具体代码。

(3)、训练的损失函数和精度如下图所示。

BraTS18——多模态MR图像脑肿瘤分割挑战赛续7_3d_03

BraTS18——多模态MR图像脑肿瘤分割挑战赛续7_模态_04


(4)、脑肿瘤分割推理过程:首先将原始flair,T1,T2,T1ce图像一起读取进来并进行z-score标准化操作,然后将四个模态图像合并成4通道三维图像(240x240x155x4),输入到网络中去,网络输入大小是(240x240x48x4),在z方向上分块输入并拼接最终得到(240x240x155)分割结果。

(5)、进行了结果测试,左边是金标准图像,右边是预测结果图像,如下所示。

BraTS18——多模态MR图像脑肿瘤分割挑战赛续7_模态_05


了大家更好的学习,我把GAVNet网络代码分享到github上:

​https://github.com/junqiangchen/VNetFamily​

如果大家觉得这个项目还不错,希望大家给个Star并Fork,可以让更多的人学习。如果碰到任何问题,随时留言,我会尽量去回答的。