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

   具体的软硬件实现点击MCU-AI技术网页_MCU-AI人工智能

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

从头开始训练深度 CNN 的计算成本很高,并且需要大量的训练数据。在很多应用中,并没有足够数量的训练数据可用,并且人工新建符合实际情况的训练数据也不可行。在这些情况下,利用已基于大型数据集训练的现有神经网络来完成概念相似的任务是可取的。这种对现有神经网络的利用称为迁移学习。在本示例中,采用预训练深度神经网络GoogLeNet(GoogLeNet针对图像识别进行过预训练).

GoogLeNet 是深度 CNN,最初是用于将图像分类至 1000 个类别。我们可重用 CNN 的网络架构,以基于时间序列数据的 CWT 图像对 ECG 信号进行分类。本示例中使用的数据可从 PhysioNet 公开获取。

在本示例中,使用从三组人获得的 ECG 数据:心律失常者 (ARR)、充血性心力衰竭者 (CHF) 和正常窦性心律者 (NSR)。总共使用来自三个 PhysioNet 数据库的 162 份 ECG 录音:MIT-BIH Arrhythmia 数据库 [3][7]、MIT-BIH Normal Sinus Rhythm 数据库 [3] 和 BIDMC Congestive Heart Failure 数据库 [1][3]。更具体地说,使用了心律失常者的 96 份录音、充血性心力衰竭者的 30 份录音和正常窦性心率者的 36 份录音。目标是训练一个分类器来区分 ARR、CHF 和 NSR。实例为MATLAB语言。

从 GitHub® 仓库下载数据,将文件解压缩到临时目录中。

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

解压缩会在您的临时目录中创建文件夹 physionet-ECG_data-main。此文件夹包含文本文件README.md和ECGData.zip。ECGData.zip文件包含ECGData.mat  Modified_physionet_data.txt  License.txt

  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

  

在创建文件夹后,创建 ECG 信号的时频表示。这些表示称为尺度图。尺度图是信号的 CWT 系数的绝对值。要创建尺度图,请预先计算一个 CWT 滤波器组。当要使用相同的参数获取众多信号的 CWT 时,建议预先计算 CWT 滤波器组。我们先尝试生成一个尺度图。使用 cwtfilterbank (Wavelet Toolbox) 为具有 1000 个采样的信号创建一个 CWT 滤波器组。使用滤波器组获取信号的前 1000 个采样的 CWT,并基于系数获得尺度图。

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 图像是大小为 224×224×3 的数组。

将图像随机分成两组,一组用于训练,另一组用于验证。使用 80% 的图像进行训练,其余的用于验证。

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

   

   net = googlenet;
   lgraph = layerGraph(net);
numberOfLayers = numel(lgraph.Layers);
figure("Units","normalized","Position",[0.1 0.1 0.8 0.8])
plot(lgraph)
title("GoogLeNet Layer Graph: "+num2str(numberOfLayers)+" Layers")

image.png

   

网络架构中的每层都可以视为一个滤波器。较浅的层识别图像的更常见特征,如斑点、边缘和颜色。后续层侧重于更具体的特征,以便区分类别。GoogLeNet 经训练可将图像分类至 1000 个目标类别。对于我们的 ECG 分类问题,必须重新训练 GoogLeNet。

检查网络的最后五层。

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   'output'              Classification Output   crossentropyex with 'tench' and 999 other classes

为防止过拟合,使用了丢弃层。丢弃层以给定的概率将输入元素随机设置为零。默认概率为 0.5。将网络中的最终丢弃层 pool5-drop_7x7_s1 替换为概率为 0.6 的丢弃层。

newDropoutLayer = dropoutLayer(0.6,"Name","new_Dropout");
lgraph = replaceLayer(lgraph,"pool5-drop_7x7_s1",newDropoutLayer);

   网络的卷积层会提取最后一个可学习层和最终分类层用来对输入图像进行分类的图像特征。GoogLeNet 中的 loss3-classifier 
和 output 这两个层包含有关如何将网络提取的特征合并为类概率、损失值和预测标签的信息。要重新训练 GoogLeNet 以对 RGB 图像
进行分类,请将这两个层替换为适合数据的新层。将全连接层 loss3-classifier 替换为新的全连接层,其中滤波器的数量等于类的
数量。要使新层中的学习速度快于迁移的层,请增大全连接层的学习率因子。

numClasses = numel(categories(imgsTrain.Labels));
newConnectedLayer = fullyConnectedLayer(numClasses,"Name","new_fc", ...
    "WeightLearnRateFactor",5,"BiasLearnRateFactor",5);
lgraph = replaceLayer(lgraph,"loss3-classifier",newConnectedLayer);

  分类层指定网络的输出类。将分类层替换为没有类标签的新分类层。trainNetwork 会在训练时自动设置层的输出类。

  newClassLayer = classificationLayer("Name","new_classoutput");
lgraph = replaceLayer(lgraph,"output",newClassLayer);

   训练神经网络是一个使损失函数最小的迭代过程。要使损失函数最小,使用梯度下降算法。在每次迭代中,会评估损失函数的梯度
并更新下降算法权重。

options = trainingOptions("sgdm", ...
    MiniBatchSize=15, ...
    MaxEpochs=20, ...
    InitialLearnRate=1e-4, ...
    ValidationData=imgsValidation, ...
    ValidationFrequency=10, ...
    Verbose=1, ...
    Plots="training-progress");
    
    使用验证数据评估网络。
    
    [YPred,~] = classify(trainedGN,imgsValidation);
accuracy = mean(YPred==imgsValidation.Labels);
disp("GoogLeNet Accuracy: "+num2str(100*accuracy)+"%")

GoogLeNet Accuracy: 93.75%
  • 33
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ECG分析是一种用于检测心脏疾病的方法,而基于深度学习ECG心律失常分类则是一种新兴的技术。这种技术利用深度学习算法对ECG数据进行分析和分类,以便更准确地诊断心脏疾病。这种技术的入门需要掌握深度学习的基本原理和ECG数据的基本知识,同时需要了解常见的心律失常类型及其特征。通过学习和实践,可以逐步掌握这种技术,并在实际应用中取得良好的效果。 ### 回答2: ECG分析是指通过对心电图(ECG)数据进行处理和分析,得出心脏的生理状况和心律失常的情况。而基于深度学习ECG心律失常分类则是一种新兴的、快速而准确的心律失常诊断方法,可以在短时间内对不同类型的心律失常进行自动识别和分类。下面将介绍ECG分析中使用深度学习技术的基本原理。 ECG信号是一种时间序列信号,包含不同的波形特征,例如P波、QRS波和T波等,这些波形特征反映了心跳时心肌的电生理变化。基于深度学习ECG心律失常分类可以分为三个步骤: 第一步是数据预处理,包括数据清洗、信噪比提高等,这是保证模型准确性的关键步骤。 第二步是特征提取,这是深度学习方法的核心。传统的特征提取方法是基于图像处理、信号处理等领域,需要大量的人工设计。而基于深度学习的特征提取则是通过网络学习参数,自动地找到最能区分不同心律失常的特征。常见的网络结构包括卷积神经网络(CNN)和循环神经网络(RNN)等。 第三步是模型训练和测试。通常,我们将数据集划分为训练集、验证集和测试集三部分,用训练集来训练模型,用验证集来选择最优的模型超参数,用测试集来测试模型的准确性。模型的准确性可以用准确率、召回率、F1值等指标进行评价。 总之,基于深度学习ECG心律失常分类具有高效、准确、自动化等优势,可以大大提高ECG信号的处理速度和心律失常的诊断准确性,对心血管疾病的早期预防和治疗具有重要意义。 ### 回答3: ECG(电生理图)是评估心脏健康状况的重要工具。ECG在医生的指导下具有高精度和可靠性,但是ECG检查的数量庞大,医生需要花费大量时间和精力来进行ECG分析。深度学习技术已经被应用于ECG分析中,以实现较高的自动化程度。 基于深度学习ECG心律失常分类技术旨在通过机器学习来处理ECG数据,以自动分类心律失常。常见的ECG心律失常包括心房颤动、心室颤动、心房扑动、快速地、慢速的、心动过缓、心动过速等等。 ECG数据的分析可以通过传统的机器学习方法实现,但这种方法的准确度和性能通常较低。深度学习技术可以在更高水平上对ECG数据进行分析,从而实现更准确、更可靠的分类。 基于深度学习ECG心律失常分类技术通常需要三个关键组件: 1. 数据集:深度学习模型需要大量的数据来进行训练。ECG数据集应具有多样性,因为ECG数据在不同人群中可能存在差异。 2. 深度学习模型:深度学习模型是ECG分类的核心。现在有许多ECG分类模型可以使用,例如卷积神经网络(CNN)和递归神经网络(RNN)。 3. 训练和测试:训练和测试是深度学习模型的关键步骤。在训练期间,模型从数据集中学习数据的特征和模式。测试过程评估训练后的模型的性能,以确定它在分类ECG心律失常方面的精度和可靠性。 总之,基于深度学习ECG心律失常分类技术通过自动化分类ECG数据,可以帮助医生更快速、准确地诊断ECG心律失常。尽管仍需更多的研究和开发,但这项技术的潜力很大,可以提高医疗保健的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值