蒲秋梅,田景龙,邢容畅,赵丽娜
(1.中央民族大学信息工程学院,北京 100081;2.中国科学院高能物理研究所多学科研究中心,北京 100049)
X光胸片(简称胸片)在临床上应用广泛,是目前肺炎诊断的常用方法,也是用于判断肺炎的重要标准.肺炎患者的胸片中会因毛细血管的扩张与充血而显示出更多的肺部纹理,表现出透亮的支气管影以及一些片状的白色斑点,严重者会出现磨玻璃影或肺部实变[1].医生能够通过胸片了解患者病情并制定治疗方案,人工阅片要求医生具有丰富的诊断经验,具有一定的主观性,容易发生误诊或漏诊,因此使用计算机进行自动读片诊断具有重要的意义.基于深度学习的X光胸片疾病检测很早就已有相关研究,2016年Hwang等[2]通过弱监督方法与迁移学习实现了X光胸片图像ROI区域的提取与分类.2017年Kumar等[3]提出了一种基于深度卷积神经网络(DCNN)的模型能够通过X光胸片对14种疾病进行分类.许多学者认为可以使用大量数据训练的深度学习模型准确检测出X光胸片中的各种异常,能够为全球放射学工作流程和公共健康筛查带来巨大的价值[4].2019年末新型冠状病毒感染疫情暴发后,越来越多的国内外研究人员投入到基于X光芯片的肺炎诊断研究中,Asnaoui等[5]通过实验对比了多种卷积神经网络模型,发现Resnet50[6]、MobileNet_V2[7]和Inception_Resnet_V2[8]的微调版本在X光胸片肺炎二分类任务中准确率超过96%,表现出非常令人满意的性能.肺炎二分类即通过X光胸片区分是否为肺炎阳性,复杂度相对较低.Rahman等[9]通过深度卷积神经网络与迁移学习实现了肺炎的三分类预测,即区分正常、病毒性肺炎与细菌性肺炎,准确率达到93.3%,三分类相较于二分类更加复杂,正常样本与肺炎样本在图像上具有明显区别,而病毒性肺炎与细菌性肺炎区别较小,因此对肺炎种类进行细分相对困难.肺炎四分类任务(正常、普通病毒性肺炎、新型冠状病毒感染、其他肺部感染)相较于三分类任务复杂度更高,但新型冠状病毒感染相较于其他肺炎具有更强的传染性,能够通过X光实现肺炎类别的准确检测不论是对疫情防控还是对于制定详细的治疗方案都具有重要意义,因此有必要对四分类X光肺炎检测进行深入研究.如何提升卷积网络对于不同类别肺炎的分类效果,在保持肺炎识别准确度的前提下提升肺炎种类的细分能力是本文关注与研究的重点.
传统的机器学习方法实现分类任务需要先通过人类的先验知识对原始数据进行预处理与特征提取,再对提取到的特征进行分类预测,因此特征提取的结果将直接影响最终的预测结果,甚至特征选取的好坏比采用的算法更为重要.卷积神经网络可自动提取数据特征而不需要人工干预,是目前图像分类任务最常用的架构,卷积神经网络由卷积层、池化层以及全连接层组成.一个卷积层中可包含多个卷积核用于提取图像特征,原始图像输入后经卷积层获得多个特征图,可通过调节卷积核的尺寸、填充宽度、卷积步长以及卷积核数量控制输出图像的尺寸与通道数.在卷积层后通常会使用池化层对图像进行下采样降低图像的分辨率,常用方法为最大池化与平均池化,池化层可有效降低数据维度,减少参数量与运算量,并在一定程度上防止过拟合.卷积层与池化层主要用于提取图像特征与降低数据维度,全连接层作为分类器主要用于对提取到的特征进行分类,通过组合卷积层、池化层以及全连接层可实现端到端的图像分类.
2014年Szegedy等[10]提出一种新的深度学习结构GoogLeNet,该网络由Inception模块堆叠而成,与早期的AlexNet[11]、VGG[1]等网络相比能够更加高效地利用计算资源,以相同的计算量提取到更多有效的特征从而提升训练效果,在ImageNet大规模视觉识别挑战赛ILSVRC-2014中获得分类与检测任务的冠军.Inception体系结构的主要特点是提高了网络内计算资源的利用率.
增加网络的深度能够使模型具有更强的非线性表达能力,从而能够表达更复杂的特征,因此适当加深网络能够在一定程度上提升模型性能,但因网络的加深引发的梯度消失或梯度爆炸等问题容易导致浅层网络参数更新困难.针对上述问题文献[12]提出深度残差网络ResNet,利用残差连接人为跳过网络中的某些层以减轻网络退化.残差连接结构能够在不增加过多计算量的前提下提升网络性能,且整合到其他网络模型中相对容易,目前已在众多领域得到广泛应用,如常惠等[13]使用改进的残差网络实现了铁路隧道裂缝检测.莫琦岚等[14]利用ResNet50神经网络模型检测新生儿肺炎,在验证集上分类准确率达到91.18%.
人类的视觉系统可选择加强重要的信息并忽略次要信息而免受干扰,卷积神经网络通过融合每层局部感受野内的空间与通道信息以构建信息特征,在卷积神经网络中引入注意力机制对输入的特征图添加权重能够加强重要的特征,从而提升网络性能,卷积神经网络中常用的注意力机制主要可分为通道注意力机制与空间注意力机制.2019年Hu等[15]提出Squeeze-and-Excitation Networks(SENet),通过Squeeze-and-Excitation(SE)模块显示了建模通道之间的相互依赖关系,使网络能够自适应地校准各通道的特征响应,以微小的计算成本极大地提升了网络性能,取得ILSVRC 2017分类竞赛的第一名.空间注意力模型的本质是一种自适应的空间区域选择机制,定位图像中包含重要信息的区域并对其进行变换或赋加权重,如Google DeepMind提出的Spatial Transformer Network(STN)[16]与Oktay等[17]提出的注意力门控单元(Attention Gate,AG),前者通过显式的过程学习对平移、旋转、缩放等不变性,后者专注于目标区域同时抑制无关区域的特征激活.
有许多研究尝试将两种注意力机制相结合,如GCNet[18]、CBAM[19]等,但存在计算量大、网络收敛困难等问题.2021年文献[20]在CNN中引入了一种轻量的注意力模块Shuffle Attention(SA模块),该模块将输入的特征图划分为多个组进行分组卷积以降低运算量,使用Shuffle单元将通道注意力与空间注意力集成到每一组中,并借鉴ShuffleNet[21]的通道混洗(Channel Shuffle)实现不同组间的信息交换.
AlexNet最早引入分组卷积,通过将卷积网络分布在两个GPU上并行运算以解决早期GPU内存资源不足的问题,每个GPU分配一半数量的卷积核进行卷积运算.网络多数层以同一个GPU上的特征图作为输入,仅有部分层同时输入两个GPU上的特征图进行运算实现组间的信息交流,而具体在何处整合两个GPU上的信息需要通过多次实验确定.常规卷积的卷积核维度与输入特征图维度相同,卷积核数量等于输出特征图通道数,分组卷积通常将特征图在通道维度上划分为g组,同时将卷积核也划分为g组,每个卷积核仅与所在组内的特征图进行运算.分组卷积可降低卷积核维度从而减少网络参数量,但同时会因组间的特征图相互隔离而导致网络缺乏组间信息交换,进而可能导致网络性能下降.ShuffleNet提出通道混洗机制打乱特征图通道顺序.如图1所示,使得再次进行分组时每个组中能够同时包含前一次分组卷积中不同组的特征图,从而实现组间的信息交流.
图1 分组卷积及通道混洗示意图
本文主要对基于Inception-v3网络的改进模型在X光胸片图像四分类任务上的性能进行了研究,总体流程如图2所示.由于Inception模块特殊的结构有利于整合不同感受野特征图的信息.本文选择了Inception-v3为主干网络,并针对不同类别肺炎之间差异较小难以区分的问题在主干网络的基础上引入了注意力机制模块用于增强关键信息,提升了模型性能.与原始模型相比在整合后的数据集上本文使用的改进方法具有更高的准确率与召回率.
图2 总体流程图
2.2.1 改进Inception模块与残差连接
最初的Inception模型也被称为GoogLeNet,引入Inception模块通过同时使用不同尺寸的卷积核以便更好地捕捉图像中不同尺寸物体的特征.Inception-v2在最初的Inception模型基础上进行了改进,采用了分支网络结构,先将特征图通过不同的分支进行处理后将输出在通道维度上进行拼接,此外还引入了Batch Normalize技术用于提升网络收敛速度.Inception-v3进行了进一步的改进,主要关注如何减小模型容量与计算成本,使用多层小尺寸的卷积核和非对称卷积替代大尺寸的卷积以达到减少参数量的效果,并在网络中引入了辅助分类器计算梯度帮助更新浅层网络的参数,进一步提升网络性能.此外还有如Inception-v4、Inception-ResNet等改进模型[22]对Inception的基本模块的结构进行了改进,如修改卷积核尺寸、添加残差结构等.
Inception模块中采用了不同大小的卷积核使得同一层的特征图具有不同大小的感受野,通过拼接可实现不同尺度特征的融合.Inception-v3网络中共使用了3种不同的Inception模块,如图3所示.通过修改Inception模块中的卷积核尺寸与数量能够得到更多的改进结构以适应不同的任务需求,本文在网络中共使用了5种不同结构的Inception模块,如图4所示.其中图4c和4e两种结构分别与图3b和3c相同,其他3种结构为Inception-v4中的部分组件,与原Inception模块结构相似,也采用了非对称卷积进行卷积核分解以减少参数量,本文使用这5种Inception模块搭建与torchvision提供的Inception-v3网络相同的结构作为主干网络以便使用预训练参数以提升性能.
图3 3种不同的Inception模块
图4 5种改进Inception模块
随着网络加深浅层模型容易出现梯度消失与梯度爆炸问题使得网络浅层的参数难以更新,导致模型过拟合,针对这个问题改进的模型在Inception模块的基础上引入了残差连接结构,改进后的残差模块Residual Block结构如图5所示.在Inception模块的基础上添加一条支路使用尺寸为1×1的卷积核对输入特征图进行处理,使通道数与原始Inception模块的输出结果通道数一致后相加作为最终输出.与Inception-v3类似,Residual Block也具有5种不同的结构,通过将模块中Inception部分替换为图3中不同的结构得到.
图5 引入残差连接的Inception模块
2.2.2 SA模块
图6 SA模块
(1)
(2)
(3)
2.2.3 改进模型
使用带残差连接结构的Residual Block模块替换主干网络Inception-v3中的Inception模块,并在每个Residual Block模块后添加SA模块用于加强特征图中的关键信息,改进后的总体网络结构如表1所示.网络浅层使用普通卷积层用于提取图像的基本特征,深层使用Residual Block与AS模块处理高级语义信息,最终使用全连接层作为分类器输出分类结果.
表1 改进的模型结构
交叉熵损失函数(Cross Entropy Loss)由KL散度导出,可以衡量分布之间的不相似程度,是分类任务常用的损失函数,其计算公式为
(4)
本实验在Windows10操作系统上使用Python编程语言进行相关实验,实验基于PyTorch深度学习框架搭建网络结构,硬件配置:6核Xeon Gold 6142、1块 RTX 3080,10.5 GB显存.
使用Kaggle公开数据集进行实验,训练集、验证集与测试集按8∶1∶1的比例进行随机划分,实验通过设置随机种子数确保每次实验数据集各类别样本数量比例相同,控制单一变量对改进算法进行消融实验并对比分析实验结果.实验数据设定输入图片尺寸为299×299像素,并通过随机水平翻转与小幅度随机旋转(±20°)进行数据增强,模型采用Adam优化器,初始学习率设置为0.001,批量大小设定为50,迭代次数为50次,训练过程中使用早停止策略并动态调整学习率,每轮训练完成后使用验证集进行验证,若验证集损失连续3轮不下降则将学习率降低为原来的10%,若超过10轮验证集损失不下降则停止训练.
3.2.1 数据获取及处理
本文所用于实验与分析的肺炎四分类数据均来自于Kaggle,由公开数据集COVID-19 Radiography Database[23]与CoronaHack-Chest X-Ray-Dataset[24]构成.COVID-19 Radiography Database数据集包含10 192份正常样本、1 345份病毒感染样本、3 616份新型冠状病毒感染样本以及6 012份其他肺部感染样本.CoronaHack-Chest X-Ray-Dataset数据集包含正常样本1 576份,感染样本4 334份,其中感染样本根据感染类型可细分为普通病毒性感染1 497份,新冠病毒感染58份以及其他类型感染2 779份.新型冠状病毒感染也属于病毒性肺炎,但数据集中新冠感染与其他病毒感染样本比例不均衡,考虑到数据不均衡可能对实验效果产生影响,本文将两个数据集的数据相结合以减少这两类样本数量的差距,如表2所示.
表2 本文所用数据集 份
3.2.2 评价指标
为定量分析各模型的性能,本文主要对于各类别分类结果的准确率(A)与召回率(P)进行了对比.A为
(5)
其中:TTP表示真阳性样本数,TFP表示假阳性样本数,A计算值越接近1表示分类效果越好.
R为实际为真的样本中被预测正确的样本数所占的比例,能够反映漏检比例,该值越接近1表明漏检的样本越少性能越好,计算公式为
(6)
其中:TTP表示真阳性样本数,TFP表示假阴性样本数.
F1计算公式如式7所示,为A与R两个指标的调和平均,能够综合考虑两个评价指标,对于多分类问题Macro-F1度量为F1的推广,即各类别F1的平均数,公式为
(7)
3.2.3 实验结果分析
使用原始Inception-v3网络作为Baseline与改进网络进行对比测试并设计了消融实验以验证改进网络的有效性,在基线网络的基础上使用了预训练模型参数,添加残差连接、SA模块进行实验,表3—5所示为消融实验各项指标,消融实验各阶段测试集混淆矩阵如图7所示.混淆矩阵对角线上元素即为各类别预测正确的样本数,并使用颜色深浅表示数量大小,预测正确样本越多对角线颜色越深.从图7中可以看出基于Inception-v3网络的各模型混淆矩阵都集中于对角线上,因此大部分样本都能被准确分类,但改进模型相比原始网络有更多的预测正确样本,表明改进后各类别的识别精度均有所提升.从实验结果表3与4中可知,使用预训练模型参数与SA注意力模块后的模型总体上准确率最高,相比Baseline准确率从90.31%提升至94.64%,对于病毒性肺炎Baseline+预训练参数准确率最高,但召回率较低,表明该模型虽然能够正确区分病毒性肺炎与其他肺炎,但容易产生漏诊病例,而在使用预训练模型参数并同时引入残差连接与SA模块后各类别的召回率均得到不同程度的提升,尤其对于肺炎类别的细分(包含病毒性肺炎、新型冠状病毒感染以及其他类别肺部感染)提升明显,召回率分别提升了7.20%,2.48%与6.25%,且与不引入SA模块的其他改进方法(如使用预训练与残差连接)相比各类别的召回率也更高,发生漏诊的概率较低.综合考虑模型对于各类别的准确率与召回率对比见表5.由表5可知,添加SA模块后的模型各类别的F1指标均高于不添加该模块的模型,因此使用SA模块的改进模型对于肺炎四分类任务的总体效果更优.上述实验结果表明在网络中同时引入通道注意力与空间注意力机制后有助于更好地捕获不同类别肺炎之间的细微差异,提升了分类精度.
表3 不同模型肺炎识别准确率的对比 %
表4 不同模型肺炎识别召回率的对比 %
表5 不同模型肺炎识别F1的对比
图7 各模型测试集混淆矩阵
为进一步验证改进方法的有效性以及探究注意力机制发挥的具体作用,使用梯度加权类激活映射技术(Grad-CAM)[25]可视化了模型网络在学习过程中重点关注的区域,如图8所示.
第一列为X光胸片原图像,第二至六列为本文实验所用网络的可视化结果,图8中颜色偏红区域即网络较为关注的区域,可以看出不论是否使用预训练参数,在不使用SA模块的情况下Baseline网络的关注区域都相对分散,无法聚焦于肺部区域,而使用SA模块的网络关注区域更加集中聚焦于肺部患病区域,因此在网络中添加注意力机制后有利于提高网络对病灶区域细节特征的提取能力,从而更有效地学习病灶区域特征,提高对不同类别肺炎识别的准确性,消融实验的各项指标也证明了该改进方法的有效性.
本文针对X光胸片肺炎诊断问题尝试在Inception-v3网络中同时引入通道注意力机制与空间注意力机制进行改进以提升肺炎诊断的准确率.改进方法在Inception-v3主干网络的卷积层中添加SA-Net模块对网络中提取到的特征图进行处理,引导网络聚焦于胸片中的病灶位置以便更好地区分不同类别肺炎胸片之间的细微差异,同时主干网络Inception模块使用不同尺寸的卷积核获取具有不同感受野大小的特征图,有利于整合局部与全局信息,提升网络分类性能.经实验测试,引入注意力机制的改进方法对于不同类别的肺炎诊断具有更好的效果.