结合长短期记忆网络与Unet模型的心率估计方法
2023-03-27黄伟安黎峰张雨李济涵高军峰
黄伟安,黎峰,张雨,李济涵,高军峰
(中南民族大学生物医学工程学院,武汉 430074)
心率(heart rate,HR)是一种衡量人类心脏搏动能力的指标,其变化差异反映了心脏健康程度,是人体生理特征的重要参数。有研究显示,静息心率与心血管疾病密切相关,静息心率越快越容易引发心血管疾病[1-2]。同时,在运动状态下,心率更容易产生异常的变化,即心脏出现异常工作的情况,因此,心率对运动过程产生的异常情况具有重要的预警作用[3]。随着人们对自身健康的不断重视,心率检测已成为人们的日常需求。因此,如何加快对便捷式心率检测技术的研究,并在医疗保健、健身运动等各方面广泛应用便捷式心率检测技术是目前的研究重点及难点。
传统的心率检测主要依靠心电图法(electrocardiogram,ECG),虽然这种方法得到的心率是最准确的,但是对于日常生活的心率检测比较麻烦,而且其设备价格昂贵,操作复杂,无法进行大规模应用。因此目前的穿戴式心率检测设备主要采用光电容积描记(photoplethysmography,PPG)技术,它是当前应用最广泛的心率检测方法,但是这种方法在剧烈运动下所采集的PPG信号存在极大的运动伪影,这种伪影使得心率检测的准确性面临着巨大的挑战。
当前,多种信号处理技术被提出用于去除或降低PPG信号的运动伪影,主要有独立成分分析(independent component analysis,ICA)[4]、奇异值分解(singular value decomposition,SVD)[5]、小波变换[6]、经验模态分解[7]等方法。也有其他研究通过组合两类及多类技术去除PPG信号的运动伪影。耿读艳等[8]将含有噪声的PPG信号以三轴加速度传感器作为参考信号,通过自适应滤波器滤除其中的运动伪差,其次再通过经验模态分解得到一系列的固有模态分量,最后通过排列熵准则判断信号阈值范围,滤除其中的高频噪声和基线漂移,但无法同时兼顾复杂度与准确度。谭拥等[9]用三轴角速度对三轴加速度进行卡尔曼滤波修正,并将其作为自适应滤波器的参考信号,滤除PPG信号中的运动伪影,最后再对处理过的信号利用谱峰追踪估计心率,尽管提高了准确率,但其使用时需要生成参考信号,无法确保参考信号的准确性。
随着深度学习在各个领域的不断发展,许多研究尝试利用深度学习算法从受污染的PPG信号中测量心率。Jindal等[10]提出基于深度信念网络和受限波尔兹曼机器对人体 PPG 信号识别,其输入序列是人为提取的特定特征。在Deep PPG[11]中,卷积神经网络(convolutional neural networks,CNN)由PPG信号和由ECG信号的真实心率标记的加速度共同训练。在CorNET[12]中,神经网络模型由心电信号的真实心率值标记的PPG信号训练。尽管CorNET与基于信号处理的方法具有类似的性能,但该模型必须针对每个不同的个体进行训练。覃凯等[13]利用CNN结合序列到序列的注意力机制网络模型对PPG信号进行预测,但其针对某个状态下心率测量存在局限性。目前现有的基于深度学习的方法大多采用分类的思想,都依赖于从心电信号中提取的HR作为标签。
现提出新的心率估计方法——LU_PPG,该方法是一种结合LSTM网络和Unet模型对PPG信号进行心率估计的方法,可对在运动中的心率测量取得较高的精度。以单通道的PPG信号为训练数据,将携带心率信息的类正弦信号为标签用以训练LSTM_Unet网络模型,经网络输出类PPG信号,最后通过频谱分析对心率估计并进行校正[14]。
1 研究方法
图1展示了LU_PPG心率测量方法的流程。包括3个阶段: 预处理; 模型训练; 模型预测。
图1 心率估计流程图Fig.1 Flow chart of heart rate estimation
1.1 2015 IEEE spc数据集
数据集通过腕带设备记录,包括一个双通道PPG传感器(绿色LED,波长为515 nm)和一个三轴加速度计(记录在与PPG信号相同的位置)。此外,数据集包括同时记录的心电信号,提供真实心率值。所有信号的采样率为125 Hz。该数据集由12名年龄在18~35岁的黄皮肤男性的生理数据所组成,共包含12个子集[15]。
对于每个受试者,在记录数据的过程中,都是以如下速度在跑步机上行走或跑步:以1~2 km/h的速度行走或跑步0.5 min,以6~8 km/h的速度行走或跑步1 min,以12~15 km/h的速度行走或跑步1 min,以6~8 km/h的速度行走或跑步1 min,以12~15 km/h的速度行走或跑步1 min,以1~2 km/h的速度行走或跑步0.5 min。同时,受试者被要求用手和腕带拉衣服,擦额头汗水,并按下跑步机上的按钮以及自由挥杆。
1.2 预处理
心电信号包含P波、QRS波和T波等波。通过PPG信号测量心率,为获得受污染PPG信号的心率信息,同时简化模型复杂度和训练难度,仅关注ECG信号中的R峰。经研究证明 PPG 波峰与ECG中的R峰周期一致。
采用MATLAB自带峰值检测函数findpeaks检测ECG信号中R峰位置,然后根据周期ECG信号重构成一个类正弦信号的波形,从而有别于其他研究方法所采用的方法,如图2所示。
图2 ECG信号与转换后的类正弦信号对比图Fig.2 Comparison chart of ECG signal and converted sinusoidal signal
在检测峰值的过程中,仅仅依靠函数检测往往会出现遗漏峰值点或标记错误的峰值点。因此,必须对检测过后的峰值点进行检查并纠正,以防出现漏峰、错峰错误,影响后续模型的训练过程。
为了降低噪声和干扰,采用三阶巴特沃斯带通滤波器对PPG信号进行处理。将带通滤波器的截止频率设置为0.4~5 Hz,对应24~300 次/min的心率范围。
为了便于网络训练,首先采用互相关分析的方法将PPG和同步的ECG的第一个波峰对齐,信号对齐结果如图3所示。其次使用滑动窗口将信号切分为重叠帧,其中滑动窗口的长度为1 000个采样点,即8 s。为了生成大量的训练数据,选择较小的0.25 s作为滑动时间步长,测试数据集的滑动时间步长设为2 s。最后将数据归一化处理后送入神经网络。
图3 利用互相关方法将原信号与标签进行对齐 Fig.3 Align the original signal with the label using the cross-correlation method
1.3 LSTM_Unet模型
1.3.1 模型组成
所使用的神经网络模型是主要由CNN和循环神经网络(recurrent neural network,RNN)组成。首先,CNN能够从大量的数据提取出适合该任务的特征数据。其次,学习基于对以往知识的理解来理解当前的知识。然而传统的神经网络并不能将这种经验传递下去,这将丢失很多有价值的信息。RNN正是为了解决这一问题而提出来的。所使用的长短期记忆(long short-term memory,LSTM)[16]是一种特殊的RNN模型,可以学习长期依赖信息,同时不会出现传统RNN的梯度消失和梯度爆炸的问题。
LSTM 内部模块由 4 个不同的门控单元以一种特殊的方式进行交互。与RNN相比,LSTM模型增加了3个门控单元,分别为遗忘门、传入门和输出门。这些门的作用是控制之前隐藏状态需要遗忘、需要记忆、需要输出的部分。使用两层的LSTM网络构成了基本的Seq2Seq模型,Seq2Seq 模型属encoder-decoder 结构中的一种。基本思想是利用两个RNN,一个作为encoder,另一个作为decoder。
Seq2Seq网络结构如图4所示。encoder 负责将输入序列压缩成指定长度的向量,这个向量包含了心率信息,采用双向 RNN(Bi-RNN)在前向和后向读取源序列,这个过程称作编码。而 decoder 则负责根据编码向量生成指定的序列,这个过程称作解码。
xn为输入序列;hn为隐藏层状态;yn为本时刻的输入图4 Seq2Seq模块结构图Fig.4 Seq2Seq module structure diagram
1.3.2 LSTM_Unet模型结构
Unet是一种基于CNN实现的语义分割网络[17],首次将LSTM和Unet网络相结合并应用于心率检测。LSTM_Unet是一种 Encoder-Decoder 结构,结构简单但很有效。编码部分有两个子模块,每个子模块包含两个卷积层,每个子模块之后有一个通过Maxpooling实现的下采样层。解码部分也包含两个子模块,序列长度通过上采样操作依次上升,直到与输入序列长度一致。该网络还使用了跳跃连接,将上采样结果与编码器中具有相同序列长度的子模块的输出进行连接,作为解码器中下一个子模块的输入。Seq2Seq模块负责将编码的输出序列压缩层指定长度的向量,这个向量可以看作包含了心率信息,并根据生成的向量生成指定的序列送入到解码部分,该模型的结构图如图5所示。
图5 LSTM_Unet 模型结构图Fig.5 LSTM_Unet model structure diagram
1.3.3 实验参数设置
LSTM_Unet模型的CNN都采用一维卷积,第一个CNN块使用16个大小为7×1的卷积核,第二个CNN块使用8个大小为7×1的卷积核。Seq2Seq中的3个LSM网络都采用8个单元的结构,并返回长短期记忆状态。为了训练LSTM_Unet模型,最初使用80个epoch,批大小为128,实验发现超过60个epoch后,性能没有改善,因此将固定为60个epoch,然后作后续分析。在训练过程中,采用Adam优化器进行优化,采用均方误差(mean square error,MSE)作为损失函数,平均绝对误差(mean absolute error,MAE)来评估模型的性能。将IEEE数据集12个子集通过留一法训练和测试模型,即11条记录用于训练LSTM_Unet, 1条记录用于测试。
1.4 频谱分析
经过上述步骤后,对模型预测的类PPG信号做进一步的频谱分析,才能得出最终的心率值。利用MATLAB提供的自回归模型函数pyulear对预测数据集的PPG帧做功率谱分析,最终得到每一PPG帧的心率值,其心率计算公式如式(1)所示。
HR=60f
(1)
式(1)中:f为该PPG帧的脉搏波频率成分,bpm即每分钟心跳次数,次/min。
2 实验结果与分析
为了对比不同方法测量心率的优劣性,用不同的方法处理同一批PPG数据集并计算连续心率。将LSTM_Unet模型对PPG信号进行预测,拟合出包含心率信息的类PPG信号。图6及图7给出了一段受污染的PPG信号与其预测结果的示例,可以看到预测的结果波形变得更有规律了。LU_PPG方法根据输入PPG预测出类PPG信号,并基于频谱分析对HR进行估计,图8显示的频率成分最高峰就是心率。
图6 原始PPG信号Fig.6 Original PPG signal
图7 模型预测的类PPG信号Fig.7 PPG-like signals predicted by the model
图8 频谱分析图Fig.8 Spectrum analysis chart
使用估计心率与真实心率的平均绝对误差(MAE)来评估LU_PPG方法在人体心率估计方面的表现,其公式如式(2)所示。
(2)
式(2)中:HRt(i)为第i个PPG帧的真实心率值;HRp(i)为第i个PPG帧的估计心率值;n为每个对象子集的PPG帧数。
将LU_PPG方法的性能与代表经典信号处理方法的TROIKA、深度学习算法的Deep PPG、DeepHeart进行了比较,表1给出了不同方法下的12个对象子集的平均绝对误差(MAE)以及总的平均误差(Avg)。
在表1中可以发现LU_PPG在绝大部分记录中的心率估计都优于TROIKA和Deep PPG。其中,LU_PPG的平均误差为2.27 次/min,低于TROIKA的2.34 次/min和Deep PPG的4.00 次/min。值得注意的是DeepHeart的心率估计,尽管其心率估计平均误差只有1.61 次/min,但其心率估计过程的复杂性也是不能忽略的。该方法需要将10个训练模型的输出分量进行加权求和才能取得较稳定的心率估计结果,显然这过程的工作量加大了心率估计的负担。其与LU_PPG心率测量方法的模型复杂度对比如表2所示,可知,无论是模型参数量还是计算量来看,LU_PPG心率估计方法均小于DeepHeart,其整体模型性能更好。
表1 TROIKA, DeepHeart, Deep PPG和LU_PPG 在IEEE数据集中12个对象子集的心率估计表现Table 1 Performance comparison of TROIKA, DeepHeart, Deep PPG and LU-PPG on 12 records
表2 两种模型性能对比Table 2 Comparison of the performance of the two algorithm models
为了更加直观地观察模型提取心率信息的性能,将真实的心率值与原PPG信号和模型预测的心率信息的心率估计值进行比较,并计算真实心率值与心率估计值的Pearson相关系数。
图9及图10分别为LU_PPG方法和原PPG信号在IEEE数据集S7、S10的心率估计图。这是LU_PPG方法在IEEE数据集心率估计误差最小和最大的情况。同时也与对应的真实心率值进行了对比。可以发现,S10原始PPG信号估计的心率值严重偏离真实心率值,可知该数据子集的噪声干扰非常严重。然而本文方法所得到的心率值几乎紧跟真实心率值的变化。从中可知,无论是噪声干扰轻的数据,还是噪声干扰严重的数据,本文方法均能跟踪真实心率值的变化。
图9 S7下的心率估计对比图Fig.9 Heart rate estimation comparison on S7
图10 S10下的心率估计对比图Fig.10 Heart rate estimation comparison on S10
图11为LU_PPG在IEEE数据上的心率估计的Pearson相关性,其中Pearson相关系数为0.984 2。图12为LU_PPG在IEEE数据上的心率估计的误差分布情况,从中可发现误差分布绝大部分位于[-5,5]次/min的区间范围,即平均绝对误差低于5 次/min。
图11 皮尔逊相关系数Fig.11 Pearson correlation coefficient
图12 心率估计误差分布Fig.12 Distribution of heart rate estimation error
3 总结
LU_PPG心率估计方法结合了深度学习与频谱分析,同时将LSTM与经典Unet网络相结合并创造性地应用在心率信息的提取上。利用IEEE SPC 2015公共数据集进行实验,以单通道的PPG信号为训练集,以心电信号的转换形式类正弦信号为标签,使用LSTM_Unet模型进行训练并拟合出类PPG信号,最后通过频谱分析得到心率值。实验结果表明,LU_PPG方法在公共数据集的大多数记录都优于经典方法TROKIA和深度学习方法Deep PPG。这表明该算法在人体心率估计的有效性以及在健身活动中的实用性。
尽管已经取得不错的效果,但仍存在以下不足。
(1)后续将引入迁移学习,由于所利用的数据集现实环境有限,模型的泛化能力不强。因此,包含的后续将各种环境下所采集到的手腕数据送入训练好的模型并对其进行微调,以得到一个泛化能力更强的深度学习模型。
(2)由于手腕部位的PPG所受到的噪声干扰非常严重,后续将寻求噪声干扰影响更小的部位(如耳垂、指尖等部位),以获得更高准确率的心率估计。
(3)由于所提出的神经网络模型所占内存小,仅1.59M,后续将尝试利用嵌入式AI测量心率。