魏榕剑,邵剑飞
(昆明理工大学,云南 昆明 650031)
肺炎是一种由细菌、病毒及真菌引起的肺部疾病,可以引起肺部感染[1],病情严重时甚至可能导致病人死亡[2]。肺炎可以通过放射检查来检测,如常规放射检查、CT或MRI,医生会通过检查病人的胸部X光片来诊断肺炎[3]。在发展中国家,肺炎的死亡率特别高。及时发现肺炎、为肺炎患者提供治疗,对于肺炎的治疗和降低死亡率意义重大。全胸部X光是目前提供肺炎正确诊断和检测的最佳方法[4]。要诊断并发现肺炎,需要仔细检查胸部X光图像,这要求放射科医生或专家具有丰富经验和专业知识,使得肺炎的检测过程成为一项具有挑战性的任务[5]。对于发展中国家的偏远地域,医疗资源分布不均匀,诊断肺炎对于基层医疗机构来说非常困难。针对这一问题,计算机辅助诊断可以帮助医生快速完成肺炎诊断,具有重要的实际意义。
近年来,随着深度学习和神经网络的不断发展,深度学习和卷积神经网络(Convolutional Neural Networks,CNN)被广泛应用于医学影像领域,在有影像数据集的领域的研究不断加深。Rajpurkar等人[6]提出一个基于ChestX-Ray14训练的121层卷积神经网络CheXNet算法,并用4位职业的学术放射科医师标注的测试集进行测试,可检测14种疾病,该模型在F1指标上的诊断达到了职业放射科医生的平均水平,但对于肺炎,其检测精度达到92.52%,还有待提升。Khoiriyah等人[7]提出了一种基于CNN结构的模型,采用不同的深度卷积神经网络结构和增强策略来对胸部X线图像中的肺炎检测进行分类,使用3个卷积层和3个分类层(完全连接),通过调整大小、翻转及旋转以避免过拟合,运用增强策略进行精度值提升,没有增强策略的精度值为80.25%,增强策略的精度值为83.38%,而且该CNN结构体系可以训练小数据集,但是其训练精度值不高。Harsh Sharma等人[5]提出不同的深度卷积神经网络,从胸部X射线图像中提取特征的架构对图像进行分类以检测人是否患有肺炎。Abhishek Gawali等人[8]提出了一种用于胸部X光检查的深度学习方法,该方法有3个卷积层,每层有32个神经元,有3个不同的通道(3*3),并通过对图像进行基于不同参数的变换提高精度,但是该模型准确率仅为88.68%。
针对胸部X光图像的特征,本文在DenseNet深度模型的基础上,提出一种改进的DenseNet模型算法。该算法继承DenseNet将图像不同层次特征融合进行分类的优点,在全连接层加入中心损失(Center loss),使得X光图像同类特征具有较高的聚合度,并且在最后输出部分将原DenseNet模型中的交叉熵损失函数替换为Focal loss,增强网络对X光肺炎影像病灶的学习能力,提升肺炎分类的准确率。
DenseNet(密集卷积网络)是一种密集连接的卷积神经网络,是于2017年提出的最优深度模型,融合了深度残差网络(ResNet)与Inception网络的优点。深度残差网络通过加深网络层数提升网络性能,Iiception网络通过加宽网络结构提升网络性能,DenseNet网络直接从最优特征的角度出发,设置特征复用和旁路连接,达到增强检测精度和降低网络参数的目的[9]。DenseNet网络的特点是,网络的任意两层之间是直接连接的,后面每一层网络的输入都是它前面所有层的输出的并集,任意一层所学习的特征图同样会被直接传给该层后面的所有层作为输入;其核心思想是利用特征重用来达到优化模型的目的,密集操作依靠Dense Block(密集连接块)实现,多个Dense Block串联便构成整个网络架构。
一个完整的DenseNet网络如图1所示。可以看到,多个Dense Block之间没有密集连接,采用了建立过渡层的模式。通常过渡层由BN+Conv(1×1)→Pooling(2×2)构成,BN层也可以不要。本文提出的改进的肺炎X光分类算法正是在DenseNet模型基础上进行展开。
图1 DenseNet模型
在传统的卷积神经网络模型中,如果模型层数为L,则其总连接数为L;而在DenseNet模型中,层数为L的模型,其总连接数Ld满足:
DenseNet模型中,层与层之间的数据传递关系满足:
式中:xl表示l层的输入;Hl表示BN、Relu及Conv操作;[x0,x1,…,xl-1]表示通道合并,即将前l-1层的输出特征图进行矩阵上的连接。
DenseNet模型的优良性能主要依靠密集连接过程中对特征的充分利用。然而,经典的DenseNet模型在应用于肺炎X光片肺炎分类任务中时,相比卷积神经网络的其他模型,分类精度有一定的提高,但仍然无法令人满意。因此,本文提出了改进的基于DenseNet网络的肺炎X光片分类算法。
在DenseNet网络模型的单元结构中,1×1卷积不完全考虑图像中某个像素点像素与该像素周边像素的空间关系,而是依赖像素点坐标位置的线性变换。因此,通常在DenseNet网络模型中都会添加非线性的激活响应函数。Softmax损失函数是传统深度学习网络常用的损失函数,进行空间特征的映射操作。本文提出全连接层加入中心损失(Centerloss),在最后输出部分将交叉熵损失函数替换为Focal-loss。
Softmax损失函数为:
式中:xl表示第l个深度特征,属于第yl类;Wj表示全连接层中权重W的第j列;b表示偏置项;mm表示小批量大小。
品牌离不开渠道的拓展,陈伟表示,邦力达·两河源果业专业合作社在果品销售的传统渠道和电商渠道同时发力,目前已建立起京东旗舰店、微信商城等平台,并对接全国各大主要农产品交易市场,同时还吸引了众多外地果商进行实地采购。2017年,合作社内帮助社员销售猕猴桃、柑橘等水果500多万斤。通过在种植管理、农资投入、品牌打造到水果购销等环节的全产业链运营模式,社员依托合作社的农资和服务种出好果,合作社为社员的好果赋予品牌,实现了农户、合作社、农资企业、水果消费市场等多方的融通共赢。
Center loss函数为:
式中:cyl表示第yl类深度特征的类中心。
本文采用Softmax loss与Center loss相结合的函数去训练,表达式为:
DenseNet网络在输出部分使用的都是Softmax函数与交叉墒损失(Cross Entropy loss)相结合的方式。Loss函数为:
式中:x表示特征值;i与j表示类别编号。由于肺炎X光胸片数据集存在不平衡,为了提高最终肺炎X光片分类的准确性,本文在最后输出部分引入Focal函数进行不平衡校正,Focal函数为:
式中:Pt是特征值属于某一类的概率;γ是调节变化幅度的参数。在模型中引入Focal loss函数后,损失函数为:
本文实验数据集来源于kaggle。该数据集包含两个类(肺炎、正常)共5 860张X光胸片图像。其中,训练集包含3 876张肺炎X光胸片和1 342张正常X光片。测试集包含390张肺炎X光胸片和234张正常X光片。正常肺部X光片如图2所示,肺炎肺部X光片如图3所示。
图2 正常肺部X光片示例
图3 肺炎肺部X光片示例
本文利用肺炎胸部X光片数据集进行肺炎X光片分类的准确率研究。样本集中,训练集占89%,验证集占11%。准确占比如表1所示。
表1 数据集分布
验证集和训练集的X光胸片数量比例约为1∶10,为满足模型需求,采用拉伸缩放的方式,将所有X光胸片的大小调整为320×320。
本文在实验数据集上进行实验,实验参数包含Accuracy(训练精度)、Val_Accuracy(验证精度)、Loss(训练损失)及Val_Loss(验证损失)。实验精度曲线如图4所示。实验损失函数曲线如图5所示。
图4 精度曲线
图5 损失函数曲线
实验结果显示,在训练的10个epochs内,其训练精度在开始的6个epochs内不断提升,达到一定训练精度后便开始波动,从验证精度曲线来看,由于验证数据集的不平衡性,验证精度低于训练精度且不断波动。从训练损失函数曲线来看,训练损失在训练epochsn内损失不断降低,但验证损失偏高且不断波动,这是验证数据集数据量少且数据不平衡造成的。
本文将改进的DenseNet-121网络与DenseNet-121层卷积神经网络进行对比,DenseNet-121网络在肺炎分类任务中其训练分类精度达到91.22%,测试精度为89.58%;本文提出的基于改进的DenseNet-121网络的肺炎分类算法模型,其最高分类精度达到94.52%,测试精度90.46%。
针对肺部X光胸片影像的特点,本文提出了基于DenseNet网络改进的肺炎X光片分类算法模型,在kaggle提供的Chest-X-Ray数据集上进行训练和测试,最终将胸部X光肺炎分类精确度提升至94.52%。然而改进的DenseNet网络参数依然庞大,训练非常耗时。在未来的研究中,进一步提升肺炎X光分类精度,提出科学合理的剪枝策略降低训练时效,可作为未来的研究方向。