MATLAB中文论坛 文章 技术专栏 深度学习 查看内容

信号处理与深度学习结合:实战心电信号分类

2021-2-24 10:41| 发布者: MsM18| 查看: 4593| 评论: 0|原作者: 陈宜欣

摘要: 图像和信号是深度学习最主要的数据源。本文将由浅入深介绍信号处理与深度学习结合,并通过一个实例来带领大家一起解决研究和工程问题。

入门视频:信号处理中的深度学习:学习如何利用各种技术,如时频变换和小波散射网络,并结合卷积神经网络和递归神经网络来建立信号的预测模型。

帮助文档:该示例的完整内容请点击参考帮助文档


其实深度学习已广泛地应用于人脸检测语音识别自动驾驶等多个场景中,成为我们日常生活中的一部分。图像和信号是深度学习最主要的数据源。本文将由浅入深介绍信号处理与深度学习结合,并通过一个实例来带领大家一起解决研究和工程问题。
我们寄希望于使用深度学习显著提高结果的准确率,甚至解决此前解决不了的问题。然而,并不是直接将深度学习模型替换原有显式规则或机器学习模型,就可以达到这一效果。对于以信号为输入数据的问题来说,有效的信号处理对模型预测有很大的帮助。我们可以将深度学习应用于与信号相关的问题;同时,通过有效的信号处理,帮助深度模型更好地学习信号的内在模式,提高结果准确率。
我们首先来了解一下深度学习的一般工作流程。


深度学习工作流
为解决实际科研和工程问题,MathWorks 提出了以下深度学习应用的工作流程。

流程主要包含四个部分:创建和访问数据集、预处理和数据变换、开发预测模型、加速和部署。通常,科研工作者会更关注中间的两部分,而对于工程问题,不仅要考虑算法开发,同时要关注如何获取到真实有效的数据,以及最终将模型部署于商业商品中。


信号处理解决方案
传统的信号处理主要有预处理和数据变换、特征提取两部分。对于深度学习来说,标注数据不可或缺;由于所需数据量很大,数据管理也非常重要。对于实际工程问题,算法通常会以 C/HDL 代码形式运行于实际产品或设备中,因此还需要代码生成。

MATLAB 提供的信号处理解决方案,提供了对深度学习工作流中第二部分——预处理和数据变换的全面支持。以上功能主要使用到的工具箱以 Signal Processing Toolbox 为主。此外,对于传感器阵列和声音信号,以及时频分析技术中的小波,MATLAB 也有特定工具箱作为支持。

标注
标注是应用深度学习不可或缺的一部分,Signal Labeler 应用提供了信号的属性、ROI(Region of Interest)、POI(Point of Interest) 的标注功能。标注数据以特定格式进行存储。同时提供了基于现有算法进行自动标注的功能,可以减少人工标注工作量。
Signal Labeler App
预处理和数据变换
通过预处理去除数据的异常信息和无用信息,保留有效和关键信息。MATLAB 的 Signal Analyzer 应用提供了可视化的界面,可以进行交互式的信号探查、预处理和信号变换。包括基础的去趋势、平滑、滤波等工具,如需进行定制的滤波器设计,可以使用 Filter DesignerFilter Builder 应用。
通过信号变换,对信号进行频域和时频分析,探查时域难以获取的信息。其中,Signal Analyzer 应用提供了基于傅里叶变换的频域变换,以及基于短时傅里叶变换和小波的时频变换。
Signal Analyzer App

开发预测模型

对于以信号作为输入的问题,有两种常用方法。将信号转换为图像,使用卷积神经网络(CNN);直接使用一维序列信号,使用长短时记忆网络(LSTM)。
CNN 结构图
模型开发可以通过命令形式,或者使用 Deep Network Designer 进行可视化开发和优化。

Deep Network Designer App
根据数据集和领域知识选择方法
深度学习与机器学习的一大区别是,深度学习通常使用的是多层神经网络,具备特征提取的功能。也就是说,深度学习可以覆盖我们原有部分由信号处理工程师手动进行的工作。甚至在某些情况下,我们无需预处理和数据变换,可以直接将原始数据输入深度学习模型中,直接得到我们想要的结果。机器学习需要我们掌握更多的信号处理知识,而深度学习需要更大的数据集和计算资源。根据数据集和领域知识的情况,选择最适合的方法。

应用示例:使用长短时记忆(LSTM)网络进行心电信号(ECG)分类

简介:心电图记录一个人心脏在一段时间内的电活动。医生用心电图来直观地检测病人的心跳是否正常或不规则。心房颤动(AFib)是一种常见的心律失常,简称房颤。通过信号处理和深度学习,可以进行正常与不规则心跳的二分类。

两种使用信号处理和深度学习进行ECG分类的方法
1. 下载数据集
本例使用来自 Physionet 2017 挑战赛的心电图数据,可在 https://physinet.org/challenge/2017/ 获取数据。数据由一组 300Hz 的心电信号组成,由一组专家分成四个不同的类别:正常(N)、AFib(a)、其他节律(O)和噪声记录(~)。这个例子展示了如何使用深度学习自动化分类过程,实现区分正常心电图信号和房颤信号。

正常和房颤的 ECG 原始信号
2. 信号预处理和变换
对于深度模型的输入,比较直观的方法是,直接将原始信号作为训练和测试数据。这利用了深度模型具备特征提取能力这一特性。然而,对于实际工程中采集到的数据,通常包含多种类型的噪声。此外,信号中同时包含了无效信息和有效信息。如果能将有效信息凸显出来,模型可以得到更好的结果。
对于 ECG 信号来说,一个周期既包含了短时高频的 QRS 波群,又包含了低频的 P 波、T 波和基线信息。时频分析适合这种随时间变化,频率分量也在变化的信号。因此,对本例中的信号,我们计算原始信号的频谱图(spectrogram)。

得到频谱图之后,一种方法是将图像输入 CNN 网络进行分类。这相当于将一维信号转换为图像,使用应用于图像的方法进行处理。

在本例中我们仍然以信号来表示时频分析的结果,这需要进行进一步变换。在时域提取两个时频矩(time-frequency moments):瞬时频率(instantaneous frequency)和频谱熵(spectral entropy)。

[instFreqA,tA]= instfreq(aFib,fs);

[instFreqN,tN]= instfreq(normal,fs);

正常和房颤的瞬时频率图

[pentropyA,tA2]= pentropy(aFib,fs);

[pentropyN,tN2]= pentropy(normal,fs);

正常和房颤的频谱熵图
通过观察可以发现正常和房颤ECG在瞬时频率和频谱熵中,在峰值点的个数、幅度等特征上有明显的差异。深度模型将会提取这些差异,并用于不断提高分类准确率。
3. 导入参考模型 LSTM

layers= [ ...

    sequenceInputLayer(1)

    bilstmLayer(100,'OutputMode','last')

    fullyConnectedLayer(2)

    softmaxLayer

    classificationLayer

    ]

这里使用命令搭建网络,网络结构为:序列输入层、双向 LSTM 层、全连接层、Softmax 层和分类层。

4. 训练和测试
设置训练参数。

options= trainingOptions('adam', ...

    'MaxEpochs',10, ...

    'MiniBatchSize', 150, ...

    'InitialLearnRate', 0.01, ...

    'SequenceLength', 1000, ...

    'GradientThreshold', 1, ...

    'ExecutionEnvironment',"auto",...

    'plots','training-progress', ...

    'Verbose',false);

训练加速:通过将参数 ExecutionEvnironment 设置为 auto,MATLAB 会自动选择训练环境。如果有可用的 GPU,选择 GPU 以加速训练,否则选择 CPU。此外,MATLAB 还支持多个 CPU 或多个 GPU 的并行计算,仅需通过修改参数即可选择。

训练网络。

net =trainNetwork(XTrain,YTrain,layers,options);


可视化训练过程

测试分类结果。 

trainPred= classify(net,XTrain,'SequenceLength',1000);

使用 ECG 原始信号的分类准确率为:66.22%。通过计算混淆矩阵,可以对测试结果进行评估。

使用瞬时频率和频谱熵的分类准确率为:80.10%。

结果显示,LSTM 网络可以对 ECG 信号进行有效的二分类,合适的信号处理方法有助于进一步提升深度网络的准确率,并降低训练时间。

网络部署:在实际应用中,如果需要将深度网络部署于系统,可以使用 GPU Coder 生成 CUDA 代码。生成的优化代码可以最大限度地减少内存传输、优化内存使用,并加速算法。
1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

最新评论

引用 红鼻子盗圣 2021-3-12 17:18
金山网殷兰友: 写的非常好 点赞
引用 金山网殷兰友 2021-2-26 12:09
写的非常好 点赞

信号处理与深度学习结合:实战心电信号分类

图像和信号是深度学习最主要的数据源。本文将由浅入深介绍信号处理与深度学习结合,并通过一个实例来带领大家一起解决研究和工程问题。

信号处理与深度学习结合:实战心电信号分类

图像和信号是深度学习最主要的数据源。本文将由浅入深介绍信号处理与深度学习结合,并通过一个实例来带领大家一起解决研究和工程问题。
关闭

站长推荐上一条 /5 下一条

返回顶部