于 雁,邱 磊,2
(1.青岛大学自动化学院,山东 青岛 266071; 2.青岛大学未来研究院,山东 青岛 266071)
随着我国社会生活水平的提高,人们的精神和物质生活已经逐渐达到满足,随之而来的是生理上的各种压力,导致心血管疾病的发病率更普遍和趋向于低龄化,其中心律失常是心血管疾病中的重要疾病之一,它能够使心脏跳动逐渐衰弱直至停止或者突然发作致死[1]。ECG信号是人体中最关键的生理信号[2],它能够实时地反映心脏状态,成为诊断心血管疾病的有效手段之一。目前心电信号的自动分类已经成为人工智能领域中的研究热点,通过机器学习与模式识别的智能算法,大量研究成果脱颖而出。ECG信号的自动分类通常包括3个部分,即信号预处理、特征提取和心电分类[3]。针对信号预处理和特征提取,侯晓晴等[4]利用小波变换对ECG信号去噪后,使用极大值和斜率双重检测提取QRS波形特征;王超超等[5]利用改进阈值函数实现了对ECG信号的有效去噪;Xu[6]采用无监督心跳特征学习方法进行T波自动检测,具有较高的适应性。对于心电分类方面,宋莉等[7]将一次性直接求解多类模式的SVM方法应用于心电信号分类;文献[8]中利用模糊C均值深度信念网络FCMDBN模型自动学习心拍分类,验证了该方法的有效性;陶亮等[9]利用CNN与LSTM混合的心律失常自动诊断算法,高效、准确地识别心律失常类别;叶思超等[10]采用残差网络融合模型达到了85.5%的心律失常分类能力。上述文献均利用传统方法进行ECG信号去噪和波形特征提取,或在传统CNN网络基础上加大深度以及加入RNN直接提取心电特征,这些研究方法虽有所成效,但都仅局限于单方面心电研究或对心电信号进行单一尺度信息提取,没有充分利用组合优势,达不到预期的分类目标。
针对上述问题,本文首先对Db6小波的4级分解量进行心电信号重构,并使用巴特沃斯低通滤波器实现双重去噪,然后对平滑的去噪心电信号进行R波提取,根据R波位置将信号分割成多个含有360个采样点的P-QRS-T波段,最后将全部心电片段输送到一维改进GoogLeNet网络中进行训练。一维改进GoogLeNet是原始二维GoogLeNet的结构优化模型,删除其中部分Inception结构,降低网络深度,并在保留的Inception结构中加入最大池化层和扩张卷积,增大感受野,减少训练参数。相比原始二维GoogLeNet和无添加最大池化层和扩张卷积的一维GoogLeNet,一维改进GoogLeNet网络的训练效率和测试效果有所提升,可达到99.39%的心电信号分类准确率。
本文实验采用MIT-BIH心律失常数据库(MIT-BIH Arrhythmia Database)[11],其中共包括48条双通道动态ECG记录,每条记录的心跳持续时间为30 min,采样频率为360 Hz。由于数据库中的心拍种类较多,本文选择其中5种作为心拍分类对象,即正常搏动(Normal beat, N)、左束支传导阻滞(Left bundle branch block beat, L)、右束支传导阻滞(Right bundle branch block beat, R)、房性早搏(Atrial premature contraction, A)和室性早搏(premature Ventricular contraction, V)。
由于心电信号的产生机制及周边环境影响,采集的ECG信号长度不固定且容易存在基线漂移和肌电干扰等噪声[12-14],本实验将心电信号输入到模型中进行训练之前,首先进行了心电信号去噪和特征提取操作。
1.2.1 信号去噪
针对ECG信号中存在的噪声问题,本文首先利用Db6小波进行4级分解,并将分解的小波系数进行权重分配后得到重构信号[15],接着使用巴特沃斯低通滤波器[16]进行二次降噪,提高模型对心电波形的检测能力。图1表示Db6的第1~4级近似系数d1~d4和第4级细节系数a4,信号重构公式如式(1)所示。
x=d1+d2+d3+d4+a4
(1)
其中,x表示重构信号,di(i=1,2,3,4)表示第i层信号分解得到的近似系数(即高频信息),a4表示第4层分解的细节系数(即低频信息)。
巴特沃斯低通滤波器的表达公式为:
(2)
(a) a4、d1和d2分量
(b) d3和d4分量
图2表示原始ECG波形和各方法去噪后的ECG波形。从图中可以看出,经过2次去噪处理后,保留了原有的心电波形特征和细节信息,与原始波形相比更为平滑,消除了由各种噪声产生的小毛刺现象。
图2 原始、Db6的4级分解并重构、低通滤波器消噪后的ECG信号波形
1.2.2 特征提取
MIT-BIH数据集中的每条ECG信号持续时间为30 min左右,采样频率为360 Hz,每一个人工注释都标注在R波位置。一个完整的心电周期主要包括P波、QRS波和T波,大约在0.6 s到1 s之间,由于被采集者的心律不同,故将提取到的每类心拍时间固定为最长时间1 s,即截取R波注释点存在的360个采样点,并将位于始末位置的心拍舍掉,避免因该点前后数据点不足而误导心拍分类,最终的各心拍数量如表1所示。
表1 各心拍数量
一般来说,提升网络性能最直接的办法是加大结构深度和宽度,如之前的AlexNet、VGG等深度CNN网络,它们有效提升了训练效果,但随之带来的是网络参数的猛增以及过拟合、梯度消失和梯度爆炸等问题[17-18],上述核心解决方案是将卷积或全连接都转化为稀疏连接。稀疏连接可实施的原因是现实中生物的神经系统是稀疏连接,且若稀疏性过大可以利用激活值的统计特性和对相关性强的输出进行聚类来逐层构建最优网络,最终臃肿稀疏网络得到有效简化且不失性能[19]。
原始GoogLeNet是一种全新的深度学习二维网络结构[20],整体上共有22层,适用于图像分类和物体识别领域。由于检测心律失常的心电信号属于一维时间序列数据,故将二维GoogLeNet一维化进行心电研究,同时进行结构优化,最终的一维改进GoogLeNet分类模型见图3。由于MIT-BIH数据集中的是二导联ECG信号,且每一心电片段固定为360个数据点,因而对原始二维GoogLeNet进行网络结构改进,删除结构末端的多个Inception结构和最大池化层(MaxPooling1D),保留平均池化层(AveragePooling1D),同时将剩余的Inception加入最大池化层和扩张卷积(Dilated conv)[21]得到Inception1和Inception2结构。其中最大池化层先删后添的目的是将其具有的最强形态特征提取功能分散到Inception结构中的多个分支上,充分发挥Inception结构和每一个最大池化层的作用,而不是仅局限在主干路上的结构末端。Inception1和Inception2结构见图4,括号内的第一个数据表示卷积核或池化窗口大小,S表示stride(步长),dilation_rate表示扩张卷积的扩张率。Out结构是帮助模型训练的辅助Softmax分类器,避免训练时出现梯度消失,赋予其0.3的权重,且不参与实际测试。
图3 一维改进GoogLeNet分类模型
如图4所示,Inception结构是对网络的一种拓宽处理[22],具有稀疏连接的特点,不同卷积核尺寸的使用可以将输入的ECG信息进行不同尺度的特征融合,其中每一条分支都有卷积核尺寸为1的卷积层来对数据特征进行降维和映射处理,减少特征矩阵的深度和卷积参数量,从而减少计算量。本文中的Inception1和Inception2结构在不同分支中加入的最大池化层可以提取各尺度上特征性强的信息,同时对数据进行降维,减少训练参数,扩张卷积能够扩大卷积看到的范围,增大感受野,但不会增加网络参数,两者的共同结合优化了模型的训练性能,提高了测试准确率。
图5表示扩张卷积原理图。图5(a)对应着卷积核尺寸为3×3、扩张率为1的扩张卷积,与普通卷积操作一致。图5(b)对应着卷积核尺寸为3×3、扩张率为2的扩张卷积,但仅有权重不为0的9个实心圆点和3×3的卷积核进行卷积操作,其余部分权重均为0,没有增加参数量,卷积核虽为3×3,但卷积感受野已经扩大到7×7,使得卷积输出含有较大范围的信息,且不会导致原信息缺失,优化了模型训练效果。
(a) Inception1
(b) Inception2图4 Inception1和Inception2结构
(a) (b)图5 扩张卷积原理图
本文基于Keras 2.2.4对一维改进GoogLeNet模型进行搭建和测试,在操作系统为CentOS 7.5、显卡为Nvidia Titan V的GPU服务器上进行训练。模型训练时的最大迭代(epoch)数为100,若10个epoch内训练精度没有提升,训练自动停止;优化算法使用Adam[23],初始学习率(lr)设为10-3,当训练效果在8个epoch内无提升时,lr会自动缩减到之前的1/10,直至10-8;批量大小设为200;数据集按6:2:2分为训练集、验证集和测试集。
混淆矩阵显示心律失常的最终分类结果,具体形式如式(3)所示。
(3)
本文使用精确率(Precision)、召回率(Recall)和F1值作为指标评价模型的心拍分类性能,其中F1值是Precision和Recall之间的一个平衡点,能够衡量测试总体的分布程度,具体公式如下:
(4)
(5)
(6)
上述指标均由混淆矩阵获得,TP指预测为正、实际为正的总数;FP指预测为正、实际为负的总数;TN指预测为负、实际为负的总数;FN指预测为负、实际为正的总数。
本文将一维改进GoogLeNet分类模型进行epoch迭代训练,当迭代到32次时,早停回调函数迫使训练停止。训练精度acc和损失值loss变化曲线如图6所示,acc迅速提升接近于1,而loss下降速度快,最终接近于0。可见该模型训练效果优异,对心律失常的自动分类具有很好的引导性作用。
图6 acc和loss变化曲线
为验证结构简化以及Inception结构中添加最大池化层和扩张卷积的训练效果,将一维改进GoogLeNet(有扩张卷积和最大池化层)、一维GoogLeNet(无扩张卷积和最大池化层)和原始GoogLeNet训练时的最终acc值、loss值、模型参数总量、内存大小以及训练运行总时间5项参数进行比较,如表2所示。可以看出,一维改进GoogLeNet和一维GoogLeNet的参数量、内存和运行时间相差不大,但前者的acc和loss最优,相对来说,原始GoogLeNet各项指标都最低。综上可得加入扩张卷积和最大池化层的一维改进GoogLeNet训练效率最高。
表2 各模型训练参数比较
将测试集分别投入到训练好的3个模型中进行心拍分类测试,混淆矩阵如图7~图9所示,表3~表5分别为Precision、Recall和F1值。由这些图表可以看出一维改进GoogLeNet模型正确识别心拍类别的数量最多,Recall和F1值最高,一维GoogLeNet的Precision值最高,就总体F1值而言,原始GoogLeNet的结果最低。由于A类心拍数量相比其它心拍占总心拍比重过小,因此其测试结果相比其它类别都偏低,但总体上评价结果依然很高。
图7 原始GoogLeNet测试混淆矩阵
图8 一维GoogLeNet测试混淆矩阵
图9 一维改进GoogLeNet测试混淆矩阵
表3 各模型分类Precision值
表4 各模型分类Recall值
表5 各模型分类F1值
本文总结了部分相关工作者的研究结果,并与本文中的3个模型分类准确率进行比较,如表6所示。所有实验均使用MIT-BIH数据集,准确率均指总体F1值。
表6 各模型准确率对比
由表6中的对比结果可以看出,本文所提一维改进GoogLeNet的准确率优于其它全部模型,相比一维GoogLeNet和原始GoogLeNet,准确率分别提升了0.17个百分点和0.26个百分点,可见简化原始GoogLeNet,同时在Inception结构的分支中加入扩张卷积和最大池化层后测试效果优异。对比文献中的心电数据处理方式不同,除此之外,数据特征提取大都采用深度叠加的传统CNN或LSTM,它们是通过单尺度进行信息提取,提取的特征量大且不全面,使得实验准确率差异较大,其中文献[26]使用了缺少数据信息的小波分量{d2~d7}组合数据,同时1D-GoogLeNet是对原始GoogLeNet中Inception结构的分支删减以及传统卷积层的增添,相比本文在Inception多分支中添加最大池化层和扩张卷积的一维改进GoogLeNet,增加了参数量,削弱了多尺度特征提取和增大卷积感受野的特性,导致准确率较低,而本文实验充分利用双重降噪后的全部有效数据,最终达到了最高分类准确率。
对心脏异常的实时诊断可以降低心血管疾病的发生率和病人的死亡率,由于心律失常能够反映心脏状态,因此本文基于深度学习对心律失常自动分类进行了研究。针对ECG信号收集环境的不稳定性,将MIT-BIH数据库中的心电信号进行Db6小波和巴特沃斯低通滤波器的双重降噪,对消噪后的长时心电信号进行P-QRS-T波段截取,并输入到一维改进GoogLeNet中进行模型训练和分类。相比原始GoogLeNet和一维GoogLeNet模型,添加最大池化层和扩张卷积的一维改进GoogLeNet更利于心电特征提取,5类心拍的测试准确率达到了99.39%。以上结论可以得出本文实验具有更实时准确的心律失常自动分类效果,可用于长期监测心律失常的便携式装置。