基于改进U-Net模型的心电波形分割
2022-11-02徐柏林蔡文杰杨明菲张标
徐柏林,蔡文杰,杨明菲,张标
上海理工大学健康科学与工程学院,上海 200093
前言
我国心血管疾病死亡率逐年上升,并呈现年轻化趋势[1]。随着城市化和生活方式的改变,可以预见未来患病人数不会下降,因此,对于心血管疾病的预防和检测值得重视[2]。心电图作为对心脏健康状况进行评估的重要手段,主要包括P 波、QRS 波和T 波,其中各波形都包含着重要信息,心电波形分割对于自动诊断分析具有重要意义[3]。然而,心电信号的精确分割存在一些困难。例如,P波的振幅很小,甚至因为噪声干扰无法识别或是P波缺失;T波可能存在双向的情况,这就导致很难确定T 波的起点和终点[4]。因此,亟需提出一种可以精确分割心电波形的算法。传统心电波形分割算法一般先在心电信号中定位R波的位置,然后检测QRS 波的起止点,然后再定位P 波和T 波的起止位置。Aspuru 等[5]使用线性回归来分割心电信号,首先检测心电图的R 峰,然后再分离信号,检测P、Q、S和T峰值。该方法对Q点的检验灵敏度为97.5%,对其他心电峰值的检测灵敏度为100%;但是该方法泛化能力没有经受检验,单一的性能指标也不能说明算法的优异。目前主流的用于心电波形分割的传统算法是小波变换,Li等[6]使用小波变换来检测心电信号的各波形特征点。借助小波变换的多尺度功能将QRS 复合波与其他波分离,QRS的识别准确率在MITDB(MITBIH Arrhythmia Database)上达到99.8%。虽然很多传统算法都可以用于心电波形分割研究,但大部分都是针对单独的特征波,如QRS波,将所有心电波形进行整体分割的研究相对较少。近年来,使用深度学习的方法识别心电各波形逐渐成为研究热点。Nurmaini等[7]提出使用双向长短期记忆分类器来对心电图波形进行分割。将心电数据按照心拍进行切割,以P 波的起始点作为切割的起点,该方法的平均敏感度达到98.82%,F1 分数为98.84%;但该方法存在一个缺陷,从P 波的起始点开始切割,以固定心电片段作为训练集投入模型训练,势必会导致模型对P波的识别准确率虚高,缺乏泛化性能。
针对以上算法的不足,本研究提出的基于U-Net模型改进的算法不仅可以检出心电整体波形的起止点,且检测效果更好;在跨数据库实验中也表现较好的泛化性能。
1 方法
1.1 数据集
本研究选取心电公开数据集Lobachevsky University Database(LUDB),这是一个常用于心电波形分割的开放数据库[8]。其包含200 份来自不同受试者12 导联心电图记录,每条记录的采样频率为500 Hz,采样时长10 s;该数据库的P 波、QRS 波和T波的边界和峰值都由专家手工标注。使用QTDB(QT Database)来验证本文算法的泛化能力[9]。其包括105 条两导联心电图记录,采样频率为250 Hz,采样时长15 min;该数据库的每条记录的P 波、QRS 波和T 波起止位置和峰值同样由专家标注。本研究选取了其中部分记录作为算法验证数据。
1.2 预处理
LUDB 中的专家标记从第二或第三个心拍开始到倒数第二个心拍结束。如图1所示,红色为无波,黄色为QRS波,绿色为P波,蓝色为T波。
针对LUDB的特点,本研究在构建数据集时截取了从第3 秒(第1 000 个采样点)开始到第8 秒(第4 000 个采样点)为止的心电片段,共3 000 个采样点。这样截取可以保证选取的信号均有专家标记。将LUDB的200份12导联分别当作独立的记录来处理,得到2 400 条记录。然而,在根据标注构建数据集过程中发现,LUDB 有30 条记录存在漏标情况,舍弃这些记录,最后得到2 370条记录的数据集。
针对QTDB的处理,首先对记录重采样到500 Hz。考虑到该数据库中有大量记录缺乏专家标注,本研究选取几条完整标记的记录,每3000个采样点作为一条心电片段,共得到800条数据作为验证集。
原始心电信号中含有大量噪声信号,如肌电噪声、基线漂移、工频干扰等,噪声信号的存在影响了模型的性能[10]。本研究采用小波变换去除噪声干扰,在LUDB 和QTDB 上使用db3 的小波基对心电信号做8 尺度分解[11]。图2为原始波形和去噪后的波形。
1.3 数据增强
LUDB 共有2 370 条记录,为了增加数据的多样性,提升模型的鲁棒性以及泛化能力,本研究对数据集进行数据增强[12]。首先,针对每条记录的3 000 个采样点,在前600 个点中随机选择起点,投入模型训练的记录长度为2 400,这样在一定程度上可以保证数据的多样性。其次,本研究构建了一个数据生成器,在训练过程中对心电记录做随机增大或缩放,添加基线漂移和进行平移操作[13]。其数学表达式定义如下:
式中第一步对数据进行随机放缩操作,α取值为[8,13);第二步将放缩后的数据添加基线漂移,β、γ、δ的取值范围是[0,30)、[400,900)、[0,10);最后做平移操作,ε取值[-20,21)。对于每一条投入模型训练的记录,都采用这3个步骤和随机选择起点来丰富数据的多样性,增强模型的鲁棒性。
1.4 模型
本研究提出的模型是基于U-Net 模型进行改进的。U-Net 框架起源于全卷积网络,常用于医学图像分割[14]。该模型是一个经典的编码-解码器结构,左边部分用来特征提取,右边部分进行上采样和特征融合。本研究以U-Net为基础,针对一维的心电数据对模型进行改进,模型图如图3所示。
原有的U-Net 模型左边部分的单通道下采样结构换成了3通道,并将普通卷积改成了空洞卷积。因为心电信号是一种基于幅度的低频数据,使用小的感受野很难包含心电信号幅度较大范围的变化[15];另外心拍本身是一段短时一维信号,不能过分关注整体而忽视局部信息。本研究提出的模型左侧部分的3 个通道均会对输入信号进行卷积、批量标准化(BN)及激活(ReLU)操作[16];在模型中使用空洞卷积代替普通卷积,空洞卷积进行卷积操作时会跳过一些像素点进行卷积,在使用相同大小的卷积核情况下,可以获得更大的感受野;同时,给各个通道设计不同的空洞率,输出神经元能获得不同的感受野[17]。各通道空洞模块结构参数如表1所示。这种多通道加空洞卷积的设计更适合提取类似心电信号的一维数据的特征信息。每个通道的每一层经过上述操作后,将结果按照通道维度进行拼接,该结果用于与右侧部分上采样结果特征融合。为了将3 个通道所提取的特征信息整合到一起,本研究使用注意力机制(SENet)对特征重要性进行调整,即通过学习的方式自动获取每个特征通道的重要程度,按照这个重要程度去提升有用的特征权重并抑制作用不大的特征权重,对整个网络进行重新调整[18]。
表1 空洞模块结构参数Table 1 Structural parameters of dilated convolution
输入长度为2 400 个采样点的预处理心电信号,左边部分的多个通道的编码器进行特征提取工作,每次经过池化层尺度减半。右边解码器部分使用上采样的方法恢复尺寸,然后将左边部分的多通道合并结果与上采样特征进行特征融合。最后,模型得到的输出结果为2 400×4,蕴含着属于P波、QRS波、T波的像素级分割信息,使用Softmax 激活函数可以得到每个波形的预测结果[19]。
2 实验结果
2.1 实验配置与性能指标
模型训练使用的优化器是Adagrad,损失函数为交叉熵损失函数,初始学习率设置为0.015,学习率衰减率为0.001,随着模型训练,学习率可以动态地变化[20]。Batchsize 为256,模型训练次数设置为300 个epoch。本研究采用pycharm 作为开发环境和pytorch框架[21]。在Ubuntu 环境上进行训练,显卡为GA106[GeForce RTX 3060 Lite Hash Rate]12 G。图4显示了模型在训练阶段的损失曲线。
根据医疗器械协会(Association for Medical Instrumentation)规定,当算法得到的起始点和终止点与专家标记的绝对值不超过150 ms,则可以判定预测是正确的[22]。由此,可以定义一些性能指标来对算法的质量进行评定。
本实验采用敏感度(SE)、阳性预测率(PPV)、F1分数作为性能指标。SE可以表达算法预测特征点的能力,PPV 表示检测出的特征点是正确的比例,F1 分数是二者的综合指标[23]。性能指标各公式如下:
其中,TP 代表提出的算法预测的特征点与专家标记点的误差的绝对值不超过150 ms;FP 代表算法预测特征点周围150 ms 没有专家标记的点;FN 表示在专家标记点150 ms 范围内无法找到算法预测的特征点。
2.2 结果与讨论
对于U-Net模型的改进方向,本研究采取对原模型加入空洞卷积模块、增加SENet模块以及改变通道个数等方式,分别对每一种改进方向都进行训练和5折交叉验证。各个模型在测试集上的表现如表2所示。提出的算法在测试集上的分割结果如图5所示。
表2 不同模型的心电分割结果(LUDB)Table 2 ECG segmentation results of different models(LUDB)
DC+U-Net(Dilated Convolution,U-Net)模型 是在原U-Net 模型的基础上将单通道下采样改为3 通道下采样,普通卷积模块变成空洞卷积模块,但未加入SENet。DC+U-Net 模型平均性能在PPV 和F1 上相对于U-Net模型有大约0.5%的提升,在P波和QRS波的分割上性能明显更加优秀,T 波效果与U-Net 相差不大。SE+DC+U-Net(SENet,Dilated Convolution,U-Net)与DC+U-Net区别在于将3通道下采样改成了两个通道,加入了SENet 模块;平均性能相比于DC+U-Net 模型提升了大约0.3%。本研究提出的模型通道数为3,加入了空洞卷积和SENet 模块,在P 波、QRS 波、T 波的分割上性能都优于其他模型,平均性能对于U-Net模型大约提升了1.2%。
因为LUDB数据标注问题,本研究舍弃了部分心电信号。黄鑫[24]采用了与本文类似的做法,在第3秒和第9 秒之间随机选择了6 s 的心电片段构建数据集;Sereda等[22]用中值滤波去除基线漂移后也选择了6 s的心电信号作为数据集的一条序列;Viktor等[4]从第2秒到第4秒随机选择起点,序列长度是4 s。将本文方法与其他方法的研究结果进行比较,结果如表3所示。本文算法在T波的性能上有着明显的优势,但是在QRS 波的检测上不如Viktor 等[4]的方法。从平均性能来看,本文方法在敏感度、阳性预测率上都取得了更好的表现。
表3 与其他论文方法对比(LUDB)Table 3 Comparison with other methods(LUDB)
为了验证本文提出的算法的泛化能力,在处理好的QTDB 上进行算法验证。表4是在LUDB 上训练好的算法在QTDB 上进行验证的结果与其他方法的研究结果对比。同Kalya-Kulina 等[25]的方法相比可以看到本文方法在P 波段的效果不够明显,但在QRS 段和T 波段有明显优势。Bote 等[26]采用小波分析方法对心电波形进行分割,本文方法在QRS 波段与他们取得的效果接近,但是在T波段的检测上更胜一筹。因此,本文方法已经接近了目前的主流水平,在跨数据库上取得较好的表现,具有良好的泛化能力。
表4 QT数据库上算法验证结果对比Table 4 Comparison of algorithm verification results on QT database
3 结语
本研究提出一种基于U-Net框架的改进模型,用于心电波形分割。采用LUDB和QTDB构建训练集,进行5 折交叉验证。LUDB 用来训练模型并进行测试,在QTDB上做算法验证。实验结果充分验证了算法的有效性和泛化能力,在LUDB 测试集上的5 折交叉验证结果为:平均灵敏度99.41%,平均阳性预测率98.90%,平均F1 分数98.75%。在QTDB 上性能可以比拟主流的方法。本研究的缺陷如下:首先对于LUDB 和QTDB 中部分漏标的记录,没有充分利用数据;其次,对于一些疾病类型的心电图,例如房颤等尚无法进行准确分割。这些工作有待进一步研究。