胡清礼 胡建强 余小燕 刘 洋
1(厦门理工学院计算机与信息工程学院 福建 厦门 361024) 2(上海工程技术大学电子电气工程学院 上海 201620)
心音听诊是医生对心脏疾病进行初步诊断的重要手段。心音包含心脏活动的丰富信息,能够反映心脏的健康水平。由于心音信号复杂且微弱,容易受到噪声污染,因此通常需要医生具有丰富的听诊经验,而长时间的听诊,容易导致医生的听觉疲劳,产生错误的判断。近年来,研究者开始采用机器学习对心音进行自动分类,更有利于早期发现心脏疾病并有效干预。
心音自动分类的基本流程包括去噪、分割、特征提取和分类识别。其中,特征提取和分类识别是影响心音准确分类的最重要的环节,因而受到学术界广泛关注。文献[1]从心音信号中提取124个时频特征,直接输入Adaboost进行分类,并提取心动周期的4个频带训练卷积神经网络CNN(Convolutional Neural Network),使用阈值判决两个分类器的输出结果作为最终的分类结果。文献[2]采用动态时间规整DTW(Dynamic Time Warping)提取特征并结合梅尔频率谱系数MFCC(Mel-Frequency Cepstral Coefficients)输入到线性支持向量机实现分类。文献[3]提取时域的MFCC并组织成二维特征,基于CNN实现心音分类。文献[4]采用傅里叶变换提取心音的频域特征,使用小波函数作为激活函数构建CNN分类模型。文献[5]从原始心音数据中提取声谱图,并作为改进的AlexNet模型的输入特征进行分类识别。上述方法都有较高的准确率,但需要人为设计特征因而不能很好表征特征,也容易存在特征丢失,从而影响后续分类识别的准确率。
针对上述问题,大多数研究采用深度神经网络直接学习心音数据的特征。文献[6]构建降噪自编码器提取心音的深度特征,结合一维CNN进行分类识别,对比实验验证提出的降噪自编码器特征表达水平优于MFCC特征。文献[7]采用CNN和循环神经网络RNN(Recurrent Neural Network)相结合提取频域、时域特征,基于全连接层进行心音的异常分类具有较高的准确率。文献[8-9]基于CliqueNet和DenseNet对原始心音数据进行自动特征提取和分类识别,都获得较高的准确率。文献[10]采用AlexNet、VGG16和VGG19预训练模型提取深度特征,使用支持向量机完成心音的分类识别。上述方法能够提取心音的特征,但仍存在以下不足:模型较复杂,消耗大量计算资源,难以应用到资源受限的设备,不利于心音自动分类的使用和推广。针对上述不足,本文基于深度可分离卷积搭建一维深度神经网络,用于自动提取心音数据特征并进行分类识别。该方法使用3 s的心音片段作为网络的输入,通过构建的深度神经网络自动学习心音片段的潜在区分性特征,最后由softmax进行分类。本文直接使用基于深度可分离卷积的深度神经网络提取心音的深度区分性特征,不需要手工设计特征,避免因设计不当造成一定程度的信息丢失而降低分类效果;在PhysioNet/CinC 2016公开心音数据集上获得了97.70%的高准确率以及0.985 9的F1得分,同其他深度学习模型相比,效果显著提高,而且模型参量低,仅有0.02 MB。
本文提出的方法首先对心音数据进行降噪处理,然后以3 s为间隔将一段心音划分为片段,利用基于深度可分离卷积构建的模型进行特征自动提取和分类,完成心音的自动诊断。
心音信号常常包含呼吸音、肺音等噪声。首先,采用巴特沃斯带通滤波器滤除心音信号中高于400 Hz和低于25 Hz的噪声成分;然后,利用小波变换进行二次降噪,小波函数采用db6,分解成6层,并将高频细节系数置零,其余层使用该层系数最大值的10%作为阈值进行处理。图1显示原始心音数据、巴特沃斯带通滤波器滤波后的心音数据、小波变换去噪后的心音数据、巴特沃斯带通滤波器滤波和小波变换相结合去噪后的心音数据。巴特沃斯带通滤波器和小波变换相结合能有效去噪,较清晰展示完整的心音周期,包括第一心音(S1)、收缩期、第二心音(S2)和舒张期。由于一个完整的心音周期大约持续2.5~2.8 s,因此采用滑动窗口分割,以3 s为一个周期。
图1 不同方法对心音去噪的效果图
本文利用神经网络的学习能力,构建基于深度可分离卷积的一维深度神经网络从原始心音数据中自动学习心音的区分性特征。网络一开始使用茎干模块结构增强特征的表征能力,其后使用密集模块和过渡模块堆叠的方式提取深度特征,在密集模块中使用深度可分离卷积降低网络参数量以及在过渡模块中引入通道注意力机制凸显贡献度高的通道特征,最后采用Softmax作为心音的分类器,其结构如图2所示。
图2 基于深度可分离卷积的心音自动分类模型
(1) 茎干模块。整个网络的输入层之后,借鉴Wang等[11]的工作,采用一种茎干模块(Stem_block),在增加少量计算量的同时,提高特征表达能力,其结构如图3所示。第一个卷积层采用1×3大小的卷积核,其数量为24,步长为2,提取输入的初始特征,然后经过批归一化(Batch Normalization,BN)层和修正线性单元(Rectified Linear Unit,ReLU)激活函数进行非线性化输出特征图G1,接着采用两种方式对G1在不同方面提取特征,以增加特征的丰富度。一种是将G1依次通过1×1卷积层和1×3卷积层得到特征图G2;另一种是将G1经过最大池化层得到特征图G3,最后在通道维度上进行连接,并使用1×1卷积将通道数压缩至24,得到特征图G4。为了降低计算复杂度,使用步长为2的最大池化压缩特征维度,得到最终输出特征图Gout。整个茎干模块计算如下所示:
图3 Stem_block结构图
(1)
(2)
G3=MaxPool(G1)1×2
(3)
(4)
Gout=MaxPool[G4]1×3
(5)
F=ReLU[BN(·)]
(6)
式中:X1×w表示数据维度为w的输入;W1×3、W1×1分别表示大小为1×3和1×1的卷积核,下标i、j分别表示第i和第j个卷积核;cat表示连接操作;MaxPool()表示最大池化操作。
(2) 密集模块。密集连接是Huang等[12]提出的应用于DenseNet中的特征重用方式,其后面层的输入与前面所有层的输出特征相连接,这种方式能够使得网络变得简单,然而过多的密集连接增加了网络的内存访问成本。由于在大量的密集连接中,并不是所有的连接都是有效的,存在冗余的连接,对网络的贡献度低且增加了网络的计算成本[13]。因此,本文为降低原有密集连接的连接数,在每个密集模块的最后对前面所有的输出进行连接,既保留了低层特征的重用,又避免了过多的冗余连接,从而降低了网络的计算成本。本文构建的简化版密集模块结构如图4所示。除最后一个block外,每一个block(包括输入)的输出分为两部分,一部分用于下一个block的输入,提取更高层次的特征,另一部分用于最后的连接操作,使低层特征能够得到重用,提高特征表达能力,其计算公式如下所示:
图4 简化版密集模块结构图
Gdense=cat(H1,H2,…,Hk)
(7)
式中:Gdense为简化版密集模块的输出;Hk表示密集模块中第k个block的输出特征,k≥1。
简化版密集模块中的block采用两种结构以提高特征的丰富度,如图5所示。本文为了降低密集模块的计算复杂度,引入了一种深度可分离卷积DWconv(Depth-Wise Separable Convolution)[14]对特征进行提取。深度可分离卷积通过将区域特征和通道特征分开进行运算,有效降低参数量和计算复杂度。假设输入为1×w×c,输出通道数为k,其中w、c分别表示输入的数据维度和通道数。采用深度可分离卷积,其参数量和计算量分别如式(8)和式(9)所示;若采用常规卷积,其参数量和计算量分别如式(10)和式(11)所示,显而易见,深度可分离卷积对于网络的复杂度降低具有很大帮助。
图5 block结构图
(8)
1×w×c×1×3+1×w×c×k=wc(3+k)
(9)
1×3×c×k=3ck
(10)
1×w×c×k×1×3=3wck
(11)
此外,使用h-swish激活函数代替ReLU激活函数,进一步地降低计算复杂度。其计算公式如下所示:
(12)
J=H_SWISH[BN(·)]
(13)
式中:Gk-1表示前一个简化版密集模块的输出,当k=1时,Gk-1=Gout;i表示第i个卷积核;C表示当前卷积核数量;S表示深度可分离卷积。
为了防止过拟合,采用Dropout技术,其概率设置为0.3。经过实验调参,最终确定block1-block3采用stride为1的结构,block4采用stride为2的结构。
(3) 过渡模块。由密集模块的输出Gdense可以看到其输出通道数是非常高的,不能直接作为下一个密集模块的输入。因此,过渡模块的作用就是对密集模块的输出进行降维处理。为了能够提高网络的特征表达能力,在过渡模块中引入注意力机制(Attention),该注意力机制最初由Woo等[15]提出,主要用于轻量级神经网络中,参数量极低。本文用卷积操作替换了其中的全连接层,降低参数量,其结构如图6所示。
图6 过渡模块结构图
(14)
式中:σ表示Sigmoid激活函数;Conv表示两层卷积计算;AvgPool、MaxPool分别表示全局平均池化和全局最大池化计算。
(4) 分类。分类是模型的最后一步,心音主要被分为正常和异常两个类别,用0表示正常,用1表示异常。平均池化层对网络提取的特征进行求平均操作并通过全连接层将特征映射到2个通道维度,最后使用Softmax计算2个通道的概率值,取概率最大值的索引值作为网络的最终输出类别。
训练数据采用PhysioNet/CinC 2016比赛公开的心音数据集[16]。该数据集有a-f六个子数据集,总共有3 240条心音记录,其中2 575条正常心音,665条异常心音,心音记录的采样率为2 000 Hz。预处理步骤如下:每条数据进行标准化处理;使用librosa库中的resample函数将心音的采样率降至1 000 Hz;去噪和分割处理,共得到31 307条心音片段,其中正常心音片段24 967条,异常心音片段6 340条。
为了使模型充分学习到数据的潜在特征,尽可能采用较多的训练数据使得充分训练,因此,本文将数据集按照8∶1∶1的比例划分为训练集、验证集和测试集。使用训练集对模型进行训练,用验证集挑选网络中的超参数,训练完毕后使用测试集评估网络。训练中,batch size设置为64,采用加权交叉熵损失函数对模型进行监督,正异常比值为1∶4,采用Adam优化器函数对模型进行训练。使用GTX 1050TI显卡进行加速训练,总共迭代150次。为了寻找模型的最佳参数,本文进行了多轮训练,通过不断的调整和优化,寻找到最佳的模型结构。最佳模型训练过程中的训练集和验证集的准确率和损失值变化曲线如图7所示。神经网络在训练过程中常出现过拟合现象,若出现过拟合现象,则验证集的损失值会逐渐偏离训练集的损失值,产生较大的偏差。从验证集的损失曲线可以看出,其值偶尔会有较大的波动,但整体上与训练集的损失值趋势一致,未出现完全偏离训练集损失值的情况。因此,本文构建的网络在训练过程中没有出现过拟合现象且收敛性好,损失值在0.1以下,准确率达到95%以上。在测试集上获得了97.7%的准确率。
图7 训练集和验证集在训练过程中的准确率和损失值变化曲线
采用灵敏度(Sensitivity,S)、特异性(Specificity,Sp)、查准率(Precision,P)、准确率(Accuracy,A)和F1得分作为模型评价指标。其中,灵敏度和特异性分别用于衡量识别正确的正样本和负样本的百分比;查准率衡量预测的正样本中的正确率;准确率主要衡量所有识别正确样本的百分比;F1得分是灵敏度和查准率的调和平均值,能够衡量模型的总体分类能力。各指标计算如式(15)~式(19)所示。
(15)
(16)
(17)
(18)
(19)
式中:TP为真阳性样本(True positive);FP为假阳性样本(False positive);TN为真阴性样本(True negative);FN为假阴性样本(False negative)。
表1给出了在PhysioNet/CinC 2016数据集上不同研究方法的分类结果。文献[5]从原始心音数据中提取声谱图作为改进的AlexNet的输入特征进行分类识别,获得了仅比本文略低的准确率;文献[4]采用傅里叶变换提取频域特征作为网络的输入,使用小波函数作为激活函数构建CNN进行分类识别,比文献[5]准确率低了0.31%;文献[3]提取梅尔频率谱系数构建二维特征作为网络的输入,效果有所降低;文献[8]和文献[9]直接使用原始的心音数据分别输入到一维的Clique网络和一维的Dense网络,利用所构建网络的超强学习能力自动提取特征和分类识别,获得了相对不错的效果,尤其是一维Dense网络在特异性上取得了较高的结果。可以看出本文搭建的模型获得了97.70%的准确率、98.20%的灵敏度、92.22%的特异性、0.985 9的F1得分,整体效果优于其他几个模型。
表1 在PhysioNet/CinC 2016数据集上不同研究方法的分类结果
为了验证不同模块对模型性能的提升效果,本文建立了基础的DNN模型,该模型中茎干模块和深度可分离卷积分别由卷积核大小为7和3的常规卷积操作替代,在过渡模块中去除注意力机制。然后在基础DNN模型中分别加入茎干模块、通道注意力机制和深度可分离卷积,各个模型使用的网络结构保持一致。最后在相同的数据集划分条件下,对网络进行训练和测试,最终结果如表2所示。可以观察到,各个模块的加入对模型有一定的提升效果,且能够获得高的F1得分。本文构建的深度神经网络模型(DNN+stem_block+attention+DWconv)在一开始使用茎干块结构增强了模型对原始心音数据的初始特征表达能力,并在后续密集模块中重复利用低层特征,进一步提升网络的特征表达能力,在过渡模块中引入通道注意力机制,突出贡献度大的通道特征,使得提取的特征更有利于分类,区分性更高。
表2 不同的模块对模型的性能影响
本文所提出的方法与文献[8]和文献[9]都是使用原始心音数据输入到网络中自动提取特征并进行分类识别。其中,一维Dense网络参数量为0.11 MB;一维Clique网络参数量为0.19 MB;而本文提出的一维深度神经网络参数量仅为0.02 MB,在不使用深度可分离卷积的情况下,网络的参数量为0.023 MB,比前者多了0.003 MB的参数量,因此,在保证准确率的前提下,使用深度可分离卷积可进一步降低参数量,更有利于运用在资源受限的终端设备中。
本文构建了一种基于深度可分离卷积的心音自动分类模型用于心音特征自动提取和分类,直接利用原始心音数据作为网络的输入进行潜在区分性特征的提取并进行分类识别,避免人工设计特征时,因存在一定的信息丢失,不能很好地表征特征,从而降低了识别效果。采用的深度可分离卷积能够有效降低网络的参数量。此外,为了提升网络的特征表达能力,引入了通道注意力机制。在PhysioNet/CinC 2016数据集上对网络进行训练和调优,在划分的测试集上获得了97.7%的高准确率,同时F1得分达到了0.985 9,同其他模型相比有一定提高。此外整个网络仅有0.02 MB参数量,能够部署在资源受限的终端上,对远程医疗、智能辅助诊断的发展具有重要意义。