张倩雯,陈明,2,秦玉芳,2,陈希
1.上海海洋大学信息学院,上海201306;2.农业部渔业信息重点实验室,上海201306
工业化水平的提高在改善人类生活质量的同时也带来了环境污染的问题[1]。近几十年来,肺癌的发病率和死亡率在不断上升,同时,肺癌具有发病时间短、疾病致因复杂、转移速度快的特点,在发病早期大多数表现为肺结节,常常因为它不容易被察觉而耽误患者治疗的最佳时间。所以,及时发现并提早治疗可以大大增加患者的治愈率和生存几率[2]。在肺结节检测与识别中,候选结节提取检测是关键步骤[3],候选结节提取检测的目的是从肺实质中定位结节所在的区域,由于肺结节与周围的血管、组织等在形态特征、像素值上相似度很高,特别是粘连型结节,这为研究带来了困难。Ko等[4]提出多阶段阈值法来识别肺部边界,并评估肺内可能含有结节区域的形状、大小和位置。阈值法往往通过设置阈值来分成若干类,从而分离结节区域,这些区域通常会与肺部其他组织灰度重叠,导致分割效果不好。董林佳等[5]通过构建类球形滤波器来提取疑似肺结节,从而滤除其他形状的区域,虽然形态学方法能有效提取结节,但是也会出现漏检、多检的情况。Kanazawa等[6]提出一种基于聚类的方法来提取候选结节区域,同时减少假阳性,但是这种方法的计算量较大,检测效率低下。Lassen等[7]使用区域生长法提取候选结节,但是区域生长的起始种子点需要手工标注选取,基于传统方法的局限性,目前主要采用的方法是将传统的方法和机器学习的算法结合起来,或者采用基于深度学习的方法,如R-CNN系列[8]、U-Net[9]等,严忱君[10]采用U-Net网络提取候选区域实现早期肺结节检测,并取得较好的效果。方俊炜[11]将U-Net网络的输入改成3D图像来检测肺结节,最终达到预期效果。
随着深度学习兴起,深度卷积神经网络开始应用在医疗图像[11-14]上,但由于深度学习模型依赖大量的样本量以及对计算机性能要求高,导致开发成本高,严重限制这一技术在肺结节检测与识别领域的应用,因此在这个过程中仍然存在着许多值得研究的地方。针对这一现象以及为了改善深度学习中梯度消失现象,本研究基于U-Net模型在医疗图像分割[15]领域的表现,将 U-Net网络和 ResNet结合形成新的网络ResUnet,并将其应用在肺结节疑似区域提取中,并将输入扩展成3D,输出分割后的结节区域,有效地将非结节区域剔除,从而减少肺结节的假阳性,使之可用于后续的真假结节筛选。
与卷积神经网络相比,为了使获得的结果更好,在保留高级语义信息的同时使用低层次的信息是非常重要的[16-18],但是当可用的数据集有限时,训练这样的深度神经网络是非常困难的。解决这一问题的一种常见的方法就是使用预先训练的网络,在目标数据集上对其进行微调;还有一种方法就是采用数据增强技术。此外,有些网络的架构本身也有助于减轻训练问题,U-Net就是基于全卷积神经网络的一个用于图像分割的经典网络,它是建立在全卷积神经网络架构上的,U-Net包括两部分,左侧的特征提取部分和右侧的上采样部分,网络结构左右对称,呈U形,网络结构如图1所示。
在图像的分类和识别[19]中,神经网络的深度对最后的效果有着很大的影响。因此,将网络设计得越来越深,随之带来的矛盾就是,随着网络加深,出现明显的梯度消失现象,网络的训练效果不佳,但是浅层的网络对效果提升又起不到明显的作用。为了解决这一问题,残差神经网络[20]被提出,残差神经网络由一系列堆叠的残差单元组成。
图1 U-Net网络结构图Fig.1 Diagram of U-Net network structure
假设神经网络的输入是x,输出是H(x),需要学习的函数为F(x)=H(x)-x,即输出和输入的差,而不再是H(x),这就是一个残差学习单元,此时通过在浅层网络的基础上增加一个y=x即恒等映射来将原始函数转换F(x)+x成的层被称为一个残差单元,如图2所示,而多个残差单元级联成一个神经网络。
图2 残差单元Fig.2 Residual unit
因此网络中残差的表达式可以统一写成如下公式:
其中,ws只有在特征图维度不同的时候才用到,可以通过零填充增加维度,也可以通过1×1卷积实现。当残差用于两层全连接层的时候,其F=W2σ(W1x),网络单元如图3所示。
将两个3×3的卷积替换成了图3b的卷积层。首先在1×1卷积层下降维,然后在另一个1×1卷积层下还原,这能够起到调节维度的作用,从而令3×3卷积可以在较低维度的输入上进行,在非常深的网络中,该设计可大幅减少计算量。残差模块的引入有效缓解了梯度消失的影响,使得网络模型层数可以大大增加。
图3 两种残差模块Fig.3 Two residual modules
将U-Net网络和ResNet结合形成新的网络ResUnet,这充分结合了两个网络的优势:(1)残差结构会简化网络的训练;(2)在残差单元内的跳跃连接以及网络的低层次和高层次之间将促进信息传播而不会出现梯度消失。图4为两种不同结构的比较。
图4 原始Unet和ResUnet结构比较Fig.4 Comparison of original U-Net and ResUnet structures
网络中每个残差单元可以表示为一般形式:
其中,xl和xl+1是第l层残差单元的输入和输出;F(·)是残差函数;f(y1)是激活函数;h(xl)是恒等映射函数,最典型的是h(xl)=xl。
整体网络如图5所示,本研究将此网络扩展成3D网络,利用深度7层网络架构进行肺结节区域提取,该网络由编码、桥接、解码这3部分组成。编码部分包括将输入图像编码成更加严谨的表示;桥接部分就像连接编码和解码的桥一样;解码部分恢复成像素分类。所有这3部分都是由一个卷积块表示的,包括输入、BN层、两个3×3的卷积、ReLu激活层、恒等映射连接单元、输出。编码部分有3个残差单元,在每个单元中对特征映射图进行下采样而不是池化操作,第一个卷积块的大小将减少一半;相应地,解码部分也由3个残差单元组成,在每个单元之前,对来自较低级别的特征图进行上采样,并使用相应编码路径的特征映射级联。在解码的最后一层,使用1×1卷积和Sigmod激活层将多通道特征图映射到所需要的分割中。与U-Net相比,ResUnet总共只有15个卷积层并且删除了剪切。
此外,损失函数用dice_coef_loss定义,其中,两个区域的相似程度用DSC表表示,A和B表示两个轮廓区域所包含的点的集合,定义公式见式(4)。
图5 二维ResUnet网络模型Fig.5 Two-dimensional ResUnet network model
dice_coef_loss用式(5)表示,并使用自适应性矩估计(Adaptive Moment Estimation,Adam)来训练网络。
实验采用的数据集来自LUNA16(Lung Nodule Analysis 2016)比赛,该数据集由888张CT图以及图像的标注内容即结节的坐标和直径等组成,其中每个病人的CT图像包括若干张切片。在所有CT中,36 378个结节被标出(直径>3 mm的结节),<3 mm和非结节不纳入进来,剩余5 765个结节。若两个结节离的太近,则中心距离小于半径之和,也就是相交了,需要对两个结节进行合并,合并的中心和半径是该两个结节的均值。
本研究采用的预处理的步骤及方法如图6所示。
预处理过程包括标准化像素值、明确肺实质边界、取最大的连通图、闭操作、膨胀,最后得到肺实质,结果如图7所示。
图6 预处理步骤及方法Fig.6 Preprocess steps and methods
(1)首先对原始图片进行二值化处理,区分肺部区域和背景噪声,必须确保所设置的阈值能够通过像素值区分肺和密度更高的组织。本研究将阈值设置为固定值,通过阈值将图像分为两部分,如图7b所示。
(2)根据每个区域的边界框大小选择区域确定肺部边界,通过连通区域分析的方法确定肺的区域,将图像中的白色区域以及噪声提取出来,本研究通过将连接图片边缘的点的值设置为0来消除边缘位置噪声产生的黑色区域,并保留最大的两块连通区域,如图7d所示。
(3)此时图像还存在很多空洞和气孔,需要使用腐蚀和膨胀来填平(消除)由不透明射线造成的黑色肺部区域,然后得到mask图像(图7f),与原始图像对应的像素点进行“与”操作,提取出最终的肺实质(图7g)。
本研究提出的模型采用的实验环境为LUNIX,在内存大小为32 GB,显存为22 GB,显卡是GTX 1080ti的硬件平台上完成的,所用的框架是以tensorflow为后端的Keras。将训练集和测试集按7:3的比例划分,训练的迭代次数为113,批量大小为2,用于训练和验证,学习率设为3e-5,使用批归一化,采用3D ResUnet模型,输入张量为64×64×64×1×1,训练集上,每迭代一次结束训练后就同时在验证集上进行训练。
使用本研究的模型得到的分割结果如图8所示,左边的图表示输入的图片,中间的图是根据标注的文件生成的肺结节的掩膜,代表标签值,最右边的图是模型预测的结果,用上节描述的dice_coef_loss来表示模型的损失函数,即真实结节和预测结节不相似程度,从图中可以看出该模型能较好地预测到肺结节的位置。模型的损失函数如图9,在训练集上loss值能快速下降,但在验证集不稳定,主要原因是由于数据集有限,模型存在过拟合现象。
图7 图像预处理过程Fig.7 Image preprocessing
图8 本文分割结果图Fig.8 Segmentation results obtained by the proposed method
图9 3D ResUnet模型训练过程Fig.9 3D ResUnet model training process
本研究提出的方法主要通过精度和召回率进行评估,将训练结果最好的模型作为最终的结果。精度指的是在模型预测结节的所有结果中,预测正确的比例;召回率指的是真实值是肺结节的所有结果中,预测正确的比例。严忧君[10]采用二维U-Net原模型对肺结节进行分割并使用VGG算法识别,其中图8分割结果图中最左边的是输入的肺实质,中间的是标注的结节的位置,右边的是预测的结节图,可以看到预测图中有很多假阳性结节,最终得到2.7%的精度和87.1%的召回率,天池医疗大赛冠军组采用基于3D U-Net模型来进行肺结节的语义分割,获得62.18%的精度和97.83%的召回率。本研究采用基于3D ResUnet的肺结节分割方法,最终的精度和召回率分别为35.02%和97.68%。该模型主要是为了将不属于肺结节的区域剔除,使得推荐的肺结节位置较少,同时召回率又保持较高。
本研究将深度残差学习和U-Net网络结合,把ResUnet应用在肺结节图像语义分割中,并将输入扩展成3D,通过对CT图像预处理提取出肺实质,对得到的图像以肺结节中心为坐标的区域附近截取立体图像块并进行数据增强生成3D ResUnet网络的输入样本,最后通过训练模型得到肺结节分割结果,本研究的方法具有较高的召回率,能有效将非结节区域剔除,为后面的真假阳性结节分类打下好的基础。