李坚强,王 成,黄志超,陈 杰
(深圳大学计算机与软件学院,广东深圳 518060)
2019 年12 月以来,新型冠状病毒肺炎(Corona Virus Disease 2019,COVID-19)陆续在世界各地爆发.由于该病毒具有较强的传染性,医护人员必须身穿多层防护服,这给医护人员的肺音听诊工作带来较大的困难.因此,如果肺音能在采集之后,传递给后台进行智能化的分析,辅助医疗人员的诊断,就可以有效的减少医患接触频次,降低医护人员感染风险.
预计到2050 年,中国60 岁以上老年人口将达到4.98亿[1],随着年龄的增长,肺纤维化、慢性阻塞性肺疾病的发病率也逐步上升,这意味着我国患肺部疾病的老年人的护理问题日趋严峻.近年来,我国患有呼吸系统疾病的人数在逐渐递增,呼吸系统疾病成为我国人口主要的死因之一[2].
呼吸音是衡量肺部生理及病理的一项重要指标,其特征和诊断是肺病理学的重要组成部分.呼吸系统听诊已被证实是鉴别和观察不同类型肺部疾病的重要诊断手段,可以有效地发现肺部疾病,并且对于不同年龄或者发病程度存在差异的患者都能得到很好的应用[3].
使用听诊器人工听诊的传统方式可能由于医生的经验不足或人耳对肺音低频段敏感性低等因素,导致诊断结果不够准确.在诊断一些异常的患者时,肺音的平稳性降低,也会使得医生的诊断变得更加困难[4].听诊通常需要在安静的环境中进行,最好是病人处于静止状态,这样的环境要求也就限制了听诊的时间和灵活性.此外,由于呼吸系统症状可能发生在居家环境、公共场所,甚至夜间,这种由医护人员才能进行听诊的方法无法得到普遍的使用.
与主观听诊相比,对肺音的计算机分析可以进行可重复的肺音量化[5].随着计算机技术在各个领域的发展与应用[6-7],通过计算机技术分析肺音也受到了众多研究者的关注,已有很多学者专注于研究肺音分析和检测中的机器学习技术.机器学习算法应用于肺音诊断上,使得听诊工具的准确率得到很大的提升.研究者们提出了很多基于计算机肺部声音分析的机器学习算法,如人工神经网络、隐马尔科夫模型、K近邻算法、高斯混合模型、遗传算法和模糊逻辑等[8-10].
由于肺部声音信号不稳定,因此常规的频率分析方法在诊断分类中效果欠佳,学者提出一种使用小波变换分析肺部声音信号以及使用人工神经网络进行分类的方法[9],但是这种方法需要人工标记肺音的周期.异常肺音本身是一种非周期信号,其可能不会在整个记录中出现,Datta等人开发一种自动肺音分析仪,该工具在不需要额外的流量信号或标记呼吸周期的情况下,就能识别新的时频域肺部声音特征[11],但是这种方法主要是区分正常肺音和异常肺音,如果用于肺音的细类区分,仍存在一定的局限性.听诊时可能出现各种各样的不确定音和噪声干扰肺音诊断,Yamashita等人基于隐马尔科夫模型提出“异常呼吸置信度”检测的两步分类方法[10],但是该工作也只是关注单一类型的肺音;并且,如果通过少量的患者来简化问题,从小数据集学习到的特征并不具有泛化性,为此,Chamberlain等人利用深度神经网络,将半监督深度学习应用于自动识别肺部声音[12].减少评估呼吸音时固有的主观性,能够提高呼吸音分辨的准确率,Aykanat等人使用支持向量机和卷积神经网络(convolutional neural network,CNN),开发了一种性价比高、使用方便的电子听诊器,该电子听诊器能够通过一种非侵入性的方法对录音软件中所记录的呼吸声音进行分类[13].
然而,现有的很多工作主要聚焦在异常呼吸音的分类上,如区分喘鸣音(wheeze)或者破裂音(crackle)[14],直接利用肺音对肺疾病进行分类的研究较少.文献[15]使用CNN对肺疾病进行分类,但是复杂的模型不利于实时性的决策[16],除此之外,由于医疗数据存在隐私保护问题,其也无法胜任多方数据不共享的场景.
本文为了解决上述的这些问题,受文献[17]的启发,提出集成知识蒸馏的肺疾病分类模型.该模型利用分布在各个单位的本地数据建立二分类的教师模型进行肺疾病的异常检测,通过多教师知识蒸馏模型,指导多分类学生模型学习,从而充分利用隐私受保护的多方肺音数据.同时,知识蒸馏兼顾学生模型规模与预测准确性,可以有效精简多分类学生模型,从而提高肺疾病分类的实时性.
本文提出集成知识蒸馏的肺疾病分类方法,其蒸馏架构图如图1所示.该模型假设不同医院间的模型相互独立,并且可利用医院本地数据集训练二分类(正常与某类肺疾病)模型作为教师模型.
图1 集成蒸馏模型Fig.1 Ensemble knowledge distillation model
对于M种疾病,本文将蒸馏架构中的多个教师模型定义为Ti,i ∈{1,···,M},而医疗研究基础较为落后的单位在拥有少量的本地数据条件下,可通过蒸馏多个二分类教师模型的知识,训练精简的多分类学生模型S,这样学生模型S不仅能从输入的数据中学习,也能向教师模型学习.肺疾病分类任务是提取肺音音频中的特征,建立特征与肺疾病之间的联系,而由此对不同的肺疾病进行分类.如图2所示,该模型将肺疾病分类任务分为音频数据增强,提取梅尔频谱(Mel-spectrogram)特征,数据归一化,建立教师模型,建立学生模型与知识蒸馏.
图2 集成知识蒸馏流程Fig.2 Flow chart of ensemble knowledge distillation
由于医院之间数据互不共享的限制,无法直接的集中分析这些本地数据,因此,由不同的教师模型学习不同来源的数据集.对于第i种肺疾病,本文利用教师模型Ti学习该疾病的本地数据XTi,XTi数据对应的标签定义为Y Ti.而由学生模型S,学习数据集XS,XS对应的标签为YS,并且利用知识蒸馏技术将教师模型的知识集中到学生模型上,这也就间接地利用了各个医院的数据资源.
适当的数据增强有利于提高模型的性能.原始数据进行增强后能够生成更多的数据,提高模型的泛化能力和鲁棒性.下面将介绍本文的3种数据增强的方法:时间变换、音高变换和µ律(µ−law)压缩.
时间变换旨在通过改变参数因子而影响音频的采样速率.而音高变换就是以半音为单位,对音频的音调进行调整.在本文中,时间变换和音高变换使用和文献[15]同样的变换参数,时间变换4个取值分别为0.5,0.7,1.2,1.5;音高变换4个取值分别为−2,−1,1,2.
µ律压缩是一种动态范围压缩算法[18],对于输入的信号s,−1 ≤s≤1,其计算µ律压缩如式(1)所示:
其中:sgn表示符号函数;abs(s)表示取信号s的绝对值;µ为压缩参数,一般取值为2的幂减1.本文数据增强中µ有4个取值:7,15,31,63.
本文将采集到的肺音音频分成音频片段,然后分别提取音频片段中的梅尔频谱特征,梅尔频谱是一种比较典型的特征表示,也被应用在其他音频分类任务中[19-20].图3为从6类肺音音频中提取特征得到的梅尔频谱图,这6 类肺音分别为慢性阻塞性肺疾病(Chronic Obstructive Pulmonary Disease,COPD)、健康(Healthy)、上呼吸道感染(Upper Respiratory Tract Infection,URTI)、支气管扩张(Bronchiectasis)、肺炎(Pneumonia)、细支气管炎(Bronchiolitis).
图3 梅尔频谱特征提取Fig.3 Mel-spectrogram feature extraction
对肺音音频的分析问题,通过提取音频的梅尔频谱之后,转换为类似图片分类问题,本文希望评估不同归一化的方法,找到更加适合处理肺音音频数据的方法,提高模型的分类性能.在数据的归一化上,除了评估文献[15]中提到的3种归一化方法:均方根归一化(root mean square normalization)、峰值归一化(peak normalization)和EBU Standard R128 归一化(European broadcasting union,EBU),还评估了零均值归一化(zero mean normalization).
这里使用的均方根归一化方法是以音频信号振幅的均方根(root mean square,RMS)为参考值,然后对音频进行缩放,该方式可以比较好的衡量出信号振幅的强度.均方根归一化的方式如式(2)所示:
其中:|s|表示信号长度,srms表示信号进行RMS归一化后的结果.
峰值归一化即是以信号s中振幅绝对值最大的为参考值,然后将其他所有的振幅值按照该参考值进行缩放.峰值归一化计算如式(3)所示:
其中speak表示信号s进行峰值归一化后的结果.
EBU Standard R128 归一化,以下简称EBU R128归一化,该方法是依据欧洲广播联盟提出的一个音频响度标准对音频进行处理.EBU Standard R128规定音频的响度水平为23 LUFS,LUFS(loudness units referenced to full scale)是一种衡量响度的单位.
零均值归一化是音频和图像处理任务中比较常用的归一化方法[21].对于信号s,零均值归一化就是减去信号振幅的均值之后,再除以振幅的标准差,如式(4)所示:
其中:s¯表示振幅的均值,σ表示振幅的标准差.
本文的教师模型使用的是一个CNN模型,模型共有6层l1,···,l6,第l1层是有24个滤波器的卷积层,卷积核大小为(5,5),步幅为(4,2).第l2层同样是卷积层,包含48个滤波器,卷积核大小、步幅与l1相同.第l3层是一个最大池化层,其pool size为(2,2).第l4层卷积层的滤波器数量和卷积核大小与l2相同.第l5层全连接层有64个隐藏单元,最后一层为输出层.
在训练教师模型的过程中,从音频片段提取得到的梅尔频谱特征数据的维度将被重塑,以匹配模型的输入维度.每个教师模型分别对应一种肺疾病,拟合来自不同医院的数据,训练目标为最小化教师模型的预测结果和真实标签之间的交叉熵(cross-entropy)损失,对于教师模型Ti,定义其损失函数如式(5)所示:
来自多方互不共享的数据,是无法像文献[22]的工作那样直接将教师-学生模型同时训练,在训练的过程中传递知识.对于每一个训练好的教师模型而言,其已经学习了某一类疾病的数据特征,如果把学生模型遇到的问题,先交由教师模型解答,然后让学生模型在有参考的前提下进行训练,同样可以学习到教师模型的现有知识.
对于数据集XS中的一个数据点,通过训练好的教师模型Ti计算其软标签时,使用文献[23]中的定义,如式(6)所示:
学生模型是在教师模型的基础上进行简化的一个模型,模型共有6层l1,···,l6,第l1层是有6个滤波器的卷积层,卷积核大小为(5,5),步幅为(4,2).第l2层同样是卷积层,包含18个滤波器,卷积核大小、步幅与l1相同.第l3层是一个最大池化层,其pool size为(2,2).第l4卷积层有24个滤波器,卷积核大小与l2相同.第l5层全连接层有32个隐藏单元,然后连接输出层.
学生模型的软标签计算与教师模型类似,区别在于学生模型需要考虑M+1个类别,如式(8)所示:
其中:gj(·)表示学生模型对应类别j ∈{0,···,M}时logits层的输出,0表示健康类别.
除此之外,学生模型的学习目标和教师模型也不同,学生模型有两个学习目标,一方面需要使得输出的预测尽量接近真实标签,另外一方面需要使得自身的软标签接近教师模型的软标签.与真实标签相比,软标签具有更为丰富的信息,其包含样本中类与类之间的关联,这些关联由复杂的教师模型学习得到.学生模型由于自身结构比较简单,对样本的学习能力比教师模型弱,但如果在训练过程中,让学生模型拟合教师模型学习到的关联信息,能够对自身的学习起到辅助作用.然而,教师模型也是存在一定的出错概率,与仅向教师模型学习相比,添加真实标签可以减少学生模型学习错误知识的可能性.另外,模型最后的输出相比软标签更为离散,各个类别之间的关联性不强,因而本文让学生模型的软标签接近教师模型的软标签,而不是让学生模型的输出接近教师模型的软标签.学生模型的损失如式(9)所示:
这里的|XS|表示XS中元素数量,fS表示S的预测函数,λ ∈[0,1]是一个常数,用于学生模型选择侧重真实标签,还是侧重软标签.
本文实验分为两个部分:第1部分为归一化方法评估实验,用于验证不同的数据归一化方法,对肺音音频数据的梅尔频谱特征的作用效果;第2部分为集成知识蒸馏评估实验,验证精简的学生模型在集成多个性能优异的教师模型的知识后,对其性能的提升作用.
实验数据集使用的是文献[24]的公开数据集,该数据集包含8 类音频:COPD,Healthy,URTI,Bronchiectasis Pneumonia,Bronchiolitis,Asthma 和Lower Respiratory Tract Infection (LRTI),其 中Asthma 与LRTI这两类数据量很小,不具有统计意义和实验价值,因此只选用了其他6种类型的音频用于实验.这6类肺音原有音频文件共917 个,每个音频文件采集时长为20 s,在对其中的5 种类型按照本文阐述的数据增强方式进行增强之后得到音频文件2653个,每种类型的音频数量如表1所示.
表1 原始数据量和增强后数据量Table 1 Original and augmented data size
实验中将没有进行数据增强的原始数据随机打乱,并分成70%的训练数据Train1和30%的测试数据Test.而进行过增强的数据Train2与Train1共同作为数据增强后的训练数据.实验中,梅尔频谱特征的抽取基于一个开源的python包librosa[25]实现,抽取出来的特征矩阵将被重塑为模型的输入维度(128,128,1).
该实验使用的模型是将教师模型结构用于多分类问题上.模型训练使用单个Tesla P100 GPU,批处理大小设置为128,epoch 设置为20.该实验对比了原始数据(original)、进行数据增强(augmentated)、数据增强并且使用峰值归一化处理(augmentated peak)、数据增强并使用均方根归一化处理(augmentated RMS)、数据增强并使用EBU R128归一化处理(augmentated EBU)、数据增强并使用零均值归一化处理(augmentated Zmean)这6组实验.表2为对比实验的结果,使用的评估指标有准确率(accuracy,表中Acc)、精确率(precision,表中Pre)、召回率(recall,表中Rec)、F1分数(F1-score,表中F1).
表2 归一化方法评估实验Table 2 Evaluation experiment of normalization method
据表2所示,通过对原始数据进行零均值归一化处理之后,模型的准确率、精确率、召回率、F1分数均达到了98%,这说明该归一化方式比其他3种方法更加适合处理肺音音频的梅尔频谱特征数据,对模型性能的提高作用比较明显.在使用Peak归一化和RMS归一化对数据进行处理之后,各个评价指标有所下降,而使用EBU R128归一化方法进行处理也没有明显的提升效果.另外,从分类原始数据和分类增强后的数据来看,通过对原始数据进行适当的数据增强能够较好的提高模型的性能.
该实验从Train1+Train2中随机抽取第i类疾病数据和健康数据的70%作为XTi,剩下30%的数据作为XS,数据均使用零均值归一化处理,批处理大小为128.
表3 为5 个二分类教师模型在测试集Test 上的评估结果,T1至T5依次表示对应疾病Bronchiectasis,Bronchiolitis,COPD,Pneumonia,URTI 的教师模型.该实验结果显示,每个二分类教师模型在各个评价指标上均达到99%(或99%以上),表现优异.
表3 教师模型实验结果Table 3 Evaluation experiment of teacher model
而在训练学生模型时,对于参数的选择,本文使用网格搜索[26]的方法,设置epoch 的搜索范围为{25,50,75,100},温度参数t的搜索范围为{2.0,5.0,7.0,10.0},λ的搜索范围为{0.1,0.3,0.5,0.7,0.9},该算法会将所有参数的组合逐一枚举验证,得出最佳参数.依据网格搜索的结果,实验将epoch设置为50,t设置为2.0,λ设置为0.5.在模型的对比上,除了测试本文的几个模型外,还对比了最近的几个轻量化的模型:Shufflenet−v2[27],Mobilenet-v3-large 和Mobilenet−v3-small[28],这几个模型都是专门为小型设备设计的高效神经网络模型.
表4为集成知识蒸馏的实验结果,其中:评价指标“Par”表示参数量(parameters),数量级为106;“t”表示模型预测时耗,单位为s;Net1为Shufflenet-v2模型;Net2为Mobilenet-v3-large模型;Net3为Mobilenet-v3-small模型;T-Mul为零均值评估实验中的多分类模型;S-No为没有进行知识蒸馏,只使用真实标签训练的多分类学生模型;S-Dis为本文进行蒸馏的学生模型,同样在准确率、精确率、召回率、F1分数4个指标上对各个模型进行了评估.相比模型T-Mul,学生模型S-Dis 在各项指标上仅差0.03,0.02,0.03,0.03,而模型S-No在各指标上比模型T-Mul均差8%.该实验结果表明,将性能好的教师模型的知识集成到精简的学生模型上,能够在一定程度上提高学生模型的分类能力.
表4 集成知识蒸馏实验结果Table 4 Ensemble knowledge distillation experiment
为了更加全面的评估精简后的学生模型,本文还测试了模型的预测速度.实验中使用CPU单核处理,对比了各个模型在同等条件下预测8000条数据的时耗.经简化之后,学生模型S-Dis的参数仅有0.06 M,比模型T-Mul的参数减少了79%,时耗为2.48 s,比模型T-Mul节省了20%时间.虽然Net 1,Net 2和Net 3在准确率上和S-Dis 相近,但是S-Dis 的参数量,仅有Net 1和Net 2的1%、Net 3的3%.进行相同的预测,SDis的时耗仅有Net 1的3%、Net 2的2%、Net 3的6%.
学生模型S-Dis虽然在准确率、精确率、召回率、F1分数4个指标上比模型T-Mul略差一点,但是其模型更加精简,分类预测的速度有着显著的提升,这也更加符合肺疾病实时性检测的需求.
本文提出集成知识蒸馏的肺疾病分类算法,在现有文献对肺疾病进行简单分类的基础上,评估了零均值归一化方法在处理肺音数据上表现.同时,通过多个教师模型学习多方数据,在保护医疗数据隐私的前提下,间接融合了多方数据的知识,由教师模型集成到学生模型上,有效的提高了学生模型的准确率,解决了小数据集带来的泛化问题.而蒸馏得到的学生模型是一个比教师模型更为精简的模型,参数量减少了79%,预测速度比教师模型提升了20%,能够更快的对肺疾病做出分析,其预测准确率达95%,在基本接近教师模型准确率的前提下,能更好的满足实际场景中实时诊断的需求.