主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

ラベル付き信号セットを作成して労力を軽減するための反復アプローチ

この例では,信号のラベル付けに伴う労力を軽減する,深層学習ベースの反復的なワークフローを紹介します。

信号データへのラベル付けは,多大な労力を必要とする手間と費用のかかるタスクです。この労力を軽減できれば,信号処理の問題に対する深層学習ソリューションの開発は,大幅に高速化される可能性があります。

信号データセット内の関心領域に対するラベル付けというタスクを検討します。最初のアプローチでは,データへのラベル付けを手作業で行います。このアプローチでは,多大な時間と労力が必要になります。この例で検証する代替手法では,ラベル付け処理を反復的に行います。各反復において,信号のサブセットがラベルの付いていないデータセットから選択され,自動ラベル付け用に事前学習済みの深層ネットワークに送信されます。ラベル付け担当者は,結果として得られたラベルを調査し,正しくないラベルを修正します。検証済みのラベル付き信号が学習データセットに追加され,拡張された学習データを使用して深層ネットワークに再学習させます。

それでもなお,ラベル付け担当者は,各反復において,ネットワークによってラベル付けされたすべての信号を確認および調査する必要があります。とはいえ,タスクは,ゼロからの信号へのラベル付けから,信頼性の高いネットワークが生成した不正確なラベルの修正に変化しています。後者のタスクで要求されるラベル付けの労力は,はるかに小さいものとなります。新しい反復ごとに,ネットワークに学習させるために使用するデータは多くなります。それにより,ネットワークの予測およびラベル付けのパフォーマンスが向上します。そのため,ラベル修正のために人が介入する必要性は,反復ごとに小さくなります。

データ

この例では,一般に公開されているQTデータベースのデータを使用した,心电图信号領域のラベル付けを検討します[1] [2]。データは,合105人計の患者からの約15分間の心电图の記録で構成されています。各記録を取得するために,検査員は患者の胸部の異なる場所に2つの電極を配置して,2チャネル信号にします。データベースは,自動化されたエキスパートシステムによって生成される信号領域ラベルを提供します[3.]。ラベルは,心电图測定におけるP波,R波,およびQRS群領域の位置に対応します。この例では,深層学習を使用した波形セグメンテーションで示されている手続きに従って双方向長短期記憶(BiLSTM)ネットワークの学習を行います。BiLSTMネットワークでは,心电图信号サンプルを3つの関心領域のいずれかに属するものとして分類できます。

GitHubリポジトリからデータをダウンロードします。この例では,一時ディレクトリにファイルを配置していて、その場所は MATLAB® のtempdirコマンドによって指定されると仮定しています。データファイルを解凍し、データを読み込みます。

解压缩(fullfile (tempdir,“QT_Database-master.zip”), tempdir)负载(fullfile (tempdir“QT_Database-master”“QTData.mat”))

補助関数displayWaveformLabelsを使用して,最初の患者から心电图信号の最初の1000サンプルをプロットします。このとき,エキスパートシステムがラベル付けした領域は,異なる色で塗り重ねられます。データセットには,余分なラベル“N / A”が含まれます。このラベルは3つの関心領域のいずれにも属さない信号サンプルを特定するために使用されます。

patientID = 1;signalVals = getSignal (QTData patientID);labelVals = getLabelValues (QTData patientID,“WaveformLabels_Chan1”);1:1000 displayWaveformLabels (signalVals (1), labelVals.Value (1:1000))

補助関数resizeSignalsを使用して,心电图信号とラベルのベクトルを各々が5000サンプル長のフレームに分割します。次いで,この関数はそれらのフレームをシャッフルして,データの70%を含む学習データセットとデータの30%を含むテストデータセットに分割します。

rng默认的[testFrames, testLabels ecgFrames、ecgLabels testInfo, ecgInfo] = resizeSignals (QTData, 0.3);

ecgFrames6543年には個,testFrames2768年には個のフレームが含まれます。変数ecgInfoは,学習データセットの各フレームの患者ID,チャネルID,およびサンプルインデックスを格納します。testInfoは,テストデータセットに関する同様の情報を格納します。

心电图フレームを時間——周波数領域に変換します。補助関数featureExtractionを使用して,対象となる周波数範囲[0.5,40]赫兹間の心电图信号フレームのフーリエシンクロスクイーズド変換を計算し,その平均を減算して標準偏差で除算することで,得られた変換を標準化します。

Fs = QTData.SampleRate;testFrames = featureExtraction (testFrames, Fs);ecgFrames = featureExtraction (ecgFrames, Fs);

この例では,深層ネットワークに反復的に学習させることにより,信号のラベル付けに伴う労力を軽減できることを示します。各反復では次が行われます。

  1. ネットワークが,以前にラベル付けされたフレームを使用して,ラベルが付いていないデータフレームのサブセットにラベル付けします。

  2. ラベル付け担当者が,ラベル付けの誤りを手作業で修正します。

  3. 修正されたラベル付けが,以前にラベル付けされたフレームに追加されます。

  4. 拡張されたラベル付き信号のセットが,次回の反復に向けたネットワークの学習に使用されます。

定量的な比較を行うために,次の2つのシナリオをシミュレーションします。

  • 基本となるシナリオでは,人がゼロからデータセット全体にラベル付けを行い,完全にラベル付けされたecgFramesセットを使用してネットワークに学習させます。

  • 2番目のシナリオでは,ecgFramesデータにラベルが付いておらず,そのラベル付けを反復的な方法で行うものとします。

完全にラベル付けされた心电图データセットを使用した予測パフォーマンス

BiLSTMネットワークを作成し,完全にラベル付けされたecgFramesセットを使用してそのネットワークに学習させることにより,予測パフォーマンスの上限を得ます。上述のように,このアプローチではデータセット全体に対して総当たり的なラベル付けが必要になり,必要な労力が最大となります。ラベル付けされたecgFramesセットでネットワークに学習させ,テストデータセットに対する予測精度を計算します。

ネットワークアーキテクチャ

深層学習層を使用してBiLSTMネットワークを作成します。

  • 信号のFSSTに含まれる特徴の数(周波数領域サンプルの総数。この例では40)をサイズとして使用して,sequenceInputLayerを指定します。

  • 各信号サンプルにラベルが付けられているため,200個の非表示ノードを使用してbilstmLayerを指定し,OutputMode序列に設定します。

  • P波、QRS群T波,およびN / Aという4つのカテゴリに対応する出力サイズ4を使用してfullyConnectedLayerを指定します。

  • softmaxLayerclassificationLayerを追加して,推定ラベルを出力します。

%使用完全模拟的未标记数据集进行训练层= [...sequenceInputLayer(大小(ecgFrames {1}, 1)) bilstmLayer(200年“OutputMode”“序列”) fulllyconnectedlayer (4) softmaxLayer classificationLayer;

traningOptionsで最適化ソルバーとハイパーパラメーターを指定して,ネットワークに学習させます。この例では,ADAM オプティマイザーと 50 のミニバッチ サイズを使用します。CPU または GPU を使用してネットワークに学習させます。GPU を使用するには、Parallel Computing Toolbox™、および Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU が必要です。その他のパラメーターの詳細については、trainingOptions(深度学习工具箱)を参照してください。この例では。”ExecutionEnvironment“の名前と値のペアを使用する学習にGPUを使用します。

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

完全にラベル付けされたecgFramesデータセットを使用して,ネットワークの学習を行います。

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

学習済みネットワークを使用してテストフレームを分類し,平均予測精度を計算します。基準となる予測精度は約95%です。

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

人によるループでの反復的なラベル付け

ラベル付けの労力を軽減するために,次の反復的なアプローチを試します。最初の時点ではecgFramesデータセットにラベルが付いておらず,データに手作業でラベル付けするものとします。実際には,この例では,データセットが提供するグラウンドトゥルースラベルを使用します。

初期ネットワークの学習

まず,ecgFramesセットから25個のフレームを選択し,それらに手作業でラベル付けします。反復処理の最初のステップとして,最初にラベル付けされたこのセットを使用してBiLSTMネットワークの学習を行います。

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

最初の学習データセットには25個のフレームしか存在しないため,学習エポックの回数を増やし,ミニバッチサイズが小さくなるように学習オプションを設定します。

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

最初の学習データセットでBiLSTMネットワークに学習させ,パフォーマンスのベースラインの確立に使用されるのと同じテストデータセットを使用してラベルを予測します。ネットワークの予測精度は約80%を下回ります。

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

ラベル付け

次のステップでは,ecgFrames200年セットから個の新しいデータフレームを選択し,それらを事前学習済みのネットワークinitNetに供給することで,信号に自動でラベル付けします。

迭代= 1;%每次迭代要标记的帧数numFrames = 200;%选择要标记的下一组帧indexNext = numInitFrames + 1: numInitFrames + numFrames;currentPrediction =分类(initNet ecgFrames (indexNext),“MiniBatchSize”, 50);

ネットワークが生成したラベル付けの結果を評価し,その結果をグラウンドトゥルースと比較します。次の例のように,選択した200サンプルのデータフレームの3番目を使用します。グラウンドトゥルースラベルおよびネットワークが予測したラベルを重ね合わせた最初の750サンプルをプロットします。

idx = 3;信息= ecgInfo {indexNext (idx)};信号= QTData.Source {info.patientID} (info.channelID info.indexID);groundTruthLabels = ecgLabels {indexNext (idx)};predictedLabels = currentPrediction {idx};subplot(2,1,1) displayWaveformLabels(signal,groundTruthLabels) xlim([1 750]) title(“地面实况”) subplot(2,1,2) displayWaveformLabels(signal,predictedLabels) xlim([1 750]) title(网络”的标签

このフレームでは,ネットワークは良好なラベル付けを行いました。その結果,ネットワークの結果を検査する人は,予測されたラベルを少ない労力で修正できます。

ただし,ネットワークのラベル付けのパフォーマンスがそれほど高くない場合もあります。200年選択したサンプルのデータフレームの6番目を使用して取得した結果を検討します。

idx = 6;信息= ecgInfo {indexNext (idx)};信号= QTData.Source {info.patientID} (info.channelID info.indexID);groundTruthLabels = ecgLabels {indexNext (idx)};predictedLabels = currentPrediction {idx};图subplot(2,1,1) displayWaveformLabels(signal,groundTruthLabels) xlim([1 750]) title(“地面实况”) subplot(2,1,2) displayWaveformLabels(signal,predictedLabels) xlim([1 750]) title(网络”的标签

この信号に対するネットワークのパフォーマンスはそれほど良好ではありません。結果を検査するには,ラベル付け担当者が予測されたラベルにいくつかの修正を加えなければなりません。

200年個のデータフレームに対する修正の労力を定量化するために,ネットワークのラベル付け誤り率,およびラベル付け担当者が修正しなければならないフレームあたりの平均サンプル数を計算します。

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

最初の反復では,フレームあたり平均で約1000個のサンプルを人が修正しなければなりません。

最初の反復の終わりでは,人が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 = ecgFrames (indexTraining, 1);通过将ground-truth标签分配给扩展训练集currentTrainingLabels = ecgLabels (indexTraining);%具有扩展训练集的训练网络currentNet = trainNetwork (currentTrainingSet、currentTrainingLabels层,选择);预测测试数据集的标签并计算精度%比较基线性能currentTestSetPrediction =分类(currentNet testFrames,“MiniBatchSize”, 50);networkAccuracy(迭代)=意味着(cellfun (@ (x, y) (x = = y), currentTestSetPrediction, testLabels));%为人类标签获取另一个numFrames数据帧indexNext = indexTraining(结束)+ 1:indexTraining(结束)+ numFrames;%测量此迭代中每帧人工修正的平均次数currentPrediction =分类(currentNet ecgFrames (indexNext),“MiniBatchSize”, 50);networkLabelingErrorRate(迭代)= 1,就意味着(cellfun (@ (x, y) (x = = y), currentPrediction, ecgLabels (indexNext)));averageNumOfCorrectionsPerFrame(iteration) = networkLabelingErrorRate(iteration) * numSamplesPerFrame;indexTraining = 1: indexNext(结束);结束

ラベル付けのパフォーマンス

ラベル付け反復を15回繰り返すと,currentTrainingSet2825年には個のデータフレームが存在するようになり,この個数はecgDatasetセット全体に含まれる6543個のデータフレームの約半数に相当します。2825 個のフレームで学習を行ったネットワークの予測精度は、基準となる精度の約 1% にも及びません。

accuDiff = accuracyAll-networkAccuracy(结束);流('精度差为%2.1f%%.\n', accuDiff * 100);
精度差为0.8%。

各反復における学習データセットのサイズに関して,テストデータセットに対するネットワークの予測精度をプロットします。完全にラベル付けされたデータセットで取得した精度の上限を表示します。検証されるデータフレーム数が増えれば,ネットワークの予測精度が向上します。

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

各反復の最後では,学習データセットのサイズが大きくなるほど,フレームあたりの人による平均修正数が減少します。検証されてネットワークの学習に使用されるデータフレームが増えれば,選択したフレームのラベル修正に必要な労力が軽減されます。人,最後の反復ではによる修正が必要なサンプルは,フレームあたり平均して300個になります。

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

15回すべてのラベル付け反復を通じて,人による修正が必要な信号サンプルは,フレームあたり平均して約500個になります。

流(“每帧的平均修正次数是%2.1f.\n”意思是(averageNumOfCorrectionsPerFrame));
每帧的平均修正次数为465.7次。

まとめ

この例では,心电图データセットの半分にラベル付けするだけで,完全にラベル付けされたデータセットで深層ネットワークに学習させた場合と同様の予測精度が達成できることを示しました。推奨した反復ラベル付けワークフローを採用することにより,ラベル付け担当者による確認が必要なデータセットは半分に抑えられ,修正が必要な信号サンプルはフレームあたり平均して500個のみになります。一方で,総当たり的なラベル付けでは,データセット内のすべてのフレームを確認し,すべてのサンプルに対してゼロからラベル付けしなければなりません。

参考文献

Goldberger, Ary L., Luis A. N. Amaral, Leon Glass, Jeffery M. Hausdorff, Plamen Ch. Ivanov, Roger G. Mark, Joseph E. miietus, George B. Moody, Chung-Kang Peng,和H. Eugene Stanley。“PhysioBank, PhysioToolkit和PhysioNet:复杂生理信号新研究资源的组成部分”循环。Vol. 101, no . 23, 2000, pp. e215-e220。(循环电子页;http://circ.ahajournals.org/content/101/23/e215.full]。

[2]拉古纳,巴勃罗,罗杰G.马克,阿里L.戈德伯格,乔治B.穆迪。心电图QT间期和其他波形间隔测量算法评估数据库。在Cardiology.Vol电脑。24, 1997,第673-676页。

[3]拉古纳,巴勃罗,雷蒙Jané,还有佩雷·卡米纳尔。多导联心电图信号的波边界自动检测:CSE数据库验证计算机与生物医学研究。27,第1期,1994年,第45-60页。

参考

|