融合VGG16和TextCNN的心电信号智能诊断模型

2023-01-13 06:42庞伟马乐荣何进荣丁苍峰
关键词:导联电信号心电图

庞伟,马乐荣,何进荣,丁苍峰

(延安大学数学与计算机科学学院,陕西 延安 716000)

心电信号是临床医学领域患者心脏健康状况非常重要的衡量标准,成为诊断各类心脏疾病的有效手段。在分类识别心电信号的领域中,快速精准且高效的识别算法一直是学者们探索的主要方向。普通的心电图只能记录、分析,表示心电图当时的情况,但是有很多异常情况在当时做心电图的时候不能被及时发现,从而不能被记录,动态心电图的出现解决了这个问题,在做心电图时探测电极的安放位置有3个肢导联、3个加压肢导联、6个胸导联,称为十二导联心电图。对于单心拍心电信号的识别以及诊断,深度学习之前的传统分类方法主要有支持向量机、模糊数学、随机森林等。例如,FENG等[1]提出将心电信号使用多重小波算法进行滤波之后,再采用SVM分类器进行分类与识别。VENKATESAN等[2]提出基于K最邻近分类算法的心律失常分类方法,实现对正常和异常受试者的分类识别。

随着人工智能的发展,深度学习的方法被应用到了许多领域中,在近几年的心电信号分类研究中,更多的研究人员采用了深度学习的方法。ACHARYA等[3]使用深度卷积神经网络(Convolutional Neural Network,CNN)来进行心搏的识别;ALI等[4]在单心拍心电信号分类研究中,使用了AlexNet网络模型,平均精度达到92%;杨春德等[5]人利用改进的一维U-Net++模型在单心拍心电信号分类任务中,达到了98.10%的准确率;张培玲等[6]使用改进残差网络的方法进行分类研究,先使用提出的新阈值函数对ECG单心拍信号进行去噪处理,再使用inception模块加残差网络的模型进行分类,最终得到了95.1%的准确率。孙梦丽等[7]与吴雪等[8]使用迁移学习的方法应用于心电信号分类任务,得到了相当优秀的结果;SIMONYAN等[9]利用I-DCNN的方式进行心电信号分类,相比较传统分类方法得到了性能上的提高。

大多数分类识别算法都是基于单心拍心电图进行分类识别,对于训练数据量有很大的需求,处理数据步骤繁琐,且只能针对单心拍进行分类,无法从患者整体的心率角度分析病灶,在一些单心拍分类任务中取得较好准确率的方法,在十二导联心电图分类中,可能因为多通道的影响使得实验模型的准确率不够理想。

十二导联数据集规模小,在神经网络模型构建过程中要尽可能降低网络复杂程度。文本神经网络TextCNN[10]被广泛应用于医疗图像处理,由于文本神经网络TextCNN模型简单,不能够有效的捕捉波形的变化,因此本文提出基于卷积神经网络VGG16[11-12]与文本神经网络TextCNN模型融合分类识别算法。文本神经网络TextCNN模型融合卷积神经网络VGG16模型进行优化来处理十二导联电信号,从而实现对十二导联电信号分类的识别及疾病的诊断分类。

1 相关工作

1.1 数据集预处理

十二导联心电图由3个肢导联、3个加压肢导联、6个胸导联组成,包括6个肢体导联(Ⅰ、Ⅱ、Ⅲ、aVR、aVL、aVF)和6个胸导联(V1~V6)。单个数据集维度尺寸为12×5 000(500 Hz频率,10 s的获取时间),需要对数据集进行切分,使得数据集尺寸符合神经网络输入尺寸。为了保证后续神经网络学习与训练的效率,需要对十二导联心电信号进行预处理操作,主要是多通道数据归一化。十二导联心电图数据库将数据保存为12×5 000的二维数组格式,为了便于后续TextCNN-VGG16神经网络的卷积、池化、Dropout、全连接等操作,将十二导联心电数据的二维数组表示为多通道的一维数组。

1.2 分类模块

目前对于心电图诊断方面的分类方法,大都使用传统机器学习的分类方法进行分类,得到了不错的准确率,它们主要由数据预处理、人工提取特征以及设计分类器3部分组成。首先消除各种噪声,再将人工提取的时域、频域以及小波域的特征输入分类器中,虽准确率较高,但步骤相比较深度学习较为繁琐,需要大量训练集,并且在动态的心电图分类信号中准确率较低。神经网络的训练方法可以通过更为简单的特征模式进行提取,从而得到更为全面的心电信号特征,实现心电信号的自动分类,在临床诊断中的应用更为广泛。

本文主要在TextCNN与VGG16模型融合的神经网络框架下对十二导联心电图数据集进行自动分类:

1)TextCNN使用多个不同大小的卷积对心电数据集进行卷积操作,得到多个Feature Map,再对多个Feature Map进行池化操作,将其拼接起来,最后使用Softmax全连接层进行激活。TextCNN网络模型如图1所示。

2)VGG16是深度学习中最经典的CNN模型之一,由5层的卷积层、3层全连接层以及Softmax输出层构成,层与层之间使用最大池化分开,所有隐层激活函数都使用Relu函数,在残差网络集构出来之前,VGG16在加深网络结构方向上做出了极大贡献,结构图如图2所示。

本文在TextCNN网络结构的基础上,将VGG16的层数与卷积核大小复刻到TextCNN中,将TextCNN中的多个大小不同的卷积核设置为3个长度为3的卷积核与2个长度为2的卷积核,对传入的十二导联数据集进行卷积操作,得到多个Feature Map,按顺序对Feature Map进行池化操作,使用大小不同的卷积核进行卷积操作,得到的特征具有全局性,通2层全连接层,1层Softmax输出层,最终得到分类结果,如图3所示。

2 试验与分析

2.1 实验数据

本文采用paddle竞赛AIWIN心电图智能诊断竞赛公开数据集进行试验[13],该数据集包含两类ECG数据,正常心率数据与非正常心率数据。

图2 VGG16网络模型

图3 VGG16-TextCNN融合模型

该数据集的数量相对非常小,符合few-shotlearning的数据集尺寸,每条数据都由1个Mat文件构成,标签单独存放在Csv文件当中,共包含1 600条训练集十二导联数据记录与400条测试集十二导联数据记录,心电数据的单位为mV,采样率为500 Hz,每条记录长度为5 s。文件中存储了12导联的电压信号(包含了Ⅰ,Ⅱ,Ⅲ,aVR,aVL,aVF,V1,V2,V3,V4,V5和V6),十二导联心电图如图4所示,横坐标表示时间t(ms),纵坐标表示电压U(mV),心电图记录的是电压随时间变化的曲线。

2.2 模型性能指标

在数据集中,心电信号分为正常心拍与异常心拍两类。在本文中采用混淆矩阵的性能指标对模型性能进行评判[14]。在心电信号分类输出结果中,可以得到模型分类的正常心拍判定数与异常心拍判定数,称为正类数与负类数。所以可以分为真实情况正类(TP)、真实情况负类(TN)、模型判定的正类(FP)、模型判定的负类(FN)。为了更加直观的对试验结果性能进行评判,利用得到的混淆矩阵,计算出模型的精确率(Pre)、召回率(Recall)、平衡F分数(F1-score)以及准确率(Acc),通过上述4个指标,就可以对模型性能进行评估。

心电图分类模型中判断正确的数量占总观测数量的比重为准确率:

图4 十二导联心电图图示

分类模型预测是正类数的所有结果中,预测对的比重为精确率:

分类模型预测正确的结果占所有正确结果的比重称为召回率:

F1-score被定义为精准率和召回率的调和平均数:

2.3 Dropout

在神经网络训练过程中,很容易出现过拟合的情况,常用的方法有数据增强、L1L2正则化、Dropout等。本文采用的是Dropout的方法解决过拟合现象,Dropout参数设置为0.5。

2.4 优化器

网络中优化器选择为自适应据估计(Adam)优化器,beta1参数设置为0.9,beta2参数设置为0.999,学习率初始化为0.005。

2.5 激活函数

选择ReLU函数作为卷积池化层的激活函数,在全连接层选择Softmax函数作为激活函数。相比较Sigmoid函数,在计算过程中,Sigmoid函数的计算量明显大于ReLU函数,采用ReLU函数使得整个计算过程精简很多。而Softmax函数的目的是为了使分类结果以概率的形式展现出来。

ReLU函数作为神经网络中的激活函数,为神经元在线性变换wTx+b之后的非线性输出结果,公式如下:

对于上层神经网络的输入向量x,使用ReLU激活函数的神经元会输出:

其中,w为网络神经网络层之间的权重,b为神经网络层之间的偏置。

2.6 损失函数

使用交叉熵损失函数(Cross Entropy Loss)作为损失函数。对于同一个随机变量X的2个单独的概率分布p(x)和q(x),使用KL散度来衡量概率分布之间的差异,KL散度的公式如下:

机器学习中,p(x)表示样本的真实分布,q(x)表示模型预测的分布,x表示分类标签。首先将KL散度拆开:

前者表示信息熵,后者表示交叉熵,即KL散度=信息熵+交叉熵,交叉熵公式为

由于机器学习的过程中,标签与数据已经确定,所以信息熵为常量,而KL散度可以表示真实概率分布p(x)与预测概率分布q(x)的差异性,差异越小,效果越好。由于KL散度中信息熵的值为常量,所以最小化交叉熵就是最小化KL散度,且公式比KL散度更易于计算,所以采用交叉熵损失函数。

2.7 K-折交叉验证

开始训练前,先随机初始化权重。在模型训练过程中,使用K折交叉验证[15]方法来减少数据集划分所带来的影响,经过多次数的平均可以学习得到更符合真实数据分布的模型,本文选择K=5,为5折交叉验证,如图5所示。

图5 5折交叉验证

2.8 试验分析

试验过程使用Python语言,利用Tensorflow中的Keras库与Sk-Learn库作为神经网络试验的工具。本次试验采用经典的VGG16、InceptionNet、LeNet方法进行对比分析。InceptionNet是以横向卷积层堆叠的方法进行分类任务的网络模型,LeNet利用七层网络模型进行分类,具有卷积层、池化层、全连接层的经典七层网络模型。由于数据集数量较少,在训练过程中会导致训练集正确率高,但验证集的正确率不高,使得泛化能力太差,VGG16如 图6所示,InceptionNet如图7所 示,LeNet如图8所示,横坐标代表训练波数(Epoch),纵坐标代表准确率(Acc)。

在TextCNN与VGG16Net分类模型试验中,训练集得到的准确率为83.64%,而验证集准确率为82.54%,相比较VGG16、InceptionNet、LeNet,具有良好的泛化能力,并且由于训练集属于小样本训练,在实际应用当中会有更加良好的表现。TextCNN与VGG16Net分类模型试验的准确率如图9所示。

图6 VGG16试验准确率

图7 InceptionNet试验准确率

图8 LeNet试验准确率

如表1所示,在消融实验中,VGG16模型的训练集准确率为98.86%,验证集上的准确率为58.64%;LeNet模型的训练集准确率为97.42%,验证集上的准确率为57.42%;InceptionNet模型的训练集准确率为99.41%,但在验证集上的准确率为54.26%;而VGG16-TextCNN的训练集准确率为83.64%,验证集上的准确率为82.54%。在小样本数据集的训练过程中,经典的二维卷积在心电信号数据集上由于特征提取器的大小形状限值,使得VGG16与LeNet的验证集表现较为一般;而InceptionNet的复杂结构在处理高维数据集的结果较为优秀,但是在处理小样本低维数据集的过程中会出现比较严重的过拟合情况;而VGG16-TextCNN在处理过程中既保留了数据集原有特征,也避免了严重的过拟合情况,有相当优秀的泛化能力。

图9 VGG16Net-TextCNN试验准确率

表1 3种试验方法与VGG16-TextCNN方法比较

3 结论

在常规使用的公开数据集中,预处理的数据为单通道数据,而ECG十二导联心电图信号是十二通道数据集,特征具有全局性,并且数据集本身样本数量较少,所以采取比较简单的神经网络模型,避免过拟合的发生。

本文先将Mat文件转换称Csv文件,再将Csv文件中二维数据切片成为一维数据,通过VGG16-TestCNN模型一维卷积方法提取特征,共有三层卷积层,每个卷积层大小不一,以便于得到全局特征,再将部分提取到的特征进行整合,最后由2个全连接层输出分类结果,在小样本验证集中准确率达到82.54%,可以有效地识别正常心拍与异常心拍。

接下来的关注点应在对小样本数据集的研究上。实际生活中样本数据不能够完全满足部分神经网络的训练需求,使用少量数据来提升分类准确率的神经网络模型,这是未来临床诊断中的重要手段。

猜你喜欢
导联电信号心电图
动态心电图与常规心电图诊断冠心病的应用
回旋支闭塞引起孤立Ⅰ、aVL导联ST段抬高型心肌梗死2例并文献复习
基于联合聚类分析的单通道腹部心电信号的胎心率提取
心电图机检定方法分析及简化
《思考心电图之176》
《思考心电图之174》
基于Code Composer Studio3.3完成对心电信号的去噪
基于随机森林的航天器电信号多分类识别方法
心电图aVR导联ST段改变对急性心肌梗死的预测价值分析
多类运动想象脑—机接口导联选择方法