主要内容

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

深层学习をを使用した波形

この例は,再帰型深层学习ネットワークと解析,人间の心电图(ECG)信号を明します。

はじめに

人間の心臓の電気的活動は,ベースライン信号から離れた一連の振幅として測定できます。単一の正常な心拍サイクルの場合,心电图信号は次の心拍形態に分けられます[1]。

  • P波- QRS群が心房性脱分極を表す前の小さいたわみ

  • QRS群——心拍の最大振幅部分

  • T波- QRS群が心室再分極を表した後の小さいたわみ

心电图波形のこれらの領域のセグメンテーションでは、人間の心臓全体の健康状態と異常の存在を評価するのに役立つ測定値の基準を提供できます [2]。手作業で心电图信号の各領域に注釈を付けると,手間と時間がかかるタスクになる可能性があります。信号処理と深層学習の手法を使用すると,関心領域の注釈を効率的かつ自動的に付けられるようになる可能性があります。

この例では,一般に公開されているQTデータベースからの心电图信号を使用します[3.] [4]。データは,サンプルレート250 Hzで合計105人の患者から測定された,約15分間の心电图の記録で構成されています。各記録を取得するために,検査員は患者の胸部の異なる場所に2つの電極を配置して,2チャネル信号にします。データベースは,自動化されたエキスパートシステムによって生成される信号領域ラベルを提供します[2]。この例は,深层学习の解をして,サンプルがある领域にてeCG信号のにラベルすることをサンプルとしてますいいいいいいいいいいいますいますに対してに対してこのこのこのこのこのは,多重毛合,“波形波形”と呼ばれます。

信号領域を分類するよう深層ニューラルネットワークに学習させるために,長短期記憶(LSTM)ネットワークを使用できます。この例は,LSTMセグメンテーション性能を向上させるために信号前処理技術と時間——周波数解析をどのように使用できるかを示します。特に,例は,フーリエシンクロスクイーズド変換を使用して,心电图信号の非定常動作を表しています。

データのダウンロードと準備

105年個の2チャネルの心电图信号から成る各チャネルは,自動化されたエキスパートシステムによってそれぞれラベル付けされ,210個の垫ファイルに領域ラベルと共に保存された合計210個の心电图信号に対して個別に扱われます。このファイルは,//www.tatmou.com/金宝appsupportfiles/SPT/data/QTDatabaseECGData.zipで入手できます。

MATLAB®の.坦普迪尔コマンドによって指定された場所にある一時ディレクトリに,データファイルをダウンロードします。坦普迪尔と異なるフォルダーにデータファイルを置きたい場合,これ以降の手順でディレクトリ名を変更してください。

%下载数据数据URL='https://www.mathwands.com/金宝appsupportfiles/spt/data/qtdatabaseecgdata1.zip';datasetFolder = fullfile (tempdir,“QTDataset”);zipFile=fullfile(tempdir,'qtdatabaseecgdata.zip');如果~存在(datasetFolder'dir') websave (zipFile dataURL);解压缩(zipFile tempdir);结束

解压缩操作业を行する,一时代にフォルダーQTDatabaseECGDataが作成され,このフォルダーに210個の垫ファイルが格納されます。各ファイルでは,変数ecgSignalに心电图信号が格納され,変数signalregion标签に領域ラベルのテーブルが格納されます。また,各ファイルでは,変数Fsに例はます。このこのは,信号のすべてすべて250 hzです。

ファイル内のデータにアクセスするための信号データストアを作成します。この例では,一時ディレクトリのQTDatabaseECGDataフォルダーにデータセットが保存されていると仮定します。そうでない場合は,以下のコードでデータのパスを変更してください。signalvariamblenames.パラメーターを使用して、各ファイルから読み取りたい信号変数名を指定します。

sds = signalDatastore (datasetFolder,“信号变量名称”, (“ecgSignal”“signalregionlabels”])
sds=signalDatastore,具有以下属性:文件:{'/tmp/QTDataset/ecg1.mat';'/tmp/QTDataset/ecg10.mat';'/tmp/QTDataset/ecg100.mat'…和207多个}可选FileSystemRoots:[0×0字符串]读取大小:1信号变量名称:[“ecgSignal”“signalRegionLabels”]

関数を呼び出すたびに,心电图信号および領域ラベルのテーブルが格納された2要素细胞配列がデータストアによって返されます。データストアの関数预览をを使して,最初のファイルのが,长长225,000サンプルのecg信号,および3385个のラベルを含むであることを确认しし。

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

領域ラベルテーブルの最初の数行を確認し,領域範囲のインデックスと領域クラスの値(P TまたはQRS)が各行に含まれていることを確認します。

标题(数据{2})
ans =.8×2表rolimitits Value __________ _____ 83 117 P 130 153 QRS 201 246 T 285 319 P 332 357 QRS 412 457 T 477 507 P 524 547 QRS

信号屏蔽オブジェクトを使用して,最初の1000個のサンプルのラベルを可視化します。

M = signalMask数据({2});plotsigroi (M,数据{1}(1:1000))

通常の機械学習の分類手順は次のとおりです。

  1. データベースを学習データセットとテストデータセットに分割します。

  2. 学習データセットを使用してネットワークに学習させます。

  3. 学習済みのネットワークを使用して,テストデータセットについて予測を行います。

ネットワークをデータの 70% で学習し、残りの 30% でテストします。

再現可能な結果が必要な場合は、乱数発生器をリセットします。関数dividerandを使用して,ファイルをシャッフルするためのランダムなインデックスを取得し,信号数据存储の関数子集を使用して、データを学習とテストのデータストアに分割します。

rng违约[trainidx,〜,testidx] = divierand(numel(sds.files),0.7,0.0.3);TrainDS =子集(SDS,TrainIDX);testds =子集(SDS,TestidX);

このセグメンテーション问题では,心电图信号がlstmネットワークネットワークに力され,入力信号と长さもつラベルラベルのシーケンスまたはマスクががネットワークからから出またはされこのこのネットワークのタスクはますますますますタスクタスクはますますますタスクタスクははます号サンプルサンプルサンプルサンプルサンプルサンプルサンプル属する领域の名前をとして付けることですですその,データセット上の领域ラベル,信号サンプルごとラベルががが必要付けられシーケンスシーケンスに変换がありあり変换変换ありありますます変换ありありありありありありありありありgetmaskを使用して,領域ラベルを変換します。関数getmaskは,いずれいずれ关心领域にも属さないラベルサンプルにカテゴリ“不适用”を追加します。

类型getmask.m.
函数outputCell = getmask(inputCell) % getmask将区域标签转换为与输入心电信号的%大小相等的标签掩码。% % inputCell是一个包含心电信号向量%和区域标签表的二元单元阵列。% % outputCell是一个包含心电信号向量%和与信号长度相同的分类标签向量掩码的二元单元阵列。% Copyright 2020 The MathWorks, Inc. sig = inputCell{1};roiTable = inputCell {2};L =长度(团体);M = signalMask (roiTable);%获取分类掩码,当有重叠掩码时给QRS区域优先级= catmask(M,L,'OverlapAction',' priorities bylist ','PriorityList',[2 1 3]);%设置缺失值为"n/a"掩码(ismissing(mask)) = "n/a";outputCell ={团体,面膜}; end

変换されたデータストアプレビュープレビュー,このデータストアによって同じ长されることをしますカテゴリカルマスクベクトルのからますます。

TrainDS =变换(TrainDS,@GetMask);testds =变换(testds,@getmask);TransformedData =预览(TrainDS)
转换数据=1×2单元阵列{224993×1双}{224993×1分类}
绘图(转换数据{2}(1:1000))

非常に長い入力信号を LSTMネットワークに渡すと、推定精度の低下と過剰なメモリ消費を招く可能性があります。これらの影響を回避するには、変換されたデータストアおよび補助関数resizeDataを使用して,心电图信号およびそれらに対応するラベルマスクを分割します。5000年この補助関数はサンプルのセグメントをできるだけ多く作成し,残りのサンプルを破棄します。変換されたデータストアの出力のプレビューを見ると,最初の心电图信号とそのラベルマスクが5000サンプルのセグメントに分割されているのが分かります。変換されたデータストアのプレビューには,この细胞配列の最初の8要素のみが示されていることに注意してください。この细胞配列の要素数は,本来,地板(224993/5000)= 44であり,データストアの関数を呼び出すと,この数の要素を细胞配列が返され。

trainDs=转换(trainDs,@resizeData);testDs=转换(testDs,@resizeData);预览(trainDs)
ans =.8×2单元阵列{1×5000双}{1×5000分类}{1×5000双}{1×5000分类}{1×5000双}{1×5000分类}{1×5000双}{1×5000分类}{1×5000双}{1×5000分类}{1×5000双}{1×5000分类}{1×5000双}{1×5000分类}{1×5000双}{1×5000分类}

ネットワークの学习のの事前事前事前习済み済みのダウンロード

この例の次の節では,LSTMネットワークに学習させるための3つの異なるアプローチを比較します。データセットのサイズが大きいため,各ネットワークの学習プロセスには数分かかる場合があります。マシンにGPUと并行计算工具箱™がある場合,MATLABは自動的にGPUを使用して学習を高速化します。そうでない場合はCPUが使用されます。

学习手顺をスキップし,以以のセレクターを使し,事前学习済みネットワークネットワークダウンロードできできできますますできできできせるせるネットワークはは习せる场は,[火车网络]ををします。学习习をスキップするする合并は,[下载网络]を选択すると,事前学习済み済み3つのネットワーク( -rawNetFilteredNet.fsstNet-)をすべて含むファイルが,MATLAB®の坦普迪尔コマンドで指定された一時ディレクトリの場所にダウンロードされます。坦普迪尔と異なるフォルダーにダウンロードファイルを置く場合は,以降の手順でディレクトリ名を変更してください。

actionFlag =“列车网络”如果行动旗==“下载网络”%下载预先训练的网络数据URL='https://ssd.mathworks.com/金宝appsupportfiles/SPT/data/QTDatabaseECGSegmentationNetworks.zip'%#好的<*UNRCH>modelsFolder = fullfile (tempdir,'qtdatabaseecgseationnetworks');modelsFile = fullfile (modelsFolder,“trainedNetworks.mat”);zipFile=fullfile(tempdir,“QTDatabaseECGSegmentationNetworks.zip”);如果~存在(modelsFolder'dir') websave (zipFile dataURL);解压缩(Zipfile,Fullfile(Tempdir,'qtdatabaseecgseationnetworks'));结束加载(modelsFile)结束

ランダムな初期重みを使用してネットワークに学習させるため,ダウンロードしたネットワークと新たに学習させたネットワークの間で結果がわずかに異なる場合があります。

生の心电图信号のLSTMネットワークへの直接入力

最初に,学習データセットから取得した生の心电图信号を使用して,LSTMネットワークに学習させます。

学習前のネットワークアーキテクチャを定義します。サイズ1の序列输入层を指定して1次元の時系列を受け入れます。“序列”出力モードでLSTM層を指定して,信号の各サンプルに対して分類できるようにします。最適なパフォーマンスを得るために200個の非表示ノードを使用します。出力サイズが4のfullyConnectedLayerを波形クラスごとに 1.つ指定します。softmaxlayer.分类层を追加して,推定ラベルを出力します。

层= [...sequenceInputLayer(1)LSTMLAYER(200,“输出模式”“序列”) fulllyconnectedlayer (4) softmaxLayer classificationLayer;

适切适切なネットワーク性能を确认选択しししししししししししししししししし。trainingOptions(深度学习工具箱)のドキュメンテーションを参照してください。

选择= trainingOptions (“亚当”...“MaxEpochs”,10,...“MiniBatchSize”, 50岁,...“InitialLearnRate”,0.01,...“LearnRateDropPeriod”,3,...'shownrateschedule'“分段”...“GradientThreshold”,1,...“阴谋”“培训进度”...“洗牌”“every-epoch”...'verbose',0,...“DispatchInBackground”,对);

この学习データデータはメモリにすべてため,并行计算工具箱™をを使できる合,データストアの相关を使用してデータを並列で変換してから、変換したデータをワークスペースに集めることができます。ニューラル ネットワークの学習は反復的です。データストアでは、反復のたびにファイルからデータを読み取り、そのデータを変換してからネットワークの係数を更新します。データがコンピューターのメモリに収まる場合、データをワークスペースにインポートしておけば、データの読み取りと変換を 1.回のみ実行すれば済むため、学習が高速になります。データがメモリに収まらない場合、学習エポックごとに学習関数にデータストアを渡して変換を実行しなければならないことに注意してください。

学習セットとテストセットの両方に高配列を作成します。システムに応じて,MATLABが作成する並列プール内のワーカー数は異なる場合があります。

塔特拉特赛=高(TrainDS);
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:8)。
tallTestSet =高(testDs);

次に、高的配列の関数收集をを呼び出してデータセットセットセットのを计算し,学校信号,テスト信号,およびラベル格式され细胞配列配列取得ます。

列车数据=采集(TALLTRANSET);
使用并行池“local”计算tall表达式:-通过1/1:在11秒内完成计算在12秒内完成
: trainData (1)
ans =.1×2单元阵列{1×5000 double} {1×5000 categorical}
testData =收集(tallTestSet);
通过1 / 1:在2.9秒内完成

ネットワークの学习

trainNetworkコマンドを使用して LSTMネットワークを学習させます。

如果行动旗==“列车网络”Rawnet = Trainnetwork(TrainData(:,1),TrainData(:,2),图层,选项);结束

図の学習の精度と損失のサブプロットは,すべての反復回数間の学習の進行状況を追跡します。生の信号データを使用して,ネットワークは,P波、QRS群,T波,またはラベル付けされていない領域“不适用”に属するものとして,サンプルの約77%を正しく分類します。

テストデータの分享

学习済みlstmネットワークと分类コマンドを使データテストますますますますにミニバッチミニバッチのせるにのサイズ50を指定しサイズ50を指定します。

predtest = classify(rawnet,testdata(:,1),“MiniBatchSize”, 50);

混同行列では、分類性能を可視化するための直感的で有益な方法を提供しています。混淆图コマンドを使用して,テストデータ予測に対する全体の分類精度を計算します。各入力に対して,直言ラベルの细胞配列を行ベクトルに変換します。列を正視化した表示を指定して,各クラスのサンプルの割合として結果を表示します。

confusionchart ([predTest{:}]、[testData {: 2}),'正常化'“column-normalized”);

ネットワークへの入力として生の心电图信号を使用すると,T波のサンプルの約60%,P波のサンプルの40%,QRS群のサンプルの60%のみが正しくなりました。パフォーマンスを向上させるには,深層学習のネットワークに入力する前に心电图信号の特性の情報を適用します。たとえば,患者の呼吸の動きによって引き起こされる基線変動です。

フィルター処理方法の適用による基線変動と高周波ノイズの除去

3.つの心拍形態は、異なる周波数バンドを占めます。QRS波群のスペクトルには一般的に、10~25Hzあたりの中心周波数があり、そのコンポーネントは 40赫兹未満にあります。P波と T波は低周波でも起こります。P波のコンポーネントは 20赫兹未満で、T波のコンポーネントは 10赫兹未満です [5]。

基線変動は、患者の呼吸の動きによって引き起こされる低周波数 (<0.5赫兹)の振動です。この発振は、心拍形態から独立していて、有効な情報を提供しません [6]。

[0.5,40]赫兹の通過帯域周波数幅を持つバンドパス フィルターを設計して、変動と高周波ノイズを削除します。これらのコンポーネントを削除すると、ネットワークが関係のない特徴を学習しないため LSTM学習が向上します。高的データの 细胞配列に対してCellfun.を使用し、データセットを並列でフィルター処理します。

%带通滤波器设计hfilt = designfilt(“bandpassiir”'stopbandfrequency1', 0.4215,'passbandfrequency1', 0.5,...'passbandfrequency2''现年40岁的'stopbandfrequency2', 53.345,...“StopBandattentiation1”现年60岁的“PassbandRipple”, 0.1,“StopbandAttenuation2”现年60岁的...“采样器”,250,“设计方法”“ellip”);%从转换后的数据存储中创建高阵列并过滤信号tallTrainSet=高(列车数);tallTestSet=高(testDs);filteredTrainSignals=gather(cellfun)(@(x)过滤器(hFilt,x),tallTrainSet(:,1),“UniformOutput”,假);
使用Parallel Pool 'local'计算tall表达式

1中通过1:13秒内完成评估14秒内完成
trainLabels =收集(tallTrainSet (:, 2));
使用Parallel Pool 'local'计算tall表达式
filteredTestSignals =收集(cellfun (@ (x)过滤器(hFilt x), tallTestSet (: 1),“UniformOutput”,假);
使用Parallel Pool 'local'计算tall表达式
testLabels =收集(tallTestSet (:, 2));
使用Parallel Pool 'local'计算tall表达式

一般的なケースの生の信号とフィルター処理した信号をプロットします。

列车数据=采集(TALLTRANSET);
使用并行池“local”评估tall表达式:-通过1/1:在4秒内完成评估在4.2秒内完成
figure subplot(2,1,1) plot(trainData{95,1}(2001:3000)) title('生的') grid subplot(2,1,2) plot(filteredTrainSignals{95}(2001:3000)) title(“过滤”) 网格

医疗机器でで起来のecg测定に惯れている医师フィルターフィルター处されれのありに戸惑う可爱

フィルター済み 心电图信号を使用したネットワークの学習

前と同様に,同じネットワークのアーキテクチャを使用してフィルター済み心电图信号でLSTMネットワークに学習させます。

如果行动旗==“列车网络”filteredNet = trainNetwork (filteredTrainSignals、trainLabels层,选择);结束

信号の前処理は80%以上まで学習精度を向上させます。

フィルター処理された心电图信号の分類

前処理済みテストデータを更新したLSTMネットワークで分類します。

predfilteredtest = classify(filterednet,f​​ilteredtestsignals,“MiniBatchSize”, 50);

混同行列として分類性能を可視化します。

FigumenceChart([predfilteredtest {:}],[testlabels {:}],'正常化'“column-normalized”);

シンプルな前致理性で,t波の分类が约15%,qrs群とp波の分享到が约10%向上します。

心电图信号の時間——周波数の表現

時系列データの正常な分類に対する共通アプローチは,時間——周波数の特徴を抽出し,それらを元のデータの代わりにネットワークに供給することです。その後,ネットワークは,時間と周波数間で同時にパターンを学習します[7]。

フーリエシンクロスクイーズド変換(FSST)は信号サンプルごとに周波数スペクトルを計算します。そのため,これは元の信号と同じ時間分解能を維持する必要があるこのセグメンテーション問題に最適です。FSST.関数を使用して,学習信号の1つの変換を検査します。適切な周波数分解能を与えるために,長さが128のカイザーウィンドウを指定します。

data =预览(trainDs);{1 1}图fsst(数据,250年,凯撒(128),“桠溪”

対象となる周波数範囲[0.5,40]赫兹に対し,学習データセットの各信号のFSSTを計算します。個別の機能としてFSSTの実数部と虚数部を取り扱い,ネットワークに両方のコンポーネントを供給します。さらに,平均を減算し,標準偏差で除算することで,学習用の特徴を標準化します。変換されたデータストア,補助関数提取物品,および关を使用して、データを並列で処理します。

fsstTrainDs =变换(trainDs @ (x) extractFSSTFeatures (x, 250));fsstTallTrainSet =高(fsstTrainDs);fsstTrainData =收集(fsstTallTrainSet);
使用Parallel Pool 'local'计算tall表达式

- 第1条第1条:在2分35秒内完成的第1次,在2分35秒内完成

テストデータに対してこの手順を繰り返します。

fsstTTestDs=转换(testDs,@(x)提取fsstfeatures(x250));fsstTallTestSet=高(fsstTTestDs);fsstTestData=聚集(fsstTallTestSet);
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1 min 4 sec

ネットワークアーキテクチャの調整

ネットワークが単一の値の代わりに各サンプルに周波数スペクトルを受け入れるように LSTMアーキテクチャを変更します。FSSTのサイズを検査し、周波数の数値を確認します。

大小(fsstTrainData{1,1})
ans =1×240 5000

入力の特价を40として序列输入层に指定します。残り残りのネットワークパラメーターは変更しないで保持ししないで保持しし

层= [...sequenceInputLayer(40)lstmLayer(200,“输出模式”“序列”) fulllyconnectedlayer (4) softmaxLayer classificationLayer;

心电图信号のFSSTを使用したネットワークの学習

変换されたデータセット使してててれたネットワークネットワーク习习をせます。

如果行动旗==“列车网络”fsstnet = trainnetwork(fssttraindata(:,1),fssttraindata(:,2),图层,选项);结束

時間——周波数の特徴を使用すると学習精度が改善します。現在,90%を超えています。

FSSTを使用したテストデータの分類

更新された LSTMネットワークと抽出された FSSTの特徴を使用して、テスト データを分類します。

predFsstTest =分类(fsstNet fsstTestData (: 1),“MiniBatchSize”, 50);

混同行列として分類性能を可視化します。

ConfusionChart([predfssttest {:}],[fssttestdata {:,2}],'正常化'“column-normalized”);

時間-周波数表現を使用すると、生データの結果と比べて、T波の分類が約 25%,P波の分類が約 40%、および QRS波群の分類が 30% 向上します。

信号屏蔽オブジェクトを使用して,ネットワーク予測を単一の心电图信号のグラウンドトゥルースラベルと比較します。関心領域をプロットするときは,“不适用”ラベルを無視します。

testData=聚集(高度(testDs));
使用Parallel Pool 'local'计算tall表达式

37秒内完成评估
太= signalMask (testData {1,2} (3000:4000));太。SpecifySelectedCategories = true;太。挑选edCategories = find(Mtest.Categories ~=“不适用”);图subplot(2,1,1) plotsigroi(Mtest,testData{1,1}(3000:4000)) title('真相')Mpred=signalMask(predfsttest{1}(3000:4000));Mpred.SpecifySelectedCategories=true;Mpred.SelectedCategories=find(Mpred.Categories)~=“不适用”);子图(2,1,2)plotsigroi(mpred,testdata {1,1}(3000:4000))标题(“预测”

まとめ

この例は,信号の前処理と時間——周波数解析がLSTM波形セグメンテーション性能を向上させることができる方法を説明しています。バンドパスフィルターとフーリエベースのシンクロスクイージングによって,すべての出力クラス間の平均が55%から約85%まで改善されます。

参考文献

McSharry, Patrick E.等。"产生合成心电图信号的动力学模型"IEEE®论生物医学工程交易。第50卷第3期,2003年,289-294页。

[2]拉古纳,巴勃罗,雷蒙Jané,还有佩雷·卡米纳尔。"Automatic detection of wave boundaries in multilead ECG signals: Validation with the CSE database."计算机和生物医学研究。第27卷,第1期,1994年,45-60页。

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:复杂生理信号新研究资源的组成部分”循环。卷。101,23,2000,PP。E215-E220。[循环电子页面;http://circ.ahajournals.org/content/101/23/e215.full]。

[4] 拉古娜、巴勃罗、罗杰·G·马克、艾利·L·戈德伯格和乔治·B·穆迪。”一种用于评估ECG中QT和其他波形间隔的算法的数据库。心脏病学的计算机。1997年第24卷,第673-676页。

[5] 心电图(ECG)信号处理威利生物医学工程百科全书,2006.

[6] Kohler,B-U.,Carsten Hennig和Reinhold Orgleister。“软件QRS检测的原则。”IEEE医学和生物学工程杂志.Vol。21, No. 1, 2002, pp. 42-57。

[7] 环境声音分类的深层卷积神经网络和数据增强IEEE信号处理信件。第24卷,第3期,2017年,279-283页。

参考

関数

関連するトピック