主要内容

创建标记信号集迭代和减少人类的努力

这个例子中提出了一种基于迭代的深度学习工作流程减少人类标签标签信号的努力。

标签信号数据是一项繁琐和昂贵的任务,需要投入大量人力物力。想办法减少这种努力可以显著加快发展的深度学习信号处理问题的解决方案。万博 尤文图斯

考虑兴趣的任务标记区域的信号数据集。第一种方法包括手工标记的所有数据。这种方法需要大量的时间和精力。另一种方法,探索了在这个例子中,将标签迭代过程。在每个迭代中,信号的一个子集选择无标号数据集和发送到pretrained深层网络自动标记。一个人贴标签机检查生成的标签和纠正错误的标签。验证标记信号被添加到一个训练数据集进行再培训的深度网络扩展训练数据。

在每个迭代中,人类贴标签机仍然访问和检查所有标签的信号的网络。然而,从标签信号的任务从头纠正不准确的标签由一个可靠的网络。后一个任务需要大大减少人工标注工作。在每一个新的迭代,网络与越来越多的数据训练,使网络的预测和标签的性能改善。因此,在每次迭代中,越来越少的人工干预是需要正确的标签。

这个例子遵循的过程波形分割使用深度学习训练很长一段短期记忆(LSTM)网络,可以分类ECG信号样本属于感兴趣的三个地区之一。

数据

这个例子认为ECG信号的标签区域使用QT数据库中的数据公开[1][2]。大约15分钟的数据由共有105名患者的心电图记录。获得每个记录,审查员把两个电极放在不同的位置在一个病人的胸部,导致双通道信号。数据库提供了信号区域标签由一个自动生成专家系统(3]。标签对应的位置P波、T波,心电图QRS波群地区测量。每个通道的105双通道心电图信号被自动标记为独立专家系统和独立处理210心电图信号存储与该地区在210年mat文件标签。文件可以在以下位置://www.tianjin-qmedu.com/万博1manbetxsupportfiles/SPT/data/QTDatabaseECGData1.zip

下载数据集使用download万博1manbetxSupportFile函数。

%下载数据datasetZipFile = matlab.internal.examples.download万博1manbetxSupportFile (“SPT”,“数据/ QTDatabaseECGData1.zip”);datasetFolder = fullfile (fileparts (datasetZipFile),“QTDataset”);如果~存在(datasetFolder“dir”)解压缩(datasetZipFile fileparts (datasetZipFile));结束

解压缩操作创建datasetFolder有210 mat文件的文件夹。每个文件包含一个心电图信号变量ecgSignal和地区表标签变量signalRegionLabels。每个文件也包含在变量信号的采样率Fs。在这个例子中所有信号的采样率为250 Hz。

创建一个信号数据存储访问文件中的数据。指定信号变量名称要读取每个文件使用SignalVariableNames参数。

sds = signalDatastore (datasetFolder,“SignalVariableNames”,(“ecgSignal”,“signalRegionLabels”]);

双元素单元阵列数据存储返回的ECG信号和一个表区域标签每次调用函数。使用预览数据存储的函数,第一个文件的内容是一个长225000样品ECG信号和一个表包含3385个地区的标签。

data =预览(sds)
data =2×1单元阵列{225000×1双}}{3385×2表

看看该地区的前几行标签表,观察每一行包含区域限制指数和区域类值(P T或QRS)。

{2}(数据)
ROILimits价值__________ _____ 83 117 130页153 QRS 201 246 285 319 332页357 QRS 412 457 T QRS 477 507 524页547

可视化标签1000个样本使用signalMask对象。

{2}MGroundTruth = signalMask(数据);plotsigroi (MGroundTruth、数据{1}(1:1000))

的标签转换为一个分类序列能够训练深度网络执行sequence-to-sequence分类。使用变换数据存储应用转换的函数时,信号从磁盘读取数据。

numFiles =元素个数(sds.Files);sds =变换(sds、@getmask);

调整(分裂)和标签的信号获取多个片段长度5000样品和每个ECG段转换成使用傅里叶synchrosqueezed变换的时频域(FSST)。

sds =变换(sds、@resizeData);@ sdsFSST =变换(sds (x, fs) extractFSSTFeatures (x, 250));

使用70%的文件培训和测试为30%。洗牌数据集的训练和测试信号是随机抽取的。

rng默认的[trainIdx, ~, testIdx] = dividerand (numFiles, 0.7, 0, 0.3);trainDs =子集(sds、trainIdx);%的大小5000样本信号和标签trainDsFSST =子集(sdsFSST trainIdx);% FSST-transformed信号和标签testDsFSST =子集(sdsFSST testIdx);

读取所有数据使用的readall方法数据存储到内存中。这一行动将读取每个ECG信号和上面描述的所有转换适用于返回多个傅里叶synchrosqueeze-transformed心电图段。使用UseParallel选择变换可用处理器的并行数据集使用你的电脑只要你有并行计算工具箱™。

%得到FSST-transformed信号ecgFSSTData = readall (trainDsFSST UseParallel = true);
开始平行池(parpool)使用“本地”概要文件…连接到平行池(工人数量:8)。
testFSSTData = readall (testDsFSST UseParallel = true);ecgFSST = ecgFSSTData (: 1);ecgLabels = ecgFSSTData (:, 2);testECGFSST = testFSSTData (: 1);testLabels = testFSSTData (:, 2);%得到时域信号段,这样我们可以画出一些标签的结果ecgData = readall (trainDs);ecgSignals = ecgData (: 1);

这个例子表明,可以减少人类努力参与信号标签通过迭代训练网络。在每一次迭代:

  1. 网络标签标记数据帧使用先前标记帧的一个子集。

  2. 一个人贴标签机手工纠正任何标签错误。

  3. 修正后的标签添加到先前标记为帧。

  4. 扩展的标记集信号用于训练网络为下一次迭代。

进行定量比较,模拟两个场景:

  • 对于基线场景,人类的标签从头整个数据集,训练网络使用完整的标签ecgFrames集。

  • 对于第二个场景,假装ecgFrames数据标记和标签使用迭代方法

使用完全预测性能标签心电图数据集

建立一个BiLSTM网络和训练它完整的标签ecgFrames将得到一个prediction-performance上界。正如上面提到的,这种方法需要强力标签的数据集,因此人类最大的标签。列车网络标签ecgFrames设置和计算测试数据集上的预测精度。

网络体系结构

使用深度学习创建一个BiLSTM网络层。

  • 指定一个sequenceInputLayer的大小随着特征数量的FSST的信号,即频域样本总数在这个例子中(40)。

  • 指定一个bilstmLayer200年隐藏节点和设置OutputMode序列因为每个信号样本的标签。

  • 指定一个fullyConnectedLayer相应的输出尺寸4四类,P波、QRS波群,T波,N / A。

  • 添加一个softmaxLayer和一个classificationLayer输出估计标签。

%与完整的模拟训练无标号数据集层= [sequenceInputLayer(大小(ecgFSST {1}, 1)) bilstmLayer(200年“OutputMode”,“序列”)fullyConnectedLayer (4) softmaxLayer classificationLayer];

使用traningOptions指定优化解算器和hyperparameters训练网络。下面的例子使用了亚当优化和mini-batch大小为50。列车网络使用一个CPU或GPU。使用GPU需要并行计算工具箱™。看到支持gpu,明白了万博1manbetxGPU计算的需求(并行计算工具箱)。其他参数的信息,请参阅trainingOptions(深度学习工具箱)。这个示例使用GPU培训使用'ExecutionEnvironment的名称-值对。

选择= trainingOptions (“亚当”,“MaxEpochs”10“MiniBatchSize”,50岁,“ExecutionEnvironment”,“图形”,“InitialLearnRate”,0.01,“LearnRateDropPeriod”6“LearnRateSchedule”,“分段”,“GradientThreshold”,1“洗牌”,“every-epoch”,“阴谋”,“训练进步”,“详细”0,“DispatchInBackground”,真正的);

列车的网络完全标记ecgFrames数据集。

baselineNet = trainNetwork (ecgFSST、ecgLabels层,选择);

分类测试框架使用训练有素的网络和计算平均预测精度。基线预测精度约为90%。

predictLabelsAll =分类(baselineNet testECGFSST,“MiniBatchSize”,50);accuracyAll =意味着(cellfun (@ (x, y) (x = = y), predictLabelsAll, testLabels));流(的基线预测精度是2.1 f % % %。\ n”,accuracyAll * 100);
基线预测精度为89.9%。

循环迭代标签与人类

降低标签的努力,尝试迭代方法:假装ecgFrames数据集最初手动标记和数据标记。在现实中,提供的示例使用地面实况标签数据集。

火车一个初始网络

通过选择25帧的开始ecgFrames手动设置和标签。火车BiLSTM网络的初始标记集作为初始迭代过程的步骤。

numInitFrames = 25;currentTrainingSet = ecgFSST (1: numInitFrames, 1);currentTrainingLabels = ecgLabels (1: numInitFrames);

设置培训选择有更多的时代和一个较小的mini-batch大小因为只有25帧在最初的训练数据集。

选择= trainingOptions (“亚当”,“MaxEpochs”,20岁,“MiniBatchSize”5,“ExecutionEnvironment”,“图形”,“InitialLearnRate”,0.01,“LearnRateDropPeriod”6“LearnRateSchedule”,“分段”,“GradientThreshold”,1“洗牌”,“every-epoch”,“阴谋”,“没有”,“详细”0,“DispatchInBackground”,真正的);

火车BiLSTM网络初始训练数据集和预测标签使用相同的测试数据集用于建立性能基线。这个初始网络的预测精度约为40%。

initNet = trainNetwork (currentTrainingSet、currentTrainingLabels层,选择);initPrediction =分类(initNet testECGFSST,“MiniBatchSize”,50);initAccuracy =意味着(cellfun (@ (x, y) (x = = y), initPrediction, testLabels));流(预测精度是f % % % 2.1。\ n”,initAccuracy * 100);
预测精度为43.7%。

标签

在下一步,选择200的新数据帧ecgFrames集,并将它们提供给pretrained网络,initNet,标签自动信号。

迭代= 1;%的帧数在每个迭代标签numFrames = 200;%选择下一组帧标签indexNext = numInitFrames + 1: numInitFrames + numFrames;%使用分类标签的新框架currentPrediction =分类(initNet ecgFSST (indexNext),“MiniBatchSize”,50);

评估网络生成的标记结果,比较它们在地上的真理。发现心电图信号的指数有最好的和最坏的性能与这个网络。

犯错误= cellfun (@ (x, y)和(x ~ = y) ecgLabels (indexNext) currentPrediction);[~,bestIndex] = min(错);[~,worstIndex] = max(错);

对于最好的场景,情节真实的前750个样本覆盖标签和标签预测的网络。

ecgSignalOfInterest = ecgSignals {indexNext (bestIndex)};groundTruthLabels = ecgLabels {indexNext (bestIndex)};predictedLabels = currentPrediction {bestIndex};MGroundTruth = signalMask (groundTruthLabels);图plotsigroi (MGroundTruth ecgSignalOfInterest(1:750)标题(“地面实况——最好的情况”)

MPredicted = signalMask (predictedLabels);图plotsigroi (MPredicted ecgSignalOfInterest(1:750)标题(网络的标签——最好的情况)

网络标签帧做了一个好工作。因此,一个人检查的结果网络可以正确预测的标签。

然而,在某些情况下,网络的标签性能并不旺盛。获得的结果在最坏的情况。

ecgSignalOfInterest = ecgSignals {indexNext (worstIndex)};groundTruthLabels = ecgLabels {indexNext (worstIndex)};predictedLabels = currentPrediction {worstIndex};MGroundTruth = signalMask (groundTruthLabels);图plotsigroi (MGroundTruth ecgSignalOfInterest(1:750)标题(“地面实况——最糟糕的情况”)

MPredicted = signalMask (predictedLabels);图plotsigroi (MPredicted ecgSignalOfInterest(1:750)标题(网络——最糟糕的情况”的标签)

网络的性能在这个信号不是那么好。在这种情况下,一个人贴标签机必须做出一些修正预测的标签。

量化修正为200数据帧,计算网络的标签错误率和样品每帧的平均数量,必须纠正人类贴标签机。

numSamplesPerFrame = 5000;networkLabelingErrorRate(迭代)= 1,就意味着(cellfun (@ (x, y) (x = = y), currentPrediction, ecgLabels (indexNext)));averageNumOfCorrectionsPerFrame(迭代)= networkLabelingErrorRate(迭代)* numSamplesPerFrame;流(修正每帧的平均数量是% 2.1 f。\ n 'averageNumOfCorrectionsPerFrame(迭代));
修正每帧的平均数是2211.3。

第一次迭代,平均约有2200个样本每帧必须纠正的人。修正样品每帧是一种方便的指标显示人类的努力。但是要注意,在实践中,一个人贴标签机没有纠正每个样本的标签。相反,人类贴标签机只有延长或缩短区域限制。

在第一次迭代结束后,人类将检查200帧和修改任何标签使用不正确的值。在网络的帮助下,人类的贴标签机,数据帧的正确标签的迭代。

在下一次迭代,可以添加到200新标签的帧currentTrainingSet将培训网络和重复标签迭代。这个图表说明了工作流在第一次迭代后的每一次迭代中:

重复迭代标签

通过添加新修正的扩展训练集标签帧,选择另一个200数据帧标记,重复标签迭代,直到性能令人满意。

%,包括最初的训练集和200年新标签的数据帧麦克斯特= 15;indexTraining = 1: numInitFrames + numFrames;networkAccuracy = 0 (1、15);networkAccuracy(迭代)= initAccuracy;选择= trainingOptions (“亚当”,“MaxEpochs”,20岁,“MiniBatchSize”,50岁,“ExecutionEnvironment”,“图形”,“InitialLearnRate”,0.01,“LearnRateDropPeriod”6“LearnRateSchedule”,“分段”,“GradientThreshold”,1“洗牌”,“every-epoch”,“阴谋”,“没有”,“详细”,0);迭代= 2:麦克斯特%扩展训练数据集currentTrainingSet = ecgFSST (indexTraining, 1);%真实模仿人类调整分配标签%扩展训练集currentTrainingLabels = ecgLabels (indexTraining);%与扩展训练集训练网络currentNet = trainNetwork (currentTrainingSet、currentTrainingLabels层,选择);%预测标签的测试数据集和计算的准确性%比较基线性能currentTestSetPrediction =分类(currentNet testECGFSST,“MiniBatchSize”,50);networkAccuracy(迭代)=意味着(cellfun (@ (x, y) (x = = y), currentTestSetPrediction, testLabels));%得到另一个人类贴标签机numFrames数据帧indexNext = indexTraining(结束)+ 1:indexTraining(结束)+ numFrames;%衡量人类的平均数量在这个迭代修正每帧currentPrediction =分类(currentNet ecgFSST (indexNext),“MiniBatchSize”,50);networkLabelingErrorRate(迭代)= 1,就意味着(cellfun (@ (x, y) (x = = y), currentPrediction, ecgLabels (indexNext)));averageNumOfCorrectionsPerFrame(迭代)= networkLabelingErrorRate(迭代)* numSamplesPerFrame;indexTraining = 1: indexNext(结束);结束

标签的性能

经过15标签迭代,有2825个数据帧currentTrainingSet,相应的大约一半的6543数据帧中包含完整的ecgDataset集。网络的预测精度训练2825帧已经非常接近基线精度。

accuDiff = accuracyAll-networkAccuracy(结束);流(的精度差别是f % % % 2.1。\ n”,accuDiff * 100);
精度的区别是2.1%。

情节的网络预测精度测试数据集对训练数据集的大小在每个迭代。显示的准确性得到的上界完全标记数据集。随着越来越多的数据帧进行验证,网络的预测精度得到改善。

图examinedDataSize = 25:200:2825;情节(examinedDataSize networkAccuracy,“* - - - - - -”)举行%预测精度上界情节(examinedDataSize (15) * accuracyAll,“r——”网格)包含(训练集规模的)标题(的精度测试数据集的)xlim(25[2825])传说(“标签网络”,“上界”,“位置”,“东南”)

作为迭代的进展,人类修正每帧的平均数量增加作为训练数据集的大小减少。随着越来越多的数据帧进行验证和用于训练网络,减少人类的努力是需要正确的标签,选中的帧。

图绘制(examinedDataSize averageNumOfCorrectionsPerFrame,“* - - - - - -”网格)包含(训练集规模的)标题(“人类修正每帧的平均数量”)xlim([2825] 25日)

所有15个标签迭代,平均约700信号样本每帧需要人类的修正。正如前面提到的,在实践中,一个人纠正标记区域通过延长或缩短区域限制,而不是通过改变单个样品标签。

流(修正每帧的平均数量是% 2.1 f。\ n '意思是(averageNumOfCorrectionsPerFrame));
修正每帧的平均数是716.9。

结论

这个例子表明,标签只有一半的心电图数据集允许深度网络达到预测精度与通过网络训练时完全相同标签的数据集。提出了迭代标签工作流,人类贴标签机需要看只有一半的数据集和正确的700年平均每帧信号样本。另一方面,强力标签需要查看每一帧的数据集和标签样本。

引用

[1]不氩L。,Luis A. N. Amaral, Leon Glass, Jeffery M. Hausdorff, Plamen Ch. Ivanov, Roger G. Mark, Joseph E. Mietus, George B. Moody, Chung-Kang Peng, and H. Eugene Stanley. "PhysioBank, PhysioToolkit, and PhysioNet: Components of a New Research Resource for Complex Physiologic Signals." Circulation. Vol. 101, Number 23, 2000, pp. e215–e220. [Circulation Electronic Pages; http://circ.ahajournals.org/content/101/23/e215.full].

[2]拉古纳,巴勃罗,罗杰·g·马克,必要l . Goldberger和乔治·b·穆迪。“数据库评估算法测量心电图QT间隔和其他波形的。”Computers in Cardiology. Vol.24, 1997, pp. 673–676.

[3]拉古纳,巴勃罗,Raimon简,Pere Caminal。“自动波边界的检测多引入线的心电图信号:与CSE数据库验证。”Computers and Biomedical Research. Vol. 27, Number 1, 1994, pp. 45–60.

另请参阅

|