Advertisement

使用小波分析和深度学习对心电图 (ECG) 进行分类

阅读量:

详细地搭建了软硬结合的技术架构访问] MCU AI 技术页面 _ MCU AI 人工智能

该示例阐述了如何运用连续小波变换(CWT)和深度卷积神经网络(CNN)对人体心电图(ECG)信号进行了分类。

从零开始训练深度 Conv 网络会产生较高的计算开销,并且要求充足的训练样本。在许多应用场景中缺乏足够的标注数据资源,并且手动生成符合实际需求的真实标注样本也是不可行的方案。在这种情况下借鉴基于大规模数据集训练好的现成神经网络模型来处理相似的任务具有显著的价值性。这种技术被称为迁移学习,在本例中我们采用预训练图像识别领域的 GoogLeNet 模型(该模型经过ImageNet等大规模图像分类任务的数据集进行过专业级别的微调)进行推理运算

Google 网络架构最初设计用于将图像划分为 1,000 种类别,并且我们可以利用该 CNN 的架构来处理基于小波变换的时间序列图像对心电图(ECG)信号进行分类。在本示例中使用的数据集可通过 PhysioNet 获取访问

本研究中采用来自三组受试者的ECG数据:包括心律失常患者(ARR)、充血性心力衰竭患者(CHF)以及健康窦性心律者(NSR)。共收集了162份ECG记录数据,并来源于三个公开的数据库: MIT-BIH Arrhythmia 数据库 [3][7]、MIT-BIH Normal Sinus Rhythm 数据库 [3] 和 BIDMC Congestive Heart Failure 数据库 [1][3]。详细说明了各组别所使用的具体数量:其中心律失常组提供了96个病例、充血性心力衰竭组贡献了30个病例、健康窦性组则提供了36个病例。研究目标是开发一个分类系统来区分这三种不同的临床类别。实例为MATLAB语言。

通过 GitHub® 下的存储库 physionet_ECG_data 获取数据包,并对文件进行解压处理至临时目录中。

unzip(fullfile(tempdir,"physionet_ECG_data-main.zip"),tempdir)

解压操作将在您的临时目录中生成 physionet-ECG_data-main 文件夹。其中包含README.md 文本文件和EIG Data压缩包。该压缩包内嵌入了三个组件:ECGData.mat、Modified_physionet_data.txt 以及 License.txt。

该MATLAB数据文件EcgData.mat存储了本示例所涉及的数据。该文本文件Modified_physionet_data.txt详细说明了数据来源,并描述了在每份ECG录音上应用的预处理步骤。解压缩 physionet-ECG_data-main 中的 ECGData.zip并将这些数据文件导入到您的MATLAB工作区中。

unzip(fullfile(tempdir,"physionet_ECG_data-main","ECGData.zip"), ...

fullfile(tempdir,"physionet_ECG_data-main"))

load(fullfile(tempdir,"physionet_ECG_data-main","ECGData.mat"))

ECGData 由两个字段构成的结构体数组。这些字段名为 Data 和 Labels。这些数据分别标记为 ARR(心房颤动)、CHF(心力衰竭)和 NSR(正常心律)。

绘制每个 ECG 类别的表示图。

image.png

完成文件夹创建后

Fs = 128;

fb = cwtfilterbank(SignalLength=1000, ...

SamplingFrequency=Fs, ...

VoicesPerOctave=12);

sig = ECGData.Data(1,1:1000);

[cfs,frq] = wt(fb,sig);

t = (0:999)/Fs;

figure

pcolor(t,frq,abs(cfs))

set(gca,"yscale","log")

shading interp

axis tight

title("Scalogram")

xlabel("Time (s)")

ylabel("Frequency (Hz)")

image.png

将尺度图转换为RGB图像,并将其保存到dataDir中的对应子目录中。每个RGB图像的尺寸是224x224x3的三维数组。

随机将图像分为两组,并使其中一组用于训练而另一组则用于验证。采用 80% 的图像进行训练,并使剩下的则用于验证。

加载预训练的 GoogLeNet 神经网络,绘制结构图。

复制代码
image.png

在神经网络架构中,每一层均可被视为一种滤波器。较浅层能够识别图像中的基本特征类型(如纹理模式、边缘轮廓以及颜色分布)。而深层则专注于更加细致的特征识别(如形状细节或纹理信息)。经过训练后,GoogLeNet能够实现对图像进行分类任务,并划分至1000个不同的类别(ImageNet)。针对我们所研究的心电图(ECG)分类问题,则需要对原始模型进行重新训练

检查网络的最后五层。

lgraph.Layers(end-4:end)

ans =

5×1 Layer array with layers:

1 'pool5-7x7_s1' 2-D Global Average Pooling 2-D global average pooling

2 'pool5-drop_7x7_s1' Dropout 40% dropout

3 'loss3-classifier' Fully Connected 1000 fully connected layer

4 'prob' Softmax softmax

5 classification outputs using the crossentropy loss function, which includes the tench class and an additional 999 other classes.

为了防止模型过拟合问题出现,采用了随机失活层。该随机失活层通过将输入特征按给定概率置零来实现失活过程。其中,默认失活概率设定为 0.5。在本研究中,在网络结构中最终设置了 pool5-drop_7x7_s1 的丢失节点数,并将其对应的丢失比例调整至 0.6

复制代码

全部评论 (0)

还没有任何评论哟~