在這里給大家分享一篇關于用深度學習進行心電圖識別的論文,原文地址https://arxiv.org/abs/1804.06812,我翻譯成了中文以便大家快速學習,中間難免有疏忽遺漏的地方,請大家諒解。
這篇文章是由韓國的幾個研究人員發表的,通過使用卷積神經網絡實現了心電圖的高精準分類,總共完成了8類心電圖心律不齊病變的分類,其達到的分類精確度都超過了所有目前用來做心電圖自動分類的方法,而且其中它的好處是不需要過多的對原始數據進行預處理。
摘要
在論文中提出了一種有效的ECG心律分類方法,該方法是基于二維CNN神經網絡,最近的研究表明其在模式識別方向上有顯著的性能表現。每個ECG跳動的數據被轉化為一副灰度圖作為CNN分類器的輸入數據。優化的CNN分類器包含不同的深度學習技術模型,除此之外,論文中用兩個經典的網絡做了比較,一個是AlexNet,另一個是VGGNet。用來訓練分類的ECG數據記錄來自 MIT-BIH心律數據庫,分類器訓練結果的平均準確度達到了97.85%,最高99.05%,同時訓練的數據并沒有經過類似噪聲濾波、特征提取等任何的預處理。
1. 介紹
根據世界衛生組織(WHO),心血管疾病(CVDS)是當今疾病死亡的頭號殺手。超過1770萬人死亡是由心血管疾病引起的,占總死亡人數的31%,死亡人數超過75%出現在低收入和中等收入國家。心律失常是一種有代表性的心血管疾病類型,主要是任何與正常心臟不規則的節律變化,通常有很多類型的心律失常,包括心房顫動、過早收縮、心室顫動和心動過速等,雖然單次心律失常可能對生命沒有嚴重影響,但連續的心律失常可能導致嚴重的后果。例如,長時間室性早搏(PVCs)偶爾轉變為室性心動過速(VT)或室顫(VF),其可能導致心力衰竭,所以周期性的觀測心跳對阻止心血管疾病是非常重要的。心電圖(ECG)是一種無創的有效的觀測心律和心臟狀態的醫療工具,因此通過心電圖(ECG)自動檢測不規則心律在心臟病學領域是一項非常重要的課題。
有很多針對心律不齊的分類方法被提出:
1)基于前饋神經網絡(FFNN)的方法,針對4種不同類型的心律不齊檢測,其精確度可以達到96.95%;
2)SVM也被廣泛應用在心電圖心律檢測方向,針對6種不同類型的心律不齊檢測,其精度可以達到89.72%;
3)基于RNN網絡的方法,針對4種不同類型的心律不齊檢測,其精度可以達到98.06%;
4)基于KNN(K-nearest neighbor)的方法,針對17中類型的心電圖數據,可以達到97.1%的精確度;
但這些方法都存在一定的缺陷:
1)用來訓練的數據都是經過精心挑選的;
2)心電圖的跳動數據在噪音濾波和特征提取中會損失;
3)能進行分類的心電圖類型有限;
4)在實際中應用分類性能相對較低;
在這邊文章中,基于提出的2維CNN’處理,首先不需要做噪音濾波和特征提取的預處理;其次通過增加心電圖訓練數據可以提高分類的精度,前面提到的方法中,要做到數據擴充是很難的;同時前面的方法對噪音信號非常敏感;本文提出的方法,因為通過二維的CNN’處理,該模型會在通過卷積和池化層提取相關特征時會自動忽略噪音干擾,這樣就可以適應不同的心電圖機器和不同的采樣率信號。
該方法把原始的心電圖數據轉化為128x128的灰度圖作為CNN的輸入,可以分辨8種不同的心律失常:正常搏動(NOR)、室性早搏(PVC)、起搏搏動(PAB)、右束支傳導阻滯搏動(RBB)、左束支傳導阻滯搏動(LBB)、房性早搏(APC)、室顫波搏動(VFW)和室性逸搏(VEB),因為在MIT-BIH心律數據庫中主要都是正常的數據,其他7類的數據占很少一部分,所以通過數據擴充的辦法來增加其他7中特征的數據讓數據保持平衡,具體的方法在下文會進行介紹。
2. 實現方法
2.1 心電圖數據的預處理
首先把MIT-BIH心律數據庫轉換為可以灌給CNN的二維數據,相當于轉化為圖片,然后通過CNN來對這些圖片做基于8個分類的圖像分類;
因為MIT-BIH心律數據庫提供的數據是通過P-QRS-T波的周期來標定的,所以可以通過時間節點來提取單周期(single pattern)的的信號轉換成圖片信息,即一張圖片包含一個周期的心電圖波形,如下所示:
2.2 心電圖心律不齊分類器
把心電圖數據轉換為2維數據(圖片信息)進行處理,主要是CNN包含的卷積、池化等處理對2維圖像處理很適用,從而可以提高分類的準確率。現今有很多優秀的CNN模型,例如AlexNet和VGGNet,本文就是通過這兩種實現方式來進行處理,當然目前還有一些性能更好的網絡模型,例如GoogleNet、ResNet、DenseNet等,但這些網絡結構都包含很深的層數,這里處理的心電圖數據僅僅是一個128x128的圖片信息,所以用不到這么深的網絡,所以在這里就使用AlexNet和VGGNet進行處理和對比。
2.2.1 數據擴增
因為在MIT-BIH心律數據庫中,大部分數據都是正常數據,病變的數據占比很小,這樣形成的數據集就不平衡,最后導致訓練的模型性能很差,缺乏魯棒性。為了解決這個問題,通過裁剪、移動等方法對病變的信號進行處理來增加上文提到的7中病變信息,例如下面的處理:
針對這個室性早搏(PVC)的數據,對它分別進行左上、中上、右上、左中、中、右中、做下、中下和右下的平移,并進行裁剪獲得9個數據特征,這樣做相當于原來只有一個病變數據,處理后得到了另外9個病變數據。
2.2.2 濾波器初始化
基于梯度下降學習的主要缺陷是模型可能發散或陷入局部最小點。為了達到更好的收斂效果,文章中通過Xavier初始化來平衡所有CNN濾波器的梯度尺度的大小,權值通過下面公式進行隨機初始化
其中In和Out是網絡中濾波單元的輸入和輸出個數。
在現今的神經網絡系統中,較小尺寸的濾波器被認為有更好的處理效果,所以在這里用到的CNN濾波器尺寸是3x3,同時為了保證圖像在進行卷積層處理時保持原始的尺寸,采用了zero-padding模式。
2.2.3 激活函數
文章中通過使用LReLU. ReLU, LReLU, 和 ELU發現使用ELU性能更好,相對ReLU來說,ELU保留了更多的負向信息。
2.2.4 正則化
正則化也可叫做歸一化,主要是用來減小過擬合。這里使用了兩種常規的方法,batch normalization和dropout,如果不做batch normalization的話,前面一點點的變化將對后面產生非常大的影響,通常batch normalization放在激活函數前和卷積層后,但文章中發現針對ECG的數據比較特殊,放在激活函數后效果會更好,同時在卷積層后和全連接層后都放了batch normalization;
這里使用的dropout為0.5,把他放在了全連接層后面的batch normalization后,這里在卷積層沒有加dropout,一般來說,由于卷積層不具有許多自由參數,所以Dropout不適用于卷積塊,并且節點之間的協同適應比減少過擬合更為重要。
2.2.5 誤差和優化函數
誤差函數用的是典型的cross-entropy函數
優化器使用的是Adam優化器,同時使用的是動態學習率,起始值是0.0001,然后通過下面的方式進行迭代,表示1000個迭代步驟后學習率會變小為原來的0.95
2.2.6 驗證集
用來測試當前訓練的模型性能是否達到要求,同時如果沒有驗證集的話訓練過度會造成過擬合。使用的機制是在訓練中如果在500個迭代后權重的平均靈敏度和系統收斂狀態沒有改變的話就停止學習的過程然后開始進行驗證集測試
2.2.7 優化的CNN分類器架構
整個CNN的模型如下:
在此基礎上加入了AlexNet和VGGNet的架構進行了性能驗證和比對,下面分別是CNN架構、AlexNet架構和VGGNet架構的層數、每層結構、濾波器大小、步進、每層特征提取通道數和每層輸入輸出維度
3. 實驗結果
數據集構成
實驗結果
文中提到了
Curve (AUC), Accuracy (Acc), Specificity (Sp), Sensitivity (Se), and Positive Predictive Value (+P) 5種評判標準,這里只列出準確率,其他4種有興趣大家可以自己查閱。
從準確度可以看出,CNN模型和AlexNet比VGGNet的性能稍好,通過數據擴增的性能CNN模型和AlexNet都比擴增前稍高,而VGGNet有一定的降低。
下面是誤差曲線和精度收斂