基于卷积神经网络的心电图心博识别
2019-08-31王自强刘洪运石金龙王卫东
王自强,刘洪运,石金龙,王卫东
1.北京航空航天大学生物与医学工程学院,北京100191;2.中国人民解放军总医院医学工程保障中心,北京100853
前言
心电图由于其无创、廉价和便于操作等特点而被广泛运用于心脏疾病诊断和心脏功能评价[1],也是目前诊断鉴别心律失常最常用的方法。心率过快或过慢或者心搏不规则都可称为心律失常,通常分为有生命威胁和没有生命威胁两种[2]。部分心律失常事件偶尔发生,虽然可能无直接生命威胁,但为了避免产生可能的恶化也需要及时防范治疗,通过动态心电图长时间记录心电信号才能捕捉到这些偶尔发生的事件。为了捕捉这些事件,心搏的识别非常重要。
心电图心搏识别属于医学领域的模式识别,心搏自动识别可以提高心电图分析效率,也是当前快速增长的心电数据分析的必然趋势。采用机器学习方法来识别心电图心搏类型通常包含心电信号的预处理(去除各类噪声)、特征波形检测选择(选择具有代表性的特征)和心搏识别。
心电信号预处理和特征波形检测已经有大量相关研究,本文不再进一步赘述。文献中常用于心搏分类的特征通常包括心电信号的时域特征、频域特征、形态特征和各类统计特征等。传统的心电图心搏识别算法通常是基于先验知识从心搏中提取相应的特征之后,再使用机器学习算法分类。常用的分类方法如聚类[3-4]、支持向量 机(Support Vector Machine,SVM)[5-7]、神经网络[8-10]等。Mar等[11]采用时域特征、统计特征和形态特征来识别4种心搏。Yu等[12]结合了独立成分分析(Independent Component Analysis,ICA)分解后的形态特征和RR间期等特征,用概率神经网络识别6种心搏,获得了超过99%的准确率。Ye等[13]同样采用了ICA分解后的心搏和RR间期作为特征,用SVM识别心搏,获得了99.3%的平均准确率。
近年来,深度学习发展迅速并开始用于心搏识别。有别于传统机器学习算法,基于深度学习的算法能够从心电信号中自学习提取有用的特征[14]。Acharya等[15]使用深度卷积神经网络(Convolutional Neural Network,CNN)来进行心搏的识别。该研究除了信号的预处理之外,并没有进行特征波形的检测和特征提取,直接输入分割的心电信号作为样本,通过学习训练之后,对经过降噪和未经降噪的信号进行测试对比,结果平均准确率分别为94.03%和93.47%,但是该研究只识别了5种心搏。Yang等[16]使用堆叠的稀疏自编码器和softmax回归识别左束支阻滞、右束支阻滞等6种心搏,其准确率达到99.22%。总体而言,当前的深度学习方法识别心搏种类较少,没有细化,具体的心搏类型正确识别对于心电分析具有重要潜在价值,因此本文尝试使用CNN直接识别M IT-BIH心律失常数据库中的13种心搏,并测试其对于叠加噪声数据的识别能力。
1 方法
本文的心搏识别系统流程图如图1所示,包含以下过程:首先通过小波变换进行信号预处理。然后按照时序依次检测R波,当检测到R波时,以R波为中心进行心搏分割,将分割后得到的样本输入到神经网络中训练模型。最后将待测心电信号输入,经训练好的CNN识别得出心搏类型并标注到心电图中。
图1 心搏识别系统流程图Fig.1 Flow diagram of heartbeat recognition system
1.1 数据库
所用的数据库为M IT-BIH心律失常数据库[17],该数据库包含48个记录,每个记录含有两个导联、采样率为360 Hz。每个数据长度约为30 m in,一共包含约109 000个心搏,其中约70%为正常心搏。心电信号对应的心搏类型、节律信息和信号质量等都保存在注释文件中。
1.2 预处理
文章选取的心电导联主要为Modified Limb Lead II(MLII)导联,首先对所选择导联的心电信号进行预处理。选择bior小波进行8阶小波变换,去除了1层和2层高频噪声和8层低频信息然后重构,去除基线漂移和高频噪声干扰。
训练网络阶段,由于注释文件中已给出R波的位置,所以未检测R波。在具体实测过程中,本文采用差分阈值法检测R波[18]。然后以R波为中心对心电数据分割,每条分割片段长为440个采样点,通常包含了超过一个完整心搏的形态信息。对每个分割后的心搏片段进行标准化处理,使其均值为0,标准差为1。标准化后的输入数据片段如2图所示(本文共计识别13类心搏,图2只显示其中6种)。
1.3 数据扩增
图2 6种心搏类型Fig.2 Six types of heartbeats
由于所用数据库各个心搏类型的样本量不均匀,只考虑样本量相对较多的13类心搏,对于这13类心搏,样本量之间的差别仍然很大,为了使各类心搏的样本量均衡,本文通过改变样本均值和方差的方法将样本量较少的心搏类型进行数据扩增[15]。扩增的心搏类型包含(括号内表示该心搏类型的对应符号):心室扑动(!)、室性融合波(F)、交界性早博心搏(J)、加速的房性逸搏心搏(a)、真性起搏融合心搏(f)、交界性逸搏心搏(j)和未下传的P波(x)。而样本量较多的心搏类型则不进行扩增处理,包含:正常心搏(N)、左束支阻滞心搏(L)、右束支阻滞心搏(R)、房性早搏心搏(A)、室性早搏心搏(V)和起搏心搏(/)。
为了避免数据不平衡的问题[15],从扩增的数据中随机选取了每类心搏中的2 000个样本组成26 000个样本集。为了更加客观的评价模型的性能,本文采用十折交叉验证来评价模型[19],即将所有样本均分为10部分,依次将其中一份作为测试数据,另外9份作为训练数据,经过10次测试的平均结果来评价模型,即每次的训练集为23 400个随机样本,测试集为2 600个随机样本。
1.4 网络结构
CNN是近年来发展最快的人工神经网络之一,它可被视为一种特殊结构的多层感知器,常用于图像识别、自然语言处理等领域。网络通常包含卷积层、池化层和全连接层[20]。卷积层和池化层交替重复堆叠在网络前端提取输入数据的特征。卷积层的输出经过了激活函数的非线性化映射,然后输出到池化层,池化层能降低数据维数,避免过拟合,增强网络的鲁棒性[21]。常用的池化操作有最大池化和平均池化,本文使用平均池化。将最后一个平均池化层的各个输出通道串联起来得到的一维信号作为全连接层的输入,多个全连接层组成多层感知器分类得出识别结果。
本文的网络结构包含3个卷积层,3个池化层和3个全连接层。将输入层设为第1层,第2、4、6层为卷积层,一维卷积核长度分别为21、13和12,对应的输出通道数为10、12和8。第3、5、7层为平均池化层,池化步长为2。最后是神经元个数分别为90、40和13的多层感知器。
采用误差反向传播算法最大化验证准确率[22],初始的学习率α为0.5,随着训练周期降低学习率,为了加快训练速度,加入了动量项,其系数μ设为0.8,此外采用小批量训练的方法[23],将批量大小p设为64。
本网络为处理一维数据的CNN,其训练算法流程如下:假设输入某个样本(x,y),其中x、y均为矢量,f表示非线性映射,W表示卷积层的连接权,U表示全连接层的连接权,b表示各个层的偏置,L表示网络的层数,即第L层网络,l表示当前层中的输出通道,即第l个输出通道,a表示各个层的输出,I表示各个层的输入。
(1)随机初始化各卷积层的连接权、偏置(此时,L=2,4,6;对应卷积层的第l个输出通道),以及全连接层的连接权、偏置(此时,L=8,9,10;i、j分别表示当前层的第i个神经元和当前层上一层的第j个神经元)。
(2)输入样本前向传播:表示第L层,第l个输出通道的第i个输出(此时,L=1,2,3,4,5,6,7)。全连接层的输出另表示为(此时,L=8,9,10,11)。
输入层:a1l,i=xi
卷积层:
此时,L=2,4,6为该层(卷积层)的通道l和该层的输入层(池化层或输入层)的通道l'之间的卷积核;其中,M为该卷积核的长度,K表示该层的输入层(池化层或输入层)的通道个数。
池化层:
此时,L=3,5,7;k为池化步长。
全连接层:
此时,L=9,10、11,a8为a的各个输出通道首尾串联而得,AL的第i个输出记为AiL,R为的长度。
(3)误差反向传播:δL记为,其中e为输出误差,IL为第L层的输入。对应不同层的误差具体如下所示。
全连接层:
此时,L=11,符号⊙表示对应位置相乘得到的新矢量。
此时,L=9,10,T表示转置操作。因此得到:
池化层:误差由上层(卷积层)传过来,δ7为δ9按照原连接次序再断开得到。
此时,L=3,5,符号∗表示卷积,即和的卷积为上层(卷积层)的通道l'和该池化层的通道l之间的卷积核;flip为对输入一维数据进行倒序操作。
卷积层:此时,L=2,4,6;其中,upsample为上采样,对于本文采用平均池化,上采样即误差反向传播时由上层(池化层)误差δL+1均分到该层相应的神经元。
(4)含有p个样本的批次训练参数t时刻更新量为:
(5)t时刻权值更新:
其中,α为学习率,μ为动量项系数。
(6)不断重复(1)~(5)更新参数,直到更新量小于设定的某个较小阈值或到达训练次数时得到网络模型。
当前许多关于心搏识别的方法中,SVM是识别性能最好的分类器之一。本文选择将SVM算法作为对比,使用林志仁开发的LIBSVM工具箱[24],选用径向基核(Radial Basis Kernel,RBK)。将训练集训练得到SVM模型,然后将该分类器模型用于心搏识别。评估指标包含准确率Acc、阳性预测率PPV、敏感度Se和特异度Sp 4个方面。
2 结果
表1为经过十折交叉验证的平均测试结果,从表1可以看出本研究的测试准确率达到98.05%以上,即最大误差为1.95%,所有心搏的平均准确率为99.24%。所有心搏的平均特异度达到99.59%。所有心搏的阳性预测率和敏感度平均结果分别为95.00%和95.06%。结果表明,本网络能较准确的识别13种心搏。
将不超过0.4 mV的随机噪声信号叠加到测试数据中,使用CNN模型和SVM模型进行测试。从表2可以看出本研究的CNN模型测试得到各项性能指标均较高,而且各个类别间的性能指标差异较小,识别的平均准确率为99.07%,平均敏感度达到94.01%,平均特异度为99.50%,阳性预测平均结果为93.96%。表3为SVM测试叠加噪声数据结果,叠加噪声几乎不影响SVM识别真性起搏融合波、未下传的P波、心室扑动和加速的房性逸搏等几种心搏类型,但是SVM对叠加噪声后的正常心搏、起搏心搏和左束支阻滞心搏的识别明显降低很多。整体而言,本研究的方法识别评估指标波动小,对噪声的鲁棒性更强,可靠性更高。
表1 本研究算法十折交叉验证平均结果Tab.1 Ten-fold cross-validation resu lts of the p roposed algorithm
表2 本研究算法测试叠加噪声数据的结果Tab.2 Perform ance of the p roposed algorithm to test added noise
表3 SVM测试叠加噪声数据的结果Tab.3 Perform ance of support vector m achine algorithm to test added noise
为了进一步检验设计流程的可靠性,考虑到具体病人的心搏类型应在本文识别的13种心搏类型范围之内,本文选取数据库中的R119作为实测数据,该记录包含1 987个心搏,去除头尾两个心搏后的数据作为待测数据。按照图1输入信号,经过小波变换去噪、差分阈值法检测R波、心搏分割后,利用网络识别心搏类型。输出结果能正确识别1 985个心搏中的1 969个心搏,阳性预测值达到99.19%。其中一部分心电信号的具体心搏信息显示如图3所示。
3 讨论
近几年用深度学习方法识别心搏的研究越来越多,识别心搏通常分为以心搏类别为导向(intrapatient)和以被试个体为导向(inter-patient)两种范式[25]。表4为新发表的将深度学习方法用于心搏识别的一些研究,称为intra-patient范式。其数据均来自M IT-BIH心律失常数据库,尽管每种方法使用数据库中的数据量不尽相同,但是作为心搏识别方法还是具有一定的可比性。Acharya等[15]使用9层卷积神经网络识别5种心搏,输入分割的心搏数据,最后得到识别准确率为94.04%。Zubair等[26]同样使用卷积神经网络识别5种心搏获得了92.70%的准确率。Yildirim[27]使用基于长短时记忆网络(LSTM)识别5种心搏,其识别准确率高达99.39%。Yang等[16]使用稀疏自编码器和softmax回归识别6种心搏,其准确率也超过99.22%。
图3 心电信号及其心搏类型Fig.3 ECG signals and the types of heartbeats
表4 本研究算法与新研究结果比较Tab.4 Com parison of performance am ong the proposed algorithm with other state-of-the-art studies
本文采用CNN识别心搏,输入分割后的心搏,通过CNN自学习提取特征,然后利用多层感知器对输入的特征进行识别分类,即是一种端对端学习的网络结构[28]。本研究通过大量尝试设置不同的网络层数、输出通道个数、各层神经元的个数以及学习率等参数,最终选择了表现最好的模型。测试结果表明网络能较准确的识别13种心搏(准确率:99.24%)。本文的CNN是一种端对端学习的网络结构,不需要人工选择提取特征,同时又能获得很高的准确率。
研究统计对比扩增心搏和未进行扩增心搏的各项测试结果,进行样本扩增心搏的各项评价指标均高于未扩增的心搏各项评价指标。原因是本文获得扩增数据后用于训练和测试时再次使用了归一化,其效果相当于对样本量较少的数据进行复制式的扩增,因此在测试阶段扩增数据各项性能较好,但是从结果中可以看出未扩增的数据和扩增后的数据测试指标并没有太大差距。本研究的网络虽然能够以较高准确率识别13种心搏,但是还有许多不足之处,如:由于数据库中的各类心搏数量有限,考虑到心搏之间的样本量大小,本文只进行了13种心搏的识别,还不能覆盖临床上所有的心搏类型;本文的心电采样率为360 Hz,对于不同采样率的待测信号需要重采样到360 Hz才能保证每个输入样本时间长度一致;本文所用数据库中心电的导联主要为MLII导联,对于其他导联数据,其泛化能力可能会下降;深度网络训练时间往往很长,本文的网络同样如此,需要经过多周期的训练,但是测试阶段只要训练好的模型,测试时间非常短,因此前期的训练时长是可接受的。
4 结论
本文使用CNN算法识别心搏类型。网络包含3个卷积层、3个池化层和3个全连接层,通过CNN自学习提取输入分割的心电信号特征,然后利用多层感知器对输入的特征进行识别分类,采用误差反向传播的方法训练模型。最后测试得到的平均准确率达到99.24%,特异度平均达到99.59%以上,阳性预测结果和敏感度平均为95.0%和95.06%。对于加噪信号,本网络仍具有较高的准确率,这对于实际使用过程中的动态心电图测试具有重要意义。目前深度学习的方法识别心搏的种类较少,本文采用一种端对端学习卷积神经的网络能以较高的准确率识别多达13种心搏。其识别心博种类多、可靠性高、快速和使用简便等特点可以在未来的心律失常的自动诊断中发挥重要作用。