在这里给大家分享一篇关于用深度学习进行心电图识别的论文,原文地址https://arxiv.org/abs/1804.06812,我翻译成了中文以便大家快速学习,中间难免有疏忽遗漏的地方,请大家谅解。
深度医疗(1) - 心电图特征识别
这篇文章是由韩国的几个研究人员发表的,通过使用卷积神经网络实现了心电图的高精准分类,总共完成了8类心电图心律不齐病变的分类,其达到的分类精确度都超过了所有目前用来做心电图自动分类的方法,而且其中它的好处是不需要过多的对原始数据进行预处理。
在论文中提出了一种有效的ECG心律分类方法,该方法是基于二维CNN神经网络,最近的研究表明其在模式识别方向上有显著的性能表现。每个ECG跳动的数据被转化为一副灰度图作为CNN分类器的输入数据。优化的CNN分类器包含不同的深度学习技术模型,除此之外,论文中用两个经典的网络做了比较,一个是AlexNet,另一个是VGGNet。用来训练分类的ECG数据记录来自 MIT-BIH心律数据库,分类器训练结果的平均准确度达到了97.85%,最高99.05%,同时训练的数据并没有经过类似噪声滤波、特征提取等任何的预处理。
根据世界卫生组织(WHO),心血管疾病(CVDS)是当今疾病死亡的头号杀手。超过1770万人死亡是由心血管疾病引起的,占总死亡人数的31%,死亡人数超过75%出现在低收入和中等收入国家。心律失常是一种有代表性的心血管疾病类型,主要是任何与正常心脏不规则的节律变化,通常有很多类型的心律失常,包括心房颤动、过早收缩、心室颤动和心动过速等,虽然单次心律失常可能对生命没有严重影响,但连续的心律失常可能导致严重的后果。例如,长时间室性早搏(PVCs)偶尔转变为室性心动过速(VT)或室颤(VF),其可能导致心力衰竭,所以周期性的观测心跳对阻止心血管疾病是非常重要的。心电图(ECG)是一种无创的有效的观测心律和心脏状态的医疗工具,因此通过心电图(ECG)自动检测不规则心律在心脏病学领域是一项非常重要的课题。
有很多针对心律不齐的分类方法被提出:
1)基于前馈神经网络(FFNN)的方法,针对4种不同类型的心律不齐检测,其精确度可以达到96.95%;
2)SVM也被广泛应用在心电图心律检测方向,针对6种不同类型的心律不齐检测,其精度可以达到89.72%;
3)基于RNN网络的方法,针对4种不同类型的心律不齐检测,其精度可以达到98.06%;
4)基于KNN(K-nearest neighbor)的方法,针对17中类型的心电图数据,可以达到97.1%的精确度;
但这些方法都存在一定的缺陷:
1)用来训练的数据都是经过精心挑选的;
2)心电图的跳动数据在噪音滤波和特征提取中会损失;
3)能进行分类的心电图类型有限;
4)在实际中应用分类性能相对较低;
在这边文章中,基于提出的2维CNN’处理,首先不需要做噪音滤波和特征提取的预处理;其次通过增加心电图训练数据可以提高分类的精度,前面提到的方法中,要做到数据扩充是很难的;同时前面的方法对噪音信号非常敏感;本文提出的方法,因为通过二维的CNN’处理,该模型会在通过卷积和池化层提取相关特征时会自动忽略噪音干扰,这样就可以适应不同的心电图机器和不同的采样率信号。
该方法把原始的心电图数据转化为128x128的灰度图作为CNN的输入,可以分辨8种不同的心律失常:正常搏动(NOR)、室性早搏(PVC)、起搏搏动(PAB)、右束支传导阻滞搏动(RBB)、左束支传导阻滞搏动(LBB)、房性早搏(APC)、室颤波搏动(VFW)和室性逸搏(VEB),因为在MIT-BIH心律数据库中主要都是正常的数据,其他7类的数据占很少一部分,所以通过数据扩充的办法来增加其他7中特征的数据让数据保持平衡,具体的方法在下文会进行介绍。
首先把MIT-BIH心律数据库转换为可以灌给CNN的二维数据,相当于转化为图片,然后通过CNN来对这些图片做基于8个分类的图像分类;
因为MIT-BIH心律数据库提供的数据是通过P-QRS-T波的周期来标定的,所以可以通过时间节点来提取单周期(single pattern)的的信号转换成图片信息,即一张图片包含一个周期的心电图波形,如下所示:
把心电图数据转换为2维数据(图片信息)进行处理,主要是CNN包含的卷积、池化等处理对2维图像处理很适用,从而可以提高分类的准确率。现今有很多优秀的CNN模型,例如AlexNet和VGGNet,本文就是通过这两种实现方式来进行处理,当然目前还有一些性能更好的网络模型,例如GoogleNet、ResNet、DenseNet等,但这些网络结构都包含很深的层数,这里处理的心电图数据仅仅是一个128x128的图片信息,所以用不到这么深的网络,所以在这里就使用AlexNet和VGGNet进行处理和对比。
因为在MIT-BIH心律数据库中,大部分数据都是正常数据,病变的数据占比很小,这样形成的数据集就不平衡,最后导致训练的模型性能很差,缺乏鲁棒性。为了解决这个问题,通过裁剪、移动等方法对病变的信号进行处理来增加上文提到的7中病变信息,例如下面的处理:
针对这个室性早搏(PVC)的数据,对它分别进行左上、中上、右上、左中、中、右中、做下、中下和右下的平移,并进行裁剪获得9个数据特征,这样做相当于原来只有一个病变数据,处理后得到了另外9个病变数据。
基于梯度下降学习的主要缺陷是模型可能发散或陷入局部最小点。为了达到更好的收敛效果,文章中通过Xavier初始化来平衡所有CNN滤波器的梯度尺度的大小,权值通过下面公式进行随机初始化
其中In和Out是网络中滤波单元的输入和输出个数。
在现今的神经网络系统中,较小尺寸的滤波器被认为有更好的处理效果,所以在这里用到的CNN滤波器尺寸是3x3,同时为了保证图像在进行卷积层处理时保持原始的尺寸,采用了zero-padding模式。
文章中通过使用LReLU. ReLU, LReLU, 和 ELU发现使用ELU性能更好,相对ReLU来说,ELU保留了更多的负向信息。
正则化也可叫做归一化,主要是用来减小过拟合。这里使用了两种常规的方法,batch normalization和dropout,如果不做batch normalization的话,前面一点点的变化将对后面产生非常大的影响,通常batch normalization放在激活函数前和卷积层后,但文章中发现针对ECG的数据比较特殊,放在激活函数后效果会更好,同时在卷积层后和全连接层后都放了batch normalization;
这里使用的dropout为0.5,把他放在了全连接层后面的batch normalization后,这里在卷积层没有加dropout,一般来说,由于卷积层不具有许多自由参数,所以Dropout不适用于卷积块,并且节点之间的协同适应比减少过拟合更为重要。
误差函数用的是典型的cross-entropy函数
优化器使用的是Adam优化器,同时使用的是动态学习率,起始值是0.0001,然后通过下面的方式进行迭代,表示1000个迭代步骤后学习率会变小为原来的0.95
用来测试当前训练的模型性能是否达到要求,同时如果没有验证集的话训练过度会造成过拟合。使用的机制是在训练中如果在500个迭代后权重的平均灵敏度和系统收敛状态没有改变的话就停止学习的过程然后开始进行验证集测试
整个CNN的模型如下:
在此基础上加入了AlexNet和VGGNet的架构进行了性能验证和比对,下面分别是CNN架构、AlexNet架构和VGGNet架构的层数、每层结构、滤波器大小、步进、每层特征提取通道数和每层输入输出维度
文中提到了
Curve (AUC), Accuracy (Acc), Specificity (Sp), Sensitivity (Se), and Positive Predictive Value (+P) 5种评判标准,这里只列出准确率,其他4种有兴趣大家可以自己查阅。
从准确度可以看出,CNN模型和AlexNet比VGGNet的性能稍好,通过数据扩增的性能CNN模型和AlexNet都比扩增前稍高,而VGGNet有一定的降低。