阎瑞婷,强 彦,王梦南,肖 宁
(太原理工大学信息与计算机学院,山西晋中 030600)
受吸烟、空气污染、职业环境等因素,肺癌已经是威胁人类健康和生命的最恶性癌症之一,并且已经成为所有癌症的头号杀手[1-2]。晚期肺癌患者的5年生存率约16%,早期患者进行有效治疗,5 年生存率能增加约4 至5 倍。肺结节作为肺癌的早期表现形式,其识别和检测对于放射科医生进行癌症分期评估和临床治疗是非常重要的。
深度学习能够自动提取隐藏在数据间的多层特征,已经成功应用于语音识别、图像识别与分类分割等领域[3-5]。近年来,卷积神经网络CNN(Convolutional Neural Network)作为深度学习在图像处理领域的代表算法,因其强大的特征提取能力被引入到医学图像分析并应用于计算机辅助诊断CADx(Computer Aided Diagnosis)[6]。文 献[7]、文献[8]提出 了基于 二维卷积神经网络(2DCNN)的方法来检测肺结节。由于肺结节是三维的,体积背景信息在结节的检测中起着重要的作用[9-10]。二维卷积神经网络及其变体试图利用连续的相邻切片[8]、正交平面[7]或多视图平面[11]来在网络中聚合更多的空间信息对肺结节进行检测。然而,由于二维网络结构的特点,这些方法很难充分利用肺结节的三维空间信息,并将其从复杂的肺部组织中分离出来。
由于患者的CT 图像是由解剖断面切片组成,从CT 图像中检测出肺结节,本质上是一个三维物体检测问题。文献[12]提出了一种端到端的三维卷积神经网络(3DCNN),首先由Faster R-CNN 来提取候选结节,再由3DCNN 来减少假阳性。文献[13]提出了一种改进的基于3DCNN 的肺结节检测算法,在用3DCNN 提取肺结节特征的过程中添加密集连接模块强化特征的传播复用能力。由于肺结节自身尺度不一样,单个尺度输入的3DCNN 很难获取肺结节全面的背景信息,导致结节检测中假阳性过高。
文中提出了一种利用3DCNN 在肺部CT 扫描中检测肺结节的新方法,与二维卷积神经网络相比,三维神经网络可以对更丰富的空间信息进行编码,考虑到无法充分利用肺结节的背景信息,该文提出了一种简单而有效的策略,对多尺度结节信息进行提取,在网络末端融合各尺度信息剔除假阳性结节来提高检测率,以应对大结节背景信息不足,数据量少的挑战。该方法是通用的,可以很容易地扩展到三维医学图像或种类不平衡问题的其他检测任务中。
人体肺部CT 图像中肺实质区域在一张CT 图像中所占比例较小,所在范围也比较固定,左右肺实质区域相对于人体胸腔分布比较稳定,具有位置相对不变性,因而在搭建CNN 模型前,提取CT 图像的包含肺实质的感兴趣区域。该文对CT 薄层扫描的序列图,利用统计学方法,并根据医生的经验发现,当肺部CT 序列图像取图像左上角坐标(40,110),右下角坐标(470,440)时包含的肺实质最完整。如图1 所示,对图1(a) 提取肺实质图像得到图1(b)所示结果。并将结果图经过双线插值法,规格化到112× 112大小后,存储到样本库中,用于进行卷积神经网络的训练。
图1 原始图像和提取肺实质图像对比
卷积神经网络以其独有的卷积池化操作、更少的参与运算参数以及深层次的网络结构,已经成为目前深度学习领域中使用最广泛的神经网络算法之一。卷积神经网络的层级结构主要由数据输入层、卷积层、激活层、池化层、全连接层五部分连接构成,每一部分的具体功能介绍如下。
1)输入层
输入层用于接收外界采集的数据,通常包括一维时间序列数据,二维平面图像数据以及三维立体几何图形数据等。该层预处理工作的主要内容就是对原始图像信息进行筛选,常见的方法主要包括去均值、归一化、主成分分析降维。
2)卷积层
卷积层是卷积神经网络中最重要的一个局部层次结构,也可以说是“卷积神经网络”其名字的由来之处。该层的主要功能和工作原理就是专门负责分析提取图像的一些局部结构特征。
卷积层输出结果是通过对输入的数据矩阵采用窗口滑动的方式从上至下,从左到右以一定的步长移动卷积核或者滤波器与相应的原始数据叠加计算而得到。卷积核相当于一个小型的矩阵,其内部每个元素类比于ANN 中的权值,对应到原始图像的区域,被称为“感受野(Receptive Field)”。具体操作过程如图2(a)-(c)所示,假设有一个4×4 的图像,滤波器大小为2×2,将核内部元素与对应原始图像矩阵元素相乘后相加,就可得到对应位置的卷积结果,最终得到3×3 的特征图。
图2 卷积池化操作过程
上述卷积操作过程中,步幅为1,即卷积核每次滑动一个单位,正好能够覆盖整个输入数据矩阵。而在实际应用中,由于输入数据的尺寸大小不同,步幅长短不一,可能存在滑动窗口无法到达图像矩阵边缘位置的现象。针对这种情况,需要对原始图像进行填充(Padding),常见的填充方法是补零填充和重复边界值填充。譬如特征矩阵大小为ω×ω,卷积核为k×k,步幅为s,填充数值为p,则经过卷积层计算得到的特征图大小如式(1)所示:
3)激励层
激励层也称为激活层,其作用主要是将卷积层模型的结果做一个非线性的映射,引入非线性因素,增加输出特征的复杂性,以解决模型线性不可分的问题。传统ANN 一般采用S 型函数或者双曲正切函数,近些年线性修正单元ReLU(Rectified Linear Unit)及其改进型(如Leaky ReLU、PReLU、RReLU 等)以其收敛快、计算过程简单的优势,成为CNN 中普遍使用的激活函数。
4)池化层
池化层通常紧跟卷积层之后,也是卷积神经网络模型中一个特殊且必不可少的组成单元。理论上在通过卷积层、激励层获得图像特征后,可以直接使用特征图训练分类器,但是这些特征图往往数量庞大,且存在大量无关信息,这样会导致计算机耗费大量资源参与运算,同时也使得模型训练过度,达不到应有的效果,因此需要对特征图进行池化(也称为降采样)操作。常用的操作手段有两种,第一种为最大值池化(Max Pooling),将对应区域内的最大值作为池化结果(如图2(a)-(e)部分所示),第二种是平均值池化(Average Pooling),将对应区域内所有值相加后取均值作为池化结果。
5)全连接层
全连接层作为CNN 组织架构的最后一个重要组成部分,其作用为将离散的分布式的特征图整合到同一维度下,从而形成一串一维的向量作为特征表示,为后续的分类识别奠定基础。通常情况下采用两层以上的全连接层来增加模型的泛化能力,层与层之间采用与传统ANN 中神经元相同的权重连接形式。随着CNN 的深入研究,全连接层参数过多的弊端被解决,逐渐被全局平均池化GAP(Global Average Pooling)所替代。
网络中输入大小设置:该方法通过分析肺结节的大小分布来确定感受野的大小。设计的模型Archi-1,其感受野大小为25×25×20(voxels)。这一感受野大小覆盖了83%已标注的结节,因此,模型对于在正常情况下的所有病例中高频出现的病灶类型有较好的识别效果。设置这个感受野大小的目的是为小结节提供丰富的背景信息,为中等大小的结节提供适当大小的背景信息,而为一些大的结节提供除部分边缘以外的结节主体部分。
另外,该文还设计了模型Archi-2,其感受野大小为35×35×30(voxels)。根据对肺结节的大小分布统计,除了几个体积异常大的结节,这个模型覆盖了超过99%的结节。这个感受野可以为中等大小的结节提供丰富的背景信息,但是会给个别微小结节带来来自周围血管等肺部组织的噪声。尽管如此,与另一种模型相比,这种模型对于识别超大型结节有了显著的提升效果。
网络结构:多尺度3DCNN 框架的主要网络结构如图3 所示,模型Archi-1 和感受野较大的模型Archi-2 都由输入层、卷积层,池化层、全连接层、输出层组成。在每个隐藏层之后插入批量归一化层(Batch Normalization),来确保更高的学习速率和降低过拟合(Overfitting),并添加dropout 层,进一步降低过拟合。最后在全连接层使用Sigmoid 作为激活函数,该函数生成0 到1 之间的结节预测概率值。表1详细描述了网络配置。
表1 多尺度三维卷积神经网络详细结构
为了构建三维卷积神经网络(3DCNN),该文先确定了模型当中使用到的三维卷积层,在网络中,每一层的单个神经元输入关联于上一层的局部感受野,通过提取局部特征,堆叠成为高层次深度特征,从而产生一个独立的三维激活体(3D Activation Volume),即为三维卷积核。给定卷积核大小(Convolutional Filter Size)为F,卷积步长为S(Stride),边界填充像素大小为P(Padding),以及输入三维体的大小Q,可以得到三维激活体大小为(Q-F+2P)/S+1。在卷积得到特征值后,该文使用RelU 层作为激活层,从而构建出完整的三维卷积层。最后,将激活层的输出值作为卷积得到的特征图向量。
卷积网络经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。该文对三维池化层的构建,如图3 所示,周期性地三维卷积层之间插入一个三维最大池化层,它会逐步降低每个特征映射的维度,从而减少网络中的参数和计算量,从而控制过拟合。给定最大池化过滤器大小F、池化步长为S,输入三维体大小为Q,则输出三维体的大小减小为(Q-F)/S。
在每个最大池化层后的dropout 层速率设置为0.25,能有效地缓解过拟合,在一定程度上能达到正则化的效果。当速率为0.25 时,每个神经元在每次训练中都有25%的概率停止工作,因此它不会太依赖某些局部的特征,这样可以使模型泛化性更强。
将一批三维训练样本表示为{(x1,y1)…(xi,yi)…(xm,ym)},其中m为样本数量,xi为输入样本,yi为样本对应的真实标签。yi∈{0,1},其中0 表示非结节,1表示结节。pi为预测的概率,θ表示模型中所有可训练的参数。该文使用权重因子α∈{0,1}和可调聚焦参数γ≥0 解决类不平衡问题,并且将注意力集中在训练较复杂情况的样本上。总体目标函数是样本损失的平均值,通过优化网络参数来最小化J(θ)[14],如式(2)所示:
在两个不同感受野的模型之后,设置一个候选节点Ii,生成一个结节预测概率Pi。为了聚合两个模型探索的多层上下文信息,对预测结果进行了融合,得到最终的预测结果。
1)将模型Archi-1 得到的第c类(Ii符号名)的回归概率值表示为Pi(Archi-2 表示方法类似),则融合后验概率可以由权重线性组合方式计算得到,其表示如下:
其中Pfusion是通过整个网络框架计算得到的对于c类输出结果的融合预测概率。权值是在实验过程中,使用网格搜索策略对训练数据的一小部分子集进行计算得到的。
2)输出值Pfusion在0~1 之间,阈值th 设为0。经实验证明,这是一个合适的值。如果输出值Pfusion小于阈值th,则结果为0,否则为1。模型融合方法提高了系统的泛化能力。这两种模型的训练步骤是一样的,在下一部分中会进行说明。
由于实验数据中正负样本严重失衡,且三维网络结构参数多于二维网络结构,模型容易对训练数据过度拟合,因此,需要对正样本进行数据扩充。为了解决这个问题,将正样本分别绕3 个空间轴旋转90°、180°和270°,并分别在这3 个方向上进行翻转,每个正的样本对应13 个扩充样本,使正样本和负样本的比例为1∶2。
该模型的权值初始化采用LeCun 正态分布,每次迭代从训练数据集中随机选择一个Mini-batch 样本,Mini-batch size 设置为16。采用随机梯度下降(SGD)优化器和标准反向传播[18]来最小化损失函数并采用动量法、退火学习率法、最大-范数正则化(Max-norm)[20]等方法对SGD 进行改进。
LUNA16 数据集包含由4 位放射学专家标注的888 张肺部CT 扫描图像。每个结节的标注包括肺结节的中心坐标和相应的直径,单位为mm。该竞赛数据集用于候选结节检测和结节良恶性分类。对其进行预处理,提取真结节2 351 个,非结节231 731 个,假阳性结节3 526 个,共计237 609 个候选结节。
合作医院提供了267 位病人的DICOM 格式的肺部CT 图像,共计1 837 个候选结节,包括1 045 个真结节,792 个非结节。由于CT 扫描是在医院各部门之间以复杂的程序进行流转,并且只有一位放射学专家仅标注了肺结节的中心坐标,没有标注结节直径等其他特征,因此仅用来验证模型的普遍性和扩展数据集。
为评估提出的肺结节辅助检测系统的性能,通过测量每次扫描的灵敏度和检测到的候选者数量来评价第一阶段的结果,灵敏度定义为检测到的结节数除以结节总数(检测到的结节数TP 与未检测到的结节数FN 之和),计算如式(4)所示,其中若预测定位框的范围落在结节圆心半径之内,则该区域被视为真阳性,其他不相关的检测结果不予考虑。假阳性减少阶段采用受试者操作特征自由响应曲线FROC(Free-Response Receiver Operating Characteristic)和竞争性能指标CPM(Competition Performance Metric)。FROC 曲线中将灵敏度绘制为每次扫描假阳性个数的函数,并设置95%的置信区间;CPM 评分被定义为7 个预先设置的假阳性率下的灵敏度均值(这7 个值分别为0.125、0.25、0.5、1、2、4 和8),计算如式(5)所示:
实验环境基于Windows10 操作系统,硬件环境CPU 为2.90 GHz Intel(R) Xeon(R)W-2102(8G 内存),GPU 为NVIDIA GTX Titan XP(12G 显存),编程开发环境为CUDA Toolkit 10.0,编程语言为Python 3.6,深度学习框架为Keras。
文中采用均匀随机抽样的方法,将LUNA 数据集分为训练集、验证集和测试集三部分。将LUNA数据集的十分之一作为测试集,其余数据按8∶2 分为训练集和验证集。由于该模型在临床实践中需要检测的数据与训练数据存在显著差异,因此使用团队合作医院提供的数据集和LUNA 测试集作为测试集来选择训练方案。训练过程从正负样本比例、dropout 层和max-norm 正则化、权值初始化、数据扩充四个方面进行实验。在两个验证集上探索这四个方面的不同组合对于模型检测肺结节的影响。采用灵敏度、特异度、准确度、F1 分数四个参数评价检测结节效果。
该文提出此模型的主要目的是从成百上千张胸部CT 影像序列中找出可疑病灶区域,供医生进行预筛。首先,当正样本很少时,即使在检测过程中,将所有的样本都归于样本多的负类,同样准确度也会很高,所以在训练中正负样本的平衡是非常重要的;其次,当正负样本比例为1∶2,添加dropout 层和maxnorm 正则化,对权值进行初始化,数据扩充后,网络的检测性能最好;最后,模型在合作医院数据集上的预测结果不如在LUNA 数据集上的优越。这是由于医学图像的特殊性,在LUNA 数据集上训练的模型不一定在合作医院数据集上表现良好。因此,该文在实验过程中尽可能提高模型泛化能力使其可以适应真实的临床数据。
为了更直观地观察所提出方法的整体性能,将实验结果与近年来发表的结节检测方法[5-6,15-18]进行了比较。表2 列出了基于机器学习的检测方法和基于深度学习的检测方法的定量结果对比,即不同假阳性率下的灵敏度和CPM 评分。
表2 不同方法的实验结果对比及CPM评分
基于机器学习的结节检测方法虽然取得了一定程度的进展和效果,但需要人工设计特征的参与,而深度学习方法可以通过训练网络自动学习高级语义特征,因此基于卷积神经网络的深度学习方法更具有可扩展性和检测优势。文献[7]使用二维CNN 结构用于假阳性去除,效果明显低于其他几种三维CNN 结构,总体来看该文的方法CPM 得分为0.916,结果比表现最好的方法还高出2.5 个百分点。进一步对深度学习方法进行了比较,绘制了5 种方法的FROC 曲线如图4 所示,可以看出文中方法在不同的假阳性率下均取得了较高的灵敏度,表明该方法更适合于结节检测任务。
图4 不同检测方法性能比较
基于多尺度3DCNNs 的网络框架结构,设计了Archi-1 和Archi-2 两个不同感受野大小的模型,然后对模块进行融合。如图5 所示,不同模块和模块融合后的FROC 曲线表明融合后结果更有优势,表3为模块和模块融合后在不同假阳性率下的灵敏度,同样融合后的灵敏度更高。实验结果表明,该框架可以准确地识别多种大小、形状和位置的结节,具有很高的可信度。
图5 不同模块和模块融合后的FROC曲线
表3 模块和模块融合后在不同假阳性率下的灵敏度
文中提出了一种基于多尺度三维卷积神经网络的肺结节检测方法。整个模型在弱标记的临床数据检测任务中表现良好。首先,由于肺结节的三维特征与血管等组织不同,传统的二维卷积神经网络无法充分挖掘肺结节的三维特征,因此文中使用2 个不同大小感受野的三维卷积神经网络对三维空间信息进行熟练的编码,处理不同大小和形状的结节。此外,通过数据扩充增加正样本数量,然后过采样正样本将正负样本的比例提高到1∶2,解决了种类不平衡的问题,在一定程度上降低了数据不足的影响。最后,由于在临床情况下需要检测的数据与训练数据基本不同,所以文中使用真实的临床数据对该方法进行评估。
该文提出的方法是通用的,可以很容易地扩展到三维医学图像或类不平衡问题的其他检测任务。今后的研究还需要进一步提高肺结节的检测准确性,对结节恶性程度的量化也需要进一步研究,以便对患者进行更全面的病理诊断。未来的发展需要与肺部专家积极合作,通过专业知识的交流,以及大量包含有价值的空间和病理信息的数据流,可以使肺结节检测的工作更加高效地进行。