袁金丽,赵琳琳,郭志涛,苏 逸,卢成钢
河北工业大学 电子信息工程学院,天津 300401
据统计,在所有类型的癌症中,肺癌的死亡率最高[1],肺癌患者的5 年存活率仅为16%左右。准确有效的肺癌早期诊断对于提高肺癌患者的存活率具有重要意义[2]。如果肺癌能在早期就实现检测定位,那么肺癌患者的5 年存活率能够提升到70%[3]。由于CT 图像具有较高的组织分辨率,因此CT 图像成为诊断肺部疾病的最有效的成像方法,对肺癌的检测和诊断具有重要价值[4]。早期肺癌在医学影像中通常表现为肺结节,在病人CT图像中检测出肺结节并进行早期治疗对于预防肺癌非常重要[5]。目前,由于计算机断层扫描(CT)影像中肺结节尺寸变化较大、尺寸小且不规则等特点,使得肺结节检测变得异常困难[6]。
针对这一问题的研究早已展开,Setio等[7]提出了基于多视角的二维卷积神经网络(2D CNN),将其应用于肺结节的检测中,该方法从肺结节的立体特性出发融合肺结节的不同二维(2D)切面信息来剔除假阳性结节。苗光等[8]为解决现有方法在肺结节检测中工作效率不高的问题,提出了一种基于改进的U-net 网络模型,U-net模型是一种在医学图像领域应用较多的卷积神经网络模型,具有端对端的网络结构。杨帆等[9]采用双通道二维卷积神经网络(2D CNN)检测肺结节,将预处理前后的图片分别输入相同的模型中,最后整合两个模型的输出结果。但使用2D CNN不能很好地获取图像的空间信息,难以提取到更多的特征信息,不利于肺结节的检测。
为了充分利用三维(3D)CT扫描中包含的信息以更准确和有效地检测肺结节,研究人员开发了许多基于3D CNN 的系统。Furst 等[10]训练了3D CNN 以在没有先前的候选选择步骤的情况下在胸部CT中执行结节检测。但是,性能水平低于使用多视图2D CNN 或3D CNN 进行误报减少的先前系统。Huang 等[11]提出了基于3DCNN的结构图,用于检测低剂量CT图像中的肺结节。考虑到多维数据的尺寸、训练数据的大小以及计算机的计算能力,文献[11]提到的系统使用了相对简单的3D-CNN架构。文献[11]提到的系统将医学知识应用到肺结节检测中,首先使用了基于局部几何模型的过滤器生成候选节点,利用医学知识,降低了3DCNN分类步骤的计算成本和复杂度。Dou 等[12]提出了一种通过整合一组具有不同大小感受野的3D CNN,以减少肺结节检测中的假阳性。该方法为2016 年肺结节分析挑战(LUNA2016)的假阳性减少路线的获胜者。Pezeshk等[13]提出基于3D CNN 的网络结构图,将CNN 转换为3D全卷积网络,与滑动窗口方法相比,该网络可以更有效地处理整个CT 体积,并生成整个体积的得分图。并将其命名为DeepMed,其网络结构由3个卷积层,2个最大池化层,2个全连接层和1个softmax层组成。Jin等[14]提出了一种深层三维残差网络,并将其用于肺结节特征的提取。近来,Zhu等[15]提出一种全自动肺癌诊断系统,针对肺结节检测提出一种带3D 双路径块和U-net 型编码-解码结构的Faster RCNN 来高效的学习结节特征。Li等[16]提出一种用于肺结节检测的3D压缩和激励编码器-解码器卷积神经网络,并引入Focal loss作为损失函数,用于解决训练样本中,正负样本失衡问题。
随着技术的不断发展,肺结节的识别与检测不断取得新进展,基于3D CNN的系统虽然在肺结节检测上取得了不错的效果,但依然存在一些问题。文献[15]与文献[16]在网络设计时,考虑到融合更多的信息来更好的学习结节特征,但是,在不同大小与不同种类肺结节的检测效果还不够理想,并且数据中的正负样本数量不均衡,使得训练后的模型泛化能力较弱。
针对肺结节大小相对不同和形状的多样性,本文提出了一种基于改进U 型残差网络的肺结节检测算法。首先,鉴于肺结节形状以及大小的多样性,提出了一种新型自校准注意力模块(ECA-SC block),ECA-SC block既可以令空间上的每一个点都包含附近区域和通道上的交互信息,避免了整个全局信息中无关区域的干扰,又以自适应学习的方式来获取每个特征通道的重要程度,构建特征的奖惩策略,充分优化网络性能;其次,主干网络设计为U型残差[17]网络,编码器和解码器之间建立跳跃连接,帮助解码器更好地修复目标的细节,设计预处理块融合不同尺度的特征,增加网络深度和宽度的同时减少参数,网络采用残差学习方式可以避免随着网络深度增加,出现退化现象;最后,由于LUNA16(lung nodule analysis 2016)[17]数据集正例样本(真结节)与负例样本(假阳性结节)的数量比失衡,采用DR loss[18]作为本文算法的分类损失函数,减小了数据集中样本分布不均带来的影响。
本文提出的基于改进U-net型残差网络的肺结节检测算法,构建了一种融合了SCConv(自校正卷积)与ECA(通道注意力)的U-net 型残差网络,并针对样本失衡问题设计了损失函数。
输入特征图通过SCConv(self-calibrated convolutions)[19]模块与ECA(efficient channel attention)[20]模块,然后将输入与ECA 模块的输出进行残差连接,构成ECA-SC模块,如图1所示。ECA-SC模块中SCConv模块与使用小卷积核融合空间和通道方向信息的标准卷积不同,其通过自适应地围绕每个空间位置建立了长距离空间和通道间依赖性的校准操作,因此,它可以通过显式合并更丰富的信息来帮助CNN生成更多辨识性表示,有助于检测不同大小与不同种类的结节。同时,采用ECA模块又以自适应学习的方式来获取每个特征通道的重要程度,构建特征的奖惩策略,实现通道的自适应校准,充分优化网络性能,进一步提高识别的准确率。采用残差学习方式拼接输入与输出,可以保留更多高层特征图中的低分辨率信息以提升结节识别的灵敏度。
图1 ECA-SC模块示意图Fig.1 Diagram of ECA-SC block
1.1.1 SCConv模块
传统的卷积特征变换中每个空间位置的视野主要由预定义的卷积核大小控制,由此类卷积层的堆叠组成的网络也缺少大的感受野,无法捕获足够的特征信息。SCConv 模块改进了传统卷积特征转换过程,进而增强输出特征的多样性。
首先将原图按照通道分成两个分支X1和X2,在X1中采用通过残差下采样获得通道和空间上的注意力,然后和卷积后的X1部分进行相乘,再用卷积提取特征。该分支是为了有效地收集每个空间位置的丰富的上下文信息,因此在两个不同的尺度空间中进行卷积特征转换:原始尺度空间中的特征图和下采样后的具有较小分辨率的潜在空间。利用下采样后特征具有较大的感受野,因此在较小的潜在空间中进行变换后的嵌入将用作参考,以指导原始特征空间中的特征变换过程。在X2中使用一个简单的卷积操作,其作用是为了保有原始的空间信息。最后,将两部分串联到一起,进行信息融合。SCConv模块的优势在于空间上的每一个点都有附近区域的信息和通道上的交互信息,同时也避免了整个全局信息中无关区域的干扰。
SCConv的具体操作步骤为:将输入X均匀划分为{X1,X2},分别经过不同的处理操作,结构如图1 的A 部分所示。将X1送入到自矫正分支,依次对其进行均值下采样down、卷积特征变换K2、双线性上采样up,采样率设为r,然后再与输入相加通过sigmoid 函数σ得到空域层面的注意力特征图,并将所得空域注意力图与经过卷积特征变换K3的X1进行融合。F1~F4为以K1~K4为核的卷积过程,⊕代表逐元素相加,⊗代表逐元素相乘。SCConv模块处理过程可以描述为:
得到自矫正分支的输出。将X2送入常规卷积变换分支,对输入X2进行卷积特征变换K1,得到常规卷积分支的输出。最后,将X1与X2处理后的特征进行拼接。
1.1.2 ECA模块
ECA 显式地建模特征通道之间的相互依赖关系。没有引入一个新的空间维度来进行特征通道间的融合,而是采用了一种全新的“特征重标定”策略。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征,从而能够更好地注意关键特征,可以在不显著增加参数数量的同时有效提升模型的性能。
ECA 是一种非常轻量级的通道注意模块,改进于SE(squeeze-and-excitation)[21]模块。SE 模块主要包含3部分,如图2所示:首先,利用全局平均池化(GAP)操作将输入各特征通道压缩成一个具有全局响应的实数,输出维度与输入特征图的数目相同,实现挤压操作;其次,通过一个压缩比(降维)为r的全连接层(FC)将特征维度降低到输入的1r,然后经过ReLU激活后再通过一个全连接层升回原来的维度,利用Sigmoid 函数σ获得0~1之间归一化的权重,实现激励操作;最后,通过Scale操作将归一化后的权重加权到每个通道的特征上。尽管SE中的降维操作可以降低复杂度,但会导致通道和权重不直接对应,因此ECA在没有降维的情况下,通过考虑每个通道及其k个相邻位置,捕获了本地跨通道交互。
图2 SE模块Fig.2 SE block
ECA 可以通过大小为k的快速一维卷积来有效地实现,有多个相邻位置参与一个通道的注意预测。ECA结构如图1 中的B 图所示,与SE 的不同之处在于ECA的激励操作不通过降维实现,而是自适应地判断卷积核大小k,然后执行一维卷积,后面跟着一个Sigmoid函数来学习通道注意力,实现激励操作。内核大小k通过通道维数C确定:
式中,|t|odd表示最近的奇数t,γ=2,b=1。
总体来说,SE模块主要由全局平均池化层、全连接层和Sigmoid 函数组成。其中两个FC 层的作用是为了捕捉非线性跨通道交互信息,并且第一层FC 用来降维以控制模型的复杂性。而ECA 模块去除了原来SE 模块中的FC层,直接在GAP之后的特征上通过一个可以权重共享的一维卷积进行学习,实现通道和权重的直接对应。
1.1.3 残差学习
对于传统的CNN网络,简单的增加网络的深度,容易导致梯度消失和爆炸。针对梯度消失和爆炸的解决方法一般是正则初始化(normalized initialization)和中间的正则化层(intermediate normalization layers),但是这会导致另一个问题:退化问题,随着网络层数的增加,在训练集上的准确率却饱和甚至下降了。残差学习主要思想是在网络中增加了直连通道,以保留之前网络层的一定比例的输出,实现特征重用,是消除深层网络中梯度消失现象的一种有效方法。在构造深层次的网络时,防止退化现象的发生。
本文ECA-SC模块即为基于残差结构思想设计的,该模块保留原有基础残差结构的直连通道,很好地融合了SCConv 模块、ECA 模块这三者的优势。最后,在残差结构后采用ReLU 激活,ReLU 激活操作不仅可以增加两个卷积层间的非线性关系,也可以在保证网络稀疏性的同时减少参数间的相互依存关系。
损失函数由分类损失和回归损失两部分组成,采用DR loss作为分类损失,smooth L1 loss作为回归损失,对正样本计算分类损失与回归损失,负标签不计算回归损失只计算分类损失,总损失为回归损失与分类损失之和,即:传统分类损失函数BCE loss仅关注正类的预测概率,只要其值足够大,就可以确保结果正确。对于正负样本不均衡的问题,由于负样本远多于正样本,则模型更倾向于预测样本为负类且置信度较大,即这部分样本为易分样本。如果持续下去,势必会造成模型训练的不平衡。文献[16]采用Focal loss 作为分类损失函数,降低易分类样本的损失权重而让模型集中训练难分样本,但Focal loss 是针对一幅图像中的单个样本,没有将一幅图像看作整体。而DR loss将一幅图像看作整体,每次考虑图像中的样本对,以此解决类间不平衡问题,并对正样本和负样本的置信度分布优化。DR loss分类损失函数定义:
肺结节检测网络结构如图3所示,由于计算机GPU限制,因此将LUNA16 提供的候选结节质心为中心,将输入裁剪为96×96×96 的立方体(cube),立方体中包含标记的结节。在第一个最大池化(Maxpooling)之前,使用两个预处理块(Preblock)来生成特征,如图3(a)所示。为融合不同尺度的特征,增加网络深度和宽度的同时减少参数,采用了3 个分支进行特征提取,分别为1×1×1 卷积分支、1×1×1 卷积与3×3×3 卷积串联分支、1×1×1卷积与5×5×5卷积串联分支,最后将各分支串联(concat)。之后,在编码器子网中使用ECA-SC block与最大池化,在解码器子网中,特征图由反卷积(Deconv)层和ECA-SC block 处理,同时将反卷积后的特征与低层特征concat。
图3 网络结构模型Fig.3 Network structure model
编码器子网将Preblock 输出特征图通过ECA-SC block,分为四步,每一步通过两个ECA-SC block 与Maxpooling,让特征图空间上的每一个点都包含附近区域的信息和通道上的交互信息,同时以自适应学习的方式来获取每个特征通道的重要程度,构建特征的奖惩策略,充分优化网络性能,并采用残差学习方式构建更深层的网络。第一步图片尺寸缩减为48×48×48,通道数变为48;第二步图片尺寸缩减为24×24×24,通道数变为72;第三步图片尺寸缩减为12×12×12,通道数变为96;第四步图片尺寸缩减为6×6×6,通道数变为120。经过四步后,输入图片尺寸缩减为原来的1/16。
解码器子网将分辨率放大,逐步修复物体的细节和空间维度。分辨率放大采用反卷积实现,首先,将编码器子网的输出采用一个2×2×2步长为2的反卷积操作,将图片尺寸变为12×12×12,接着将反卷积后的特征与低层特征串联(concat),编码器和解码器之间建立的跳跃连接,帮助解码器更好地修复目标的细节,通道数为216。然后通过两个ECA-SC block 与一个2×2×2 步长为2的反卷积将特征图尺寸恢复到24×24×24,采用concat后,通道数为224,到此完成特征图的分辨率放大。
接下来,通过两个ECA-SC block整合特征图信息,输出通道数为248,然后经过1×1×1 的卷积与dropout,通道数变为64,最后通过1×1×1 的卷积,输出数据为四维的张量,24×24×24×15可表示为24×24×24×3×5,其中3 表示锚框个数(大小为5、10、20),5 表示回归量(ô,d̂x,d̂y,d̂z,d̂r,即概率、三维坐标、边界框直径大小)。
算法实现的软件环境为Windows 10 操作系统,硬件环境为Intel Core i7与Nvidia GeForce GTX 2080Ti(11 GB内存),编程开发环境为CUDA-Toolkit10.0,编程语言为Python 3.6,深度学习框架为Pytorch。
本研究训练时,裁取尺寸为96×96×96 的数据块训练肺结节检测模型,70%的输入数据至少包含一个结节,30%的输入数据不含结节;测试时输入原始CT图像大小为512×512×512。本文研究超参数设置如下:为使网络更好地训练,学习率分为三段,前1/3 epoch学习率为0.01,1/3到2/3 epoch学习率为0.001,剩余epoch学习率为0.000 1;动量设置为0.9;权重衰减为0.000 1;epoch取1 000;batch_size取3。
本文选用的数据集为LUNA16,LUNA16 的数据来源于一个更大的数据集LIDC-IDRI(lung image database consortium and image database resource initiative)[22]。LIDC-LDRI 几乎包含了所有低剂量肺动脉CT 的相关信息,包括多位医生对结节大小、位置、诊断结果、结节纹理、结节边缘等信息的标注。LUNA16 数据集将LIDC-IDRI数据集切片厚度大于3 mm的CT去除,同时将切片层间距不一致以及缺失部分切片的CT 也去除,最后产生了888 张低剂量肺部CT 图像。LUNA16 给出了候选结节的病人序列号、中心坐标以及其对应的标签信息,其中共有1 186 个结节标签。将LUNA16 数据集划分为训练集、验证集和测试集,比例设置为6∶1∶3。评估指标选用FROC(free-response receiver operating characteristic),FROC 得分代表了检测召回率和可容忍假阳性个数的综合指标,FROC 得分越高,模型的性能越好。该指标通过计算CPM(competition performance metric)来衡量算法的性能,CPM指平均每组CT图像中假阳个数(false positives per scan)为0.125、0.25、0.5、1、2、4、8时的平均检出率。
在进行数据训练前,首先对数据进行预处理,先将数据重采样统一分辨率,再采取阈值化方法过滤水、空气,剩下的部分进行膨胀处理填补肺部内部的小孔洞,制作mask,然后进行归一化,将原始数据截取至−1 200~600,此范围外的数据置为−1 200 或600,最后再将数据归一化至0~255,加上mask,完成原始数据的处理[23]。结节检测流程如图4所示。
图4 结节检测流程Fig.4 Nodule detection process
为研究本文算法不同组成部分是否有助于肺结节检测,在LUNA16数据集上选用不同的网络架构进行了实验。首先,验证DR loss性能,将DR loss与传统的交叉熵损失函数BCE loss、文献[16]的Focal loss 损失函数进行对比,Model_1 表示采用传统交叉熵损失函数BCE loss 的U 型残差网络,Model_2 表示采用文献[16]的Focal loss损失函数的U型残差网络,Model_3表示采用DR loss的U型残差网络。性能对比结果如表1所示。
其次,用R 表示采用DR loss 的U-net 型残差网络,将R作为评估不同网络架构的基准,对SE、ECA、SCConv在R 上的不同融合版本进行了比较。R+se 表示在R 基础上添加SE 结构的网络;R+eca 表示在R 基础上添加ECA结构的网络;R+sc表示在R基础上添加SCConv结构的网络;R+sc+se表示在R基础上添加SCConv结构与SE结构的网络;R+sc+eca表示在R基础上添加SCConv结构与ECA结构的网络。由于R+sc+eca所融合的模块都为轻量级模块,所以并未明显增加网络计算量,并未对网络训练速度造成明显影响。性能对比结果如表2所示。
由表1与表2可以看出:(1)与传统的交叉熵损失函数BCE loss、文献[16]的Focal loss损失函数相比,采用DR loss作为分类损失得到了更好的训练效果;(2)添加SCConv 结构,让空间上的每一个点都包含附近区域的信息和通道上的交互信息,大幅提升输出特征的感受野,增加了特征的信息提取能力,同时避免了整个全局信息中无关区域的干扰,提高了模型的性能;(3)添加SE 或ECA 结构,以自适应学习的方式来获取每个特征通道的重要程度,构建特征的奖惩策略,实现通道的自适应校准,可有效提高网络的检测性能,而ECA 通过不降维策略令通道与权重直接对应,使得网络应检测性能更优于SE。本文所提算法通过添加SCConv 结构与ECA 结构使得网络的平均FROC 得分最高,CPM 可达0.901。
表1 不同损失函数的肺结节检测性能对比Table 1 Comparison of lung nodules detection performance with different loss functions
表2 不同结构的肺结节测性性能对比Table 2 Comparison of lung nodules test performance of with different structures
为验证本文算法在肺结节检测中的优势,在相同实验数据集分布与实验环境下,用本文所提算法与最新肺结节检测的文献[15]与文献[16]算法进行了实验对比,文献[15]提出一种用于肺结节检测的带3D 双路径块和U-net 型编码-解码结构的Faster R-CNN,文献[16]提出一种用于肺结节检测的3D 压缩和激励编码器-解码器卷积神经网络。表3为本文算法与文献[15]、文献[16]的肺结节检测性能对比。
如表3 所示,本文所提算法与文献[15]、文献[16]中算法相比,本文算法CPM 得到了显著提升。每次扫描中,对0.125、0.25、0.5、1、2、4、8 个假阳性的检测结果均优于文献[15]与文献[16]算法检测结果。为了更加精确地对比几种算法的性能,本文给出了3 种算法的FROC曲线,如图5所示。
表3 不同算法的肺结节检测性能对比Table 3 Comparison of lung nodules detection performance of different algorithms
图5 不同算法的FROC曲线Fig.5 FROC curves of different algorithms
从表3 与图5 可以看出,本文算法的平均检出率为0.901,在各个假阳性个数下的灵敏度均高于文献[15]与文献[16]算法,检测性能最优;文献[16]算法次之,平均检出率为0.863;文献[15]算法最差,平均检出率为0.845。本文算法相比于文献[15]与文献[16]算法,在假阳性个数低的情况下检测性能更为凸显,在不同假阳性个数下均可得到较高的灵敏度,检测性能更稳定。本文所提算法对小结节、大结节与一张切片同时存在两个结节的检测对比结果如图6所示,图中每一行依次为肺结节位置金标准图、文献[15]检测结果、文献[16]检测结果、本文算法检测结果;每一列依次为小结节、大结节、两个结节。对血管粘连型结节、孤立型结节与贴壁型结节的检测对比结果如图7所示,该图每一行依次为肺结节位置金标准图、文献[15]检测结果、文献[16]检测结果、本文算法检测结果;每一列依次为血管粘连型结节、孤立型结节、贴壁型结节。肺结节位置金标准图中矩形框代表肺结节的真实位置,检测结果中矩形框代表检测到的肺结节位置,矩形框外的数字表示预测为肺结节的置信度。
从图6 与图7 可以看出,本文算法对不同大小与不同种类的结节都有较高的检测置信度。如图6所示,文献[15]对小结节的检测能力稍弱,对于一张切片同时存在两个结节时结节检测置信度较低;文献[16]对小结节与大结节都具有较高的检测置信度;本文算法进一步提升了检出结节的置信度,增强了对小结节的检测能力,文献[15]、[16]与本文算法对于大结节都有较高的检测置信度,其中,本文算法对于大结节的检测置信度最高。如图7 所示,文献[15]网络对血管粘连性与贴壁型结节检测置信度较低;文献[16]在一定程度上提升了对血管粘连性与贴壁型结节检测的置信度,得到了较好的检测结果;本文算法进一步提升了对不同种类的结节的检测置信度,对于血管粘连性、孤立型、贴壁型结节都得到了很好的检测效果。其中,文献[15]、[16]与本文算法对于孤立型结节都有较高的检测置信度,而文献[15]对于孤立型结节的检测性能稍差于文献[16]与本文算法。
图6 肺结节检测结果Fig.6 Detection results of pulmonary nodules
图7 不同型态肺结节检测结果Fig.7 Detection results of different types of pulmonary nodules
由LUNA16 数据集提供的真实结节位置信息可得到真实结节与假阳性结节的预测概率对比。如图8 为本文所提算法在LUNA16数据集上,对部分疑似结节的检测效果。第一行为真结节,第二行为假阳性结节,矩形框代表检测到的肺结节位置,P表示预测概率。可以看出,所提算法对不同大小与不同种类的肺结节具有良好的检测效果,并且对于真结节可以达到较高的预测概率,同时也可以准确地检测出假阳性结节。
图8 疑似结节的检测结果Fig.8 Detection results of suspected nodules
针对现有结节检测网络对不同尺寸的肺结节的检测性能不足与存在大量假阳性的问题,提出了一种基于改进U 型残差网络的肺结节检测算法。该算法通过采取U-net网络的U型结构并利用残差学习方式构建深层次网络,同时融合自校正卷积与通道注意力机制,在增大信息提取能力编码多尺度特征信息的同时对特征进行重标定,使网络自适应学习特征权重,可以对不同大小与形态的肺结节图像具有更强的特征提取能力,有利于提高结节的检测精度;另外,引入DR loss 函数作为训练的分类损失函数,在减小数据集中样本分布不均带来的影响的同时,加强了对难样本的学习。本文在广泛认可的公共数据集LUNA16 上验证和评估所提出的算法,采取了消融实验,首先,验证了DR loss损失函数的性能;其次,对比了采用不同局部结构网络的影响。实验结果表明,CPM得分达到0.901,检测性能优于最新肺结节检测算法,在不同大小与不同种类的肺结节具有良好的检测效果并且可以准确区分假阳性结节,对肺结节自动筛查系统和临床肺结节辅助诊断系统的建立具有十分重要的作用。