劉守華,王小松,劉 昱
(1.中國科學(xué)院大學(xué),北京 100049; 2.中國科學(xué)院微電子研究所,北京 100029;3.新一代通信射頻芯片技術(shù)北京市重點實驗室,北京 100029)
心電圖(Electrocardiogram, ECG)是記錄人體心臟活動的可視時間序列,已經(jīng)在臨床上廣泛用于心血管類疾病的診斷[1-2]。由于ECG容易受到各種干擾信號的影響,臨床醫(yī)生往往要忽略受嚴重干擾的心電波形再進行判斷。這種基于人工分析的心電圖容易導(dǎo)致診斷結(jié)果誤判。而心電圖的自動分類能高效地為臨床醫(yī)生診斷心血管類疾病提供重要信息。在人工智能技術(shù)迅速發(fā)展的背景下,目前計算機輔助ECG分析方法[3]越來越受到大家的關(guān)注,成為了心電圖領(lǐng)域的研究熱點之一。
ECG自動分類方法主要有2種,一種是基于數(shù)理特征例如小波特征、高階統(tǒng)計量、功率譜特征[4-10]等。它們配合時域特性以及傳統(tǒng)的分析方法例如主成分分析[11]、獨立成分分析等用于ECG分類識別。另一種是基于人工智能的[12-14],Rajpurkar等[15]和Hannun等[16]采用34層卷積神經(jīng)網(wǎng)絡(luò),利用來自超過5萬位病人的91,232條記錄組成的大型數(shù)據(jù)集,將心電信號分為包括竇性心律在內(nèi)的11種心律。Jun等[17]提出了具有11層二維卷積的CNN算法;金林鵬等[18]提出了導(dǎo)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)的概念,使用了4層一維卷積的CNN算法;Acharya等[19]利用數(shù)據(jù)增強來解決數(shù)據(jù)不平衡問題,并采用9層CNN實現(xiàn)ECG分類。
但無論是使用哪種分類法,現(xiàn)有的不少文獻只是在標準數(shù)據(jù)庫或其中某個子集上得出結(jié)論(整個MIT-BIH數(shù)據(jù)集也只有47個病人),算法的泛化能力很難得到保證。還有一個很顯著的心搏分類結(jié)論是,病人內(nèi)的正異常分類效果要遠高于病人間的,而病人間的某種疾病識別率要介于病人內(nèi)和病人間的正異常識別率[20]。同時,只針對單導(dǎo)聯(lián)的分類算法將會丟失很多重要的信息,限制了算法的分類能力;其次,很多算法都是針對少數(shù)心率類型實現(xiàn)分類算法,且只能將ECG信號與單一心率類型匹配,或者只做正異常二分類任務(wù)。但是臨床上心率類型種類眾多,且每個心電圖同時屬于多種心率類型。所以這種分類算法雖然具有較好的實驗結(jié)果,但是局限性也很大,很難在臨床上推廣應(yīng)用。針對以上問題,本文基于多導(dǎo)聯(lián)二維結(jié)構(gòu),采用一維卷積ResNet網(wǎng)絡(luò)的方法,對包括竇性心律在內(nèi)的共計34種心率類型實現(xiàn)自動識別。
標準的心電信號每個樣本有12個導(dǎo)聯(lián),其中8個導(dǎo)聯(lián)正交,其余4個導(dǎo)聯(lián)可從已有的8個導(dǎo)聯(lián)導(dǎo)出,現(xiàn)有的CNN主要應(yīng)用于二維圖像。雖然多導(dǎo)聯(lián)ECG與二維圖像類似,但是導(dǎo)聯(lián)間的相關(guān)性與導(dǎo)聯(lián)內(nèi)數(shù)據(jù)的相關(guān)程度相差很大。為此本文基于多導(dǎo)聯(lián)ECG這種特殊的二維結(jié)構(gòu),使用一維卷積的方法,采用深度卷積神經(jīng)網(wǎng)絡(luò)來完成這種端對端的學(xué)習任務(wù)。網(wǎng)絡(luò)結(jié)構(gòu)采用的是34層的ResNet[21],將原始的ResNet中二維卷積改為一維卷積,以及設(shè)置第一層卷積核尺寸為15×1,步長為2,以適應(yīng)2048×1的輸入尺寸,另外設(shè)置全連接層輸出長度為34×1,對應(yīng)于34種心率類型。圖1展示了模型結(jié)構(gòu)。
圖1 模型結(jié)構(gòu)圖
ResNet由微軟研究院的何愷明等4名華人提出,通過使用Residual Unit成功訓(xùn)練152層深的神經(jīng)網(wǎng)絡(luò),錯誤率為3.57%,同時參數(shù)量卻比VGGNet低,效果非常突出。ResNet的結(jié)構(gòu)可以極快地加速超深神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,模型的準確率也有非常大的提升。
ResNet最初的靈感出自這個問題:在不斷增加神經(jīng)網(wǎng)絡(luò)的深度時,會出現(xiàn)一個Degradation(退化)的問題,即準確率會先上升然后達到飽和,再持續(xù)增加深度,準確率反而會下降。這并不是過擬合的問題,因為不光在測試集上誤差增大,訓(xùn)練集本身誤差也會增大。同時由于Bacth Normalization的應(yīng)用,梯度消失(或者梯度爆炸)現(xiàn)象理應(yīng)很早就被解決了。對此何愷明等人在文獻[21]中也有提及:假設(shè)有一個比較淺的網(wǎng)絡(luò)達到了飽和的準確率,若后面再加上幾個全等的映射層,誤差不會增加,即更深的網(wǎng)絡(luò)也不會造成訓(xùn)練集上的誤差增加。因此理論上越深的神經(jīng)網(wǎng)絡(luò)其效果應(yīng)該越好,而這種全等映射恰好是當前網(wǎng)絡(luò)難以實現(xiàn)的東西。文獻[22]也提到過類似的現(xiàn)象,由于非線性激活函數(shù)Relu的存在,每次從輸入到輸出的過程都幾乎是不可逆的(信息損失)。人們很難從輸出反推回完整的輸入。而這里使用全等映射將前一層輸出直接傳到下一層的思想,就是ResNet的靈感來源。假定某段神經(jīng)網(wǎng)絡(luò)的輸入是x,期望輸出是H(x),如果直接把輸入x傳到輸出作為初始結(jié)果,那么此時需要學(xué)習的目標就是F(x)=H(x)-x。圖2是一個ResNet的殘差學(xué)習單元(Residual Unit),ResNet相當于將學(xué)習目標改變了,不再是學(xué)習一個完整的輸出H(x),只是輸出和輸入的差別H(x)-x,即殘差。
圖2 殘差單元
這個殘差單元通過Identity mapping的引入在輸入和輸出之間建立一條關(guān)聯(lián)通道,可以將學(xué)習單元的輸入和輸出進行一個element-wise的疊加,這個簡單的加法不會增加網(wǎng)絡(luò)額外的參數(shù)和計算量,但可以大大增加模型的訓(xùn)練速度,提高訓(xùn)練效果,并且當模型的層數(shù)加深時,這個簡單的結(jié)構(gòu)能夠很好地解決退化問題。
本文使用的數(shù)據(jù)為杭州師范大學(xué)移動健康管理系統(tǒng)教育部工程研究中心提供的20,036個樣本,數(shù)據(jù)經(jīng)過脫敏處理,只保留波形數(shù)據(jù)和心電異常事件名稱以及部分患者年齡性別信息。每個樣本采樣頻率為500 Hz,長度為10 s,單位電壓為4.88 μV。
每條樣本對應(yīng)多種心率類型。超過2萬條樣本,包括QRS低電壓、電軸右偏、起搏心律、T波改變等在內(nèi)共計34種心率類型。
溫柔的樹袋熊,女(PS:不要問女生年齡),明清史碩士(其實最稀罕魏晉士人來著),喜歡旅游(尤其是不用自己掏荷包那種)。長卷發(fā)、天秤座、愛吃辣椒,喜歡傳統(tǒng)君子士人:“謙謙君子,溫潤如玉”,可惜現(xiàn)代社會很難遇見,所以有了這篇文章。
數(shù)據(jù)集每種心率包含樣本數(shù)分別為:3、1124、16、3479、1124、120、64、52、16、286、142、25、551、25、35、32、23、414、5264、22、9501、7、299、16、29、34、543、314、901、418、4895、126、35、60。將其中80%劃分為訓(xùn)練集,20%劃分為驗證集,訓(xùn)練集和驗證集各類別占比保持一致。
針對數(shù)據(jù)集的類別分布可以看到樣本中各個類別心率分布極度不平衡,正常的竇性心律樣本數(shù)含有9501條,最少的QRS低電壓樣本只有3條。對類別失衡的處理辦法通常有2種:1)處理數(shù)據(jù),也就是通過對數(shù)據(jù)重新抽樣改變數(shù)據(jù)類別的分布;2)優(yōu)化算法,增加小樣本的權(quán)重,從而使得模型在訓(xùn)練的時候更加專注類別小的樣本以獲得較好的學(xué)習效果。
2.2.1 數(shù)據(jù)增強
Mateusz等[23]針對神經(jīng)網(wǎng)絡(luò)中類別失衡做過系統(tǒng)性研究,在深度學(xué)習中針對類別失衡對少量類別進行過采樣,效果總是會好于原數(shù)據(jù)集,并且適當?shù)倪^采樣不會造成模型的嚴重過擬合。
在圖1中,將8導(dǎo)聯(lián)ECG看作二維圖像,原始數(shù)據(jù)的維度是8×5000;隨機設(shè)置起始點,截斷導(dǎo)聯(lián)數(shù)據(jù)之后,輸入維度是8×4000;對導(dǎo)聯(lián)信號重新采樣,并增加年齡數(shù)值,此時網(wǎng)絡(luò)的輸入維度是9×2048。
2.2.2 更改類別權(quán)重
算法層面:對于分類任務(wù)一般使用的損失函數(shù)都是交叉熵損失,以二分類使用的二值交叉熵損失為例,公式為:
(1)
其中,y∈{±1}表示類別標簽,p∈[0,1]表示模型輸出的類別為1的概率,為了簡便,定義:
(2)
其中Pt為t樣本輸出類別為1的概率。此時交叉熵就變成了:
CE(p,y)=CE(Pt)=-log(Pt)
(3)
Lin等[24]提出了Focal Loss,通過在交叉熵的基礎(chǔ)上增加一個動態(tài)縮放因子,以解決類別分類不平衡以及困難的樣本難以訓(xùn)練的問題。Focal Loss的縮放因子可以自動降低簡單樣本的損失權(quán)重,幫助模型集中于訓(xùn)練更加困難的樣本。Focal Loss的思想與OHEM[25]的思想有點類似,OHEM是僅將損失較大的部分反向傳播,直接忽略簡單樣本的損失,這種直接忽略肯定也會帶來一定的影響,所以Focal Loss將簡單樣本的損失降低,而不是直接忽略,從而得到更好的結(jié)果。
Focal Loss的計算公式為:
FL(Pt)=-αt(1-Pt)γlog(pt)
(4)
其中,αt表示樣本t中該類別的權(quán)重參數(shù),(1-pt)γ表示動態(tài)縮放因子,γ是一個可調(diào)的參數(shù),控制縮放比例。對于Pt值較大的簡單樣本,通過動態(tài)縮放因子可以下調(diào)該類別的權(quán)重。該損失函數(shù)的缺點是增加了2個超參數(shù)(α,γ),想要得到好的效果,需要精細調(diào)整。本文采用的αt=1/logN,其中N為原數(shù)據(jù)集類別樣本數(shù)。
圖3是正常的8導(dǎo)聯(lián)竇性心律心電信號圖;圖4展示了不同年齡之間的電軸右偏和起搏心律的分布情況。可以看出,心律分布和年齡的關(guān)聯(lián)性很大,對于起搏心律分布集中在80歲左右,40歲以下沒有該心率異常事件;而不屬于起搏心率的在20~40歲區(qū)間的較多。
圖3 8導(dǎo)聯(lián)ECG
圖4 心率年齡分布圖
實驗使用一維卷積神經(jīng)網(wǎng)絡(luò),輸入為每個樣本前8個導(dǎo)聯(lián)以及年齡構(gòu)成的9通道長度為2048的一維向量。年齡的缺失值用0代替,輸入不做歸一化處理。模型結(jié)構(gòu)如圖1所示。
對輸入數(shù)據(jù)使用FFT方法重新采樣,采樣之后導(dǎo)聯(lián)長度為2048。數(shù)據(jù)增強使用的方法包括:隨機對導(dǎo)聯(lián)信號做上下平移、數(shù)值翻轉(zhuǎn)以及加隨機噪聲。這樣不僅增加了輸入數(shù)據(jù)的豐富程度,進一步降低樣本類別不平衡的影響,并且能增加模型的泛化能力。圖5為對樣本第一導(dǎo)聯(lián)進行數(shù)據(jù)增強的效果,其中每一個子圖為對上一個子圖進行相關(guān)處理之后的效果。
圖5 導(dǎo)聯(lián)I信號的輸入處理
對心電信號進行數(shù)據(jù)增強之后,結(jié)合年齡,將batch size設(shè)置為64,此時輸入的size為[9×2048],將ResNet第一層卷積核尺寸設(shè)置為15×1,步長設(shè)置為2,以適應(yīng)2048的導(dǎo)聯(lián)長度。模型的輸出size為[34×1],將模型的輸出經(jīng)過sigmoid函數(shù),此時輸出序列為Y=[y1,y2,…,yn],n為34,yn的值表示預(yù)測為第n類心律類型的概率值。當yn大于閾值a時,可以認為該樣本屬于第n類心律??梢酝ㄟ^實驗結(jié)果選取合適的a值。
3.2.1 評估方法
對于多分類常用的評價指標為F1,其結(jié)果越大越好,計算公式為:
(5)
其中,P為準確率,R為召回率,計算公式為:
(6)
(7)
P、R中涉及的心電異常事件數(shù)均是所有樣本的累加。
3.2.2 結(jié)果分析
當(1-pt)γ的參數(shù)γ=1,a=0.5時,模型在驗證集取得最好的效果,選用的起始學(xué)習率lr=0.02,每經(jīng)過完整的一輪迭代,學(xué)習率衰減因子lr_decay=0.97。為了防止算法過擬合,dropout=0.2,最大迭代輪數(shù)為300。最終在驗證集上的F1值達到了0.91的分數(shù),準確率為93.96%,召回率為87.89%。
圖6、圖7為經(jīng)過300輪迭代的訓(xùn)練集和驗證集的損失曲線和F1曲線。
圖6 loss曲線
圖7 F1 score曲線
由于初始學(xué)習率設(shè)置為0.2,loss曲線在訓(xùn)練集和驗證集上在第80個iter左右已經(jīng)基本收斂,后200個iter只有輕微下降。雖然在訓(xùn)練集上損失小于驗證集,但是其F1值在訓(xùn)練集和驗證集上基本一致。因此對訓(xùn)練集進行小規(guī)模過抽樣并沒有使得模型嚴重過擬合,對于34種心電異常事件預(yù)測準確率仍達到94%。
當設(shè)置輸出閾值a=0.5時,對于訓(xùn)練集樣本數(shù)超過100的類別在驗證集上的預(yù)測效果如表1所示。
表1 部分心率類別預(yù)測效果
對于訓(xùn)練數(shù)據(jù)類別樣本數(shù)大于100的心率類型,在驗證集上大部分類別的預(yù)測準確率都在90%以上,并且也都取得較高的召回率,但是對于樣本數(shù)較多的少數(shù)心率類型,例如竇性心律不齊以及對于樣本數(shù)少的ST段改變、不完全性右束支傳導(dǎo)阻滯心率類型的學(xué)習效果仍不理想。
為了驗證本文提出的模型的有效性和泛化能力,將本文的模型與先前ECG心率分類工作的性能進行比較。由于這些工作具有不同的數(shù)據(jù)集和心率失常類型,因此直接比較是不合理的。故針對公共數(shù)據(jù)集MIT-BIH心電數(shù)據(jù)庫使用本文的模型進行驗證。
使用美國醫(yī)療儀器促進協(xié)會制定的AAMI標準對MIT-BIH數(shù)據(jù)進行類型劃分,得到6類心率類型,訓(xùn)練樣本數(shù)M=12000,其中各個類型包含2000個樣本,采樣點為統(tǒng)一為512個,80%的樣本用于訓(xùn)練模型,20%用于驗證。為了便于與其他文獻算法相比較,測試集總體的分類效果用整體精度(OA)表示,定義為:
(8)
其中:N、L、R、V、A、P分別為測試集中正常信號(N)、左束支傳導(dǎo)阻滯(LBBB)、右束支傳導(dǎo)阻滯(RBBB)、房性期前收縮(APC)、室性期前收縮(PVC)、融合性心拍(P)正樣本預(yù)測為正樣本數(shù)目;M為總樣本數(shù)目。
從表2可以看出,本文方法在公共數(shù)據(jù)庫上的識別精確度高于表2中的其他方法。在心率類別數(shù)目上多于其他方法的同時識別精度遠高于其他方法。驗證了本模型具備較好的泛化能力。
表2 本文與其他方法比較
本文對面向臨床的ECG分類進行了研究。針對多導(dǎo)聯(lián)ECG分類問題引入了一維卷積神經(jīng)網(wǎng)絡(luò)。使用的數(shù)據(jù)增強和Focal loss損失函數(shù)對類別失衡有較優(yōu)的效果。經(jīng)過1.8萬條訓(xùn)練樣本,最終在2千多條的驗證集上取得了0.91的F1值,93.96%的準確率,召回率為87.89%的結(jié)果。
網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)的進一步優(yōu)化、起始點范圍的選擇以及分類器融合途徑等都有待進一步研究。今后將不斷以既有思想和方法為基礎(chǔ),吸納新的理論和技術(shù),為計算機輔助ECG分析方法的廣泛應(yīng)用進行不斷的探索和努力。