深度医疗是笔者基于深度学习的医学项目应用开发实践,经过整理输出了文档和本系列课程,希望通过分享可以和大家共同讨论、相互学习,探索更好的解决方案。笔者是一名普通的大数据和人工智能领域从业者,过程中如有错误和理解不到位的地方请广大同仁不吝赐教。笔者一直坚信深度学习和医学的有机结合一定能碰撞出性能强大的深度医疗系统,服务大众。
本文主要介绍了通过深度学习进行心电图特征识别的应用,首先简单介绍了心电图医学背景和相关知识,接着介绍了目前能获得的公开的心电图数据集,最后介绍了神经网络的实现方式和处理后的效果以及性能分析。
1.什么是心电图
心脏在收缩跳动过程,心肌内的电流产生在前,心肌机械性收缩在后,应用心电图机以图形形式记录这些心肌电流的变化就叫做心电图。大家对心电图应该都有直观的印象,我们去医院体检一般都有这项功能的检测。通过传感器的连接检测,会在终端打印出一张如下面所示的图,这个就是记录心脏整个生理周期过程的心电图。
心电图每一个横格代表时间为0.04秒,每一个纵格代表电压为0.1毫伏;1个大格=5个小格=0.04秒x5=0.2秒。所以可以得到下面的对应关系,这样就可以简单的通过纸上坐标快速得出心律的跳动次数。
心电图传感器不同的连接方式对应不同的导联方式,主要分为下列两种
肢体导联方式:
标准导联Ⅰ:左上肢接正极,右上肢接负极
标准导联Ⅱ:左下肢接正极,右上肢接负极
标准导联Ⅲ:左下肢接正极,左上肢接负极
aVR导联:右手接正极,负极接中心电端
aVL导联:左手接正极,负极接中心电端
aVF导联:左下肢接正极,负极接中心电端
胸导联方式:
V1导联:正极放在第四肋间胸骨旁右缘
V2导联:正极放在第四肋间胸骨旁左缘
V3导联:正极放在V2~V4导联连线中点
V4导联:正极放在第五肋间与锁骨中线交点上
V5导联:正极放在腋前线与V4导联水平线的交点上
V6导联:正极放在腋中线与V4导联水平线的交点上
2.心电图产生原理
当心肌细胞一端的细胞膜受到一定程度的刺激时,其对钾、钠、氯、钙等离子的通透性发生改变,引起细胞膜内、外和正、负离子的流动(主要是钠离子的内流),使细胞膜内外正、负离子的分布发生逆转,受刺激部位的细胞膜出现除极化,使膜外侧具负电荷而膜内侧具正电荷,产生动作电位使心脏产生收缩运动。
这样周而复始,一个周期一个周期持续下去就行成了有规律的心电图波形,也称为P-QRS-T波。
P-QRS-T波的形成
心电活动始于窦房结,并从此发出冲动,循此特殊传导系统的通道下传,先后兴奋心房和心室,使心脏收缩,执行泵血功能。这种先后有序的电兴奋的传播,将引起一系列的电位改变,形成心电图上相应的波形。
3.数据集介绍
我们采用的数据集是MIT-BIH Arrhythmia Database(心律失常数据库)它是由Massachusetts Institute of Technology - 麻省理工学院和Beth Israel Hospital – 美国麻萨诸塞州波士顿Beth Israel医院一起联合创建的。
数据集中包含48 条充分标注的2导联ECG数据,每条数据时长为30分钟,其中标注的数据是按每个心电图周期进行标记的,也就是说每个周期的P-QRS-T波形都进行了标准,标注非常的详细,同时提供了对应的label标签文件,标注的信息可以从label标签文件中找到对应的信息。标注的信息可以从label标签文件中找到对应的信息 可以通过按图中的选择进行数据集的查看,做得非常的详细。
数据的下载地址
每条数据包含都.atr注释文件,.dat数据文件,.hea头文件
头文件主要包含一些基础、单位信息
注释文件记录了心电专家对相应的心电信号做出诊断信息
数据文件包含了心电图的波形数据,存储格式是头文件中的212格式(针对两个信号的数据记录,两个信号交替存储,每三个字节存储两个数据)
官方提供了PhysioBank ATM可视化网站,可进行在线查看,非常方便
4.神经网络
因为心电图是周期性的波形数据,神经网络通过了两种方式进行处理,包含一个周期波形的数据通过single pattern模式进行处理,包含多个周期波形的数据通过multiple pattern模式处理。为什么这么做是因为single pattern模式下只包含一个周期的波形,我们简单的认为在一个周期波形下只包含一种病变信息,也就是说简单的认为它只包含一个判决结果,而multiple pattern模式中多个波形有可能就会包含多种病变信息,也就是多分类问题了(这里的single pattern也有可能一个波形对应几个病变信息,为了把问题简单化同时阐述得更清楚,这里就认为single pattern模式只包含一种判别结果)
基于single pattern模式
为了能完整的包含一个P-QRS-T波,所以数据两头多引入了半个波形。模型中用到了三层ResNet和一层全连接层,这个模型并不见得好,在这里只是为了抛砖迎玉,大家在实际开发中可以进行测试和架构的优化来提高性能。
神经网络结构
multiple pattern模式
输入数据包含几个周期波形,所以该情况下就会出现某个波形数据下包含一个以上特征,意味着softmax输出不是一种特征输出,而是会出现几种可能并列出现的情况,这个时候前面single pattern的神经网络就不能处理这种情况;
这里也以一个稍微简单的情况进行讲解,假设一个波形最多包含2种特征(最少也有一种,正常或者其他病理),这种情况下我们采用两个并行的网络进行处理,一个网络判别波形的一半label,另一个网络判别波形的另外一半label,完成鉴别后合并这些特征就能进行多特征判别。
神经网络结构
误差收敛曲线
5.存在的问题和优化方案
1)实际项目中输入数据不是.dat文件,可能是图片数据,这个时候需要通过调整CNN的滤波器维度来进行匹配,例如系统中现在用的是1x3的滤波器,图片处理时,由于是二维数据,所以需要变换成3x3的滤波器;
2)通过其他网络结构进行优化,例如可以考虑引入dense net或在multiple pattern下把并行的一个网络完成dense net;
3)在特定场景下可以考虑RNN网络的引入;
6.彩蛋
在心电图识别这个领域有一个每年都举办的比赛,大家有兴趣可以去参加。
下面是2017年比赛的结果