胡清禮 胡建強 余小燕 劉 洋
1(廈門理工學院計算機與信息工程學院 福建 廈門 361024) 2(上海工程技術大學電子電氣工程學院 上海 201620)
心音聽診是醫(yī)生對心臟疾病進行初步診斷的重要手段。心音包含心臟活動的豐富信息,能夠反映心臟的健康水平。由于心音信號復雜且微弱,容易受到噪聲污染,因此通常需要醫(yī)生具有豐富的聽診經(jīng)驗,而長時間的聽診,容易導致醫(yī)生的聽覺疲勞,產(chǎn)生錯誤的判斷。近年來,研究者開始采用機器學習對心音進行自動分類,更有利于早期發(fā)現(xiàn)心臟疾病并有效干預。
心音自動分類的基本流程包括去噪、分割、特征提取和分類識別。其中,特征提取和分類識別是影響心音準確分類的最重要的環(huán)節(jié),因而受到學術界廣泛關注。文獻[1]從心音信號中提取124個時頻特征,直接輸入Adaboost進行分類,并提取心動周期的4個頻帶訓練卷積神經(jīng)網(wǎng)絡CNN(Convolutional Neural Network),使用閾值判決兩個分類器的輸出結果作為最終的分類結果。文獻[2]采用動態(tài)時間規(guī)整DTW(Dynamic Time Warping)提取特征并結合梅爾頻率譜系數(shù)MFCC(Mel-Frequency Cepstral Coefficients)輸入到線性支持向量機實現(xiàn)分類。文獻[3]提取時域的MFCC并組織成二維特征,基于CNN實現(xiàn)心音分類。文獻[4]采用傅里葉變換提取心音的頻域特征,使用小波函數(shù)作為激活函數(shù)構建CNN分類模型。文獻[5]從原始心音數(shù)據(jù)中提取聲譜圖,并作為改進的AlexNet模型的輸入特征進行分類識別。上述方法都有較高的準確率,但需要人為設計特征因而不能很好表征特征,也容易存在特征丟失,從而影響后續(xù)分類識別的準確率。
針對上述問題,大多數(shù)研究采用深度神經(jīng)網(wǎng)絡直接學習心音數(shù)據(jù)的特征。文獻[6]構建降噪自編碼器提取心音的深度特征,結合一維CNN進行分類識別,對比實驗驗證提出的降噪自編碼器特征表達水平優(yōu)于MFCC特征。文獻[7]采用CNN和循環(huán)神經(jīng)網(wǎng)絡RNN(Recurrent Neural Network)相結合提取頻域、時域特征,基于全連接層進行心音的異常分類具有較高的準確率。文獻[8-9]基于CliqueNet和DenseNet對原始心音數(shù)據(jù)進行自動特征提取和分類識別,都獲得較高的準確率。文獻[10]采用AlexNet、VGG16和VGG19預訓練模型提取深度特征,使用支持向量機完成心音的分類識別。上述方法能夠提取心音的特征,但仍存在以下不足:模型較復雜,消耗大量計算資源,難以應用到資源受限的設備,不利于心音自動分類的使用和推廣。針對上述不足,本文基于深度可分離卷積搭建一維深度神經(jīng)網(wǎng)絡,用于自動提取心音數(shù)據(jù)特征并進行分類識別。該方法使用3 s的心音片段作為網(wǎng)絡的輸入,通過構建的深度神經(jīng)網(wǎng)絡自動學習心音片段的潛在區(qū)分性特征,最后由softmax進行分類。本文直接使用基于深度可分離卷積的深度神經(jīng)網(wǎng)絡提取心音的深度區(qū)分性特征,不需要手工設計特征,避免因設計不當造成一定程度的信息丟失而降低分類效果;在PhysioNet/CinC 2016公開心音數(shù)據(jù)集上獲得了97.70%的高準確率以及0.985 9的F1得分,同其他深度學習模型相比,效果顯著提高,而且模型參量低,僅有0.02 MB。
本文提出的方法首先對心音數(shù)據(jù)進行降噪處理,然后以3 s為間隔將一段心音劃分為片段,利用基于深度可分離卷積構建的模型進行特征自動提取和分類,完成心音的自動診斷。
心音信號常常包含呼吸音、肺音等噪聲。首先,采用巴特沃斯帶通濾波器濾除心音信號中高于400 Hz和低于25 Hz的噪聲成分;然后,利用小波變換進行二次降噪,小波函數(shù)采用db6,分解成6層,并將高頻細節(jié)系數(shù)置零,其余層使用該層系數(shù)最大值的10%作為閾值進行處理。圖1顯示原始心音數(shù)據(jù)、巴特沃斯帶通濾波器濾波后的心音數(shù)據(jù)、小波變換去噪后的心音數(shù)據(jù)、巴特沃斯帶通濾波器濾波和小波變換相結合去噪后的心音數(shù)據(jù)。巴特沃斯帶通濾波器和小波變換相結合能有效去噪,較清晰展示完整的心音周期,包括第一心音(S1)、收縮期、第二心音(S2)和舒張期。由于一個完整的心音周期大約持續(xù)2.5~2.8 s,因此采用滑動窗口分割,以3 s為一個周期。
圖1 不同方法對心音去噪的效果圖
本文利用神經(jīng)網(wǎng)絡的學習能力,構建基于深度可分離卷積的一維深度神經(jīng)網(wǎng)絡從原始心音數(shù)據(jù)中自動學習心音的區(qū)分性特征。網(wǎng)絡一開始使用莖干模塊結構增強特征的表征能力,其后使用密集模塊和過渡模塊堆疊的方式提取深度特征,在密集模塊中使用深度可分離卷積降低網(wǎng)絡參數(shù)量以及在過渡模塊中引入通道注意力機制凸顯貢獻度高的通道特征,最后采用Softmax作為心音的分類器,其結構如圖2所示。
圖2 基于深度可分離卷積的心音自動分類模型
(1) 莖干模塊。整個網(wǎng)絡的輸入層之后,借鑒Wang等[11]的工作,采用一種莖干模塊(Stem_block),在增加少量計算量的同時,提高特征表達能力,其結構如圖3所示。第一個卷積層采用1×3大小的卷積核,其數(shù)量為24,步長為2,提取輸入的初始特征,然后經(jīng)過批歸一化(Batch Normalization,BN)層和修正線性單元(Rectified Linear Unit,ReLU)激活函數(shù)進行非線性化輸出特征圖G1,接著采用兩種方式對G1在不同方面提取特征,以增加特征的豐富度。一種是將G1依次通過1×1卷積層和1×3卷積層得到特征圖G2;另一種是將G1經(jīng)過最大池化層得到特征圖G3,最后在通道維度上進行連接,并使用1×1卷積將通道數(shù)壓縮至24,得到特征圖G4。為了降低計算復雜度,使用步長為2的最大池化壓縮特征維度,得到最終輸出特征圖Gout。整個莖干模塊計算如下所示:
圖3 Stem_block結構圖
(1)
(2)
G3=MaxPool(G1)1×2
(3)
(4)
Gout=MaxPool[G4]1×3
(5)
F=ReLU[BN(·)]
(6)
式中:X1×w表示數(shù)據(jù)維度為w的輸入;W1×3、W1×1分別表示大小為1×3和1×1的卷積核,下標i、j分別表示第i和第j個卷積核;cat表示連接操作;MaxPool()表示最大池化操作。
(2) 密集模塊。密集連接是Huang等[12]提出的應用于DenseNet中的特征重用方式,其后面層的輸入與前面所有層的輸出特征相連接,這種方式能夠使得網(wǎng)絡變得簡單,然而過多的密集連接增加了網(wǎng)絡的內(nèi)存訪問成本。由于在大量的密集連接中,并不是所有的連接都是有效的,存在冗余的連接,對網(wǎng)絡的貢獻度低且增加了網(wǎng)絡的計算成本[13]。因此,本文為降低原有密集連接的連接數(shù),在每個密集模塊的最后對前面所有的輸出進行連接,既保留了低層特征的重用,又避免了過多的冗余連接,從而降低了網(wǎng)絡的計算成本。本文構建的簡化版密集模塊結構如圖4所示。除最后一個block外,每一個block(包括輸入)的輸出分為兩部分,一部分用于下一個block的輸入,提取更高層次的特征,另一部分用于最后的連接操作,使低層特征能夠得到重用,提高特征表達能力,其計算公式如下所示:
圖4 簡化版密集模塊結構圖
Gdense=cat(H1,H2,…,Hk)
(7)
式中:Gdense為簡化版密集模塊的輸出;Hk表示密集模塊中第k個block的輸出特征,k≥1。
簡化版密集模塊中的block采用兩種結構以提高特征的豐富度,如圖5所示。本文為了降低密集模塊的計算復雜度,引入了一種深度可分離卷積DWconv(Depth-Wise Separable Convolution)[14]對特征進行提取。深度可分離卷積通過將區(qū)域特征和通道特征分開進行運算,有效降低參數(shù)量和計算復雜度。假設輸入為1×w×c,輸出通道數(shù)為k,其中w、c分別表示輸入的數(shù)據(jù)維度和通道數(shù)。采用深度可分離卷積,其參數(shù)量和計算量分別如式(8)和式(9)所示;若采用常規(guī)卷積,其參數(shù)量和計算量分別如式(10)和式(11)所示,顯而易見,深度可分離卷積對于網(wǎng)絡的復雜度降低具有很大幫助。
圖5 block結構圖
(8)
1×w×c×1×3+1×w×c×k=wc(3+k)
(9)
1×3×c×k=3ck
(10)
1×w×c×k×1×3=3wck
(11)
此外,使用h-swish激活函數(shù)代替ReLU激活函數(shù),進一步地降低計算復雜度。其計算公式如下所示:
(12)
J=H_SWISH[BN(·)]
(13)
式中:Gk-1表示前一個簡化版密集模塊的輸出,當k=1時,Gk-1=Gout;i表示第i個卷積核;C表示當前卷積核數(shù)量;S表示深度可分離卷積。
為了防止過擬合,采用Dropout技術,其概率設置為0.3。經(jīng)過實驗調(diào)參,最終確定block1-block3采用stride為1的結構,block4采用stride為2的結構。
(3) 過渡模塊。由密集模塊的輸出Gdense可以看到其輸出通道數(shù)是非常高的,不能直接作為下一個密集模塊的輸入。因此,過渡模塊的作用就是對密集模塊的輸出進行降維處理。為了能夠提高網(wǎng)絡的特征表達能力,在過渡模塊中引入注意力機制(Attention),該注意力機制最初由Woo等[15]提出,主要用于輕量級神經(jīng)網(wǎng)絡中,參數(shù)量極低。本文用卷積操作替換了其中的全連接層,降低參數(shù)量,其結構如圖6所示。
圖6 過渡模塊結構圖
(14)
式中:σ表示Sigmoid激活函數(shù);Conv表示兩層卷積計算;AvgPool、MaxPool分別表示全局平均池化和全局最大池化計算。
(4) 分類。分類是模型的最后一步,心音主要被分為正常和異常兩個類別,用0表示正常,用1表示異常。平均池化層對網(wǎng)絡提取的特征進行求平均操作并通過全連接層將特征映射到2個通道維度,最后使用Softmax計算2個通道的概率值,取概率最大值的索引值作為網(wǎng)絡的最終輸出類別。
訓練數(shù)據(jù)采用PhysioNet/CinC 2016比賽公開的心音數(shù)據(jù)集[16]。該數(shù)據(jù)集有a-f六個子數(shù)據(jù)集,總共有3 240條心音記錄,其中2 575條正常心音,665條異常心音,心音記錄的采樣率為2 000 Hz。預處理步驟如下:每條數(shù)據(jù)進行標準化處理;使用librosa庫中的resample函數(shù)將心音的采樣率降至1 000 Hz;去噪和分割處理,共得到31 307條心音片段,其中正常心音片段24 967條,異常心音片段6 340條。
為了使模型充分學習到數(shù)據(jù)的潛在特征,盡可能采用較多的訓練數(shù)據(jù)使得充分訓練,因此,本文將數(shù)據(jù)集按照8∶1∶1的比例劃分為訓練集、驗證集和測試集。使用訓練集對模型進行訓練,用驗證集挑選網(wǎng)絡中的超參數(shù),訓練完畢后使用測試集評估網(wǎng)絡。訓練中,batch size設置為64,采用加權交叉熵損失函數(shù)對模型進行監(jiān)督,正異常比值為1∶4,采用Adam優(yōu)化器函數(shù)對模型進行訓練。使用GTX 1050TI顯卡進行加速訓練,總共迭代150次。為了尋找模型的最佳參數(shù),本文進行了多輪訓練,通過不斷的調(diào)整和優(yōu)化,尋找到最佳的模型結構。最佳模型訓練過程中的訓練集和驗證集的準確率和損失值變化曲線如圖7所示。神經(jīng)網(wǎng)絡在訓練過程中常出現(xiàn)過擬合現(xiàn)象,若出現(xiàn)過擬合現(xiàn)象,則驗證集的損失值會逐漸偏離訓練集的損失值,產(chǎn)生較大的偏差。從驗證集的損失曲線可以看出,其值偶爾會有較大的波動,但整體上與訓練集的損失值趨勢一致,未出現(xiàn)完全偏離訓練集損失值的情況。因此,本文構建的網(wǎng)絡在訓練過程中沒有出現(xiàn)過擬合現(xiàn)象且收斂性好,損失值在0.1以下,準確率達到95%以上。在測試集上獲得了97.7%的準確率。
圖7 訓練集和驗證集在訓練過程中的準確率和損失值變化曲線
采用靈敏度(Sensitivity,S)、特異性(Specificity,Sp)、查準率(Precision,P)、準確率(Accuracy,A)和F1得分作為模型評價指標。其中,靈敏度和特異性分別用于衡量識別正確的正樣本和負樣本的百分比;查準率衡量預測的正樣本中的正確率;準確率主要衡量所有識別正確樣本的百分比;F1得分是靈敏度和查準率的調(diào)和平均值,能夠衡量模型的總體分類能力。各指標計算如式(15)~式(19)所示。
(15)
(16)
(17)
(18)
(19)
式中:TP為真陽性樣本(True positive);FP為假陽性樣本(False positive);TN為真陰性樣本(True negative);FN為假陰性樣本(False negative)。
表1給出了在PhysioNet/CinC 2016數(shù)據(jù)集上不同研究方法的分類結果。文獻[5]從原始心音數(shù)據(jù)中提取聲譜圖作為改進的AlexNet的輸入特征進行分類識別,獲得了僅比本文略低的準確率;文獻[4]采用傅里葉變換提取頻域特征作為網(wǎng)絡的輸入,使用小波函數(shù)作為激活函數(shù)構建CNN進行分類識別,比文獻[5]準確率低了0.31%;文獻[3]提取梅爾頻率譜系數(shù)構建二維特征作為網(wǎng)絡的輸入,效果有所降低;文獻[8]和文獻[9]直接使用原始的心音數(shù)據(jù)分別輸入到一維的Clique網(wǎng)絡和一維的Dense網(wǎng)絡,利用所構建網(wǎng)絡的超強學習能力自動提取特征和分類識別,獲得了相對不錯的效果,尤其是一維Dense網(wǎng)絡在特異性上取得了較高的結果。可以看出本文搭建的模型獲得了97.70%的準確率、98.20%的靈敏度、92.22%的特異性、0.985 9的F1得分,整體效果優(yōu)于其他幾個模型。
表1 在PhysioNet/CinC 2016數(shù)據(jù)集上不同研究方法的分類結果
為了驗證不同模塊對模型性能的提升效果,本文建立了基礎的DNN模型,該模型中莖干模塊和深度可分離卷積分別由卷積核大小為7和3的常規(guī)卷積操作替代,在過渡模塊中去除注意力機制。然后在基礎DNN模型中分別加入莖干模塊、通道注意力機制和深度可分離卷積,各個模型使用的網(wǎng)絡結構保持一致。最后在相同的數(shù)據(jù)集劃分條件下,對網(wǎng)絡進行訓練和測試,最終結果如表2所示??梢杂^察到,各個模塊的加入對模型有一定的提升效果,且能夠獲得高的F1得分。本文構建的深度神經(jīng)網(wǎng)絡模型(DNN+stem_block+attention+DWconv)在一開始使用莖干塊結構增強了模型對原始心音數(shù)據(jù)的初始特征表達能力,并在后續(xù)密集模塊中重復利用低層特征,進一步提升網(wǎng)絡的特征表達能力,在過渡模塊中引入通道注意力機制,突出貢獻度大的通道特征,使得提取的特征更有利于分類,區(qū)分性更高。
表2 不同的模塊對模型的性能影響
本文所提出的方法與文獻[8]和文獻[9]都是使用原始心音數(shù)據(jù)輸入到網(wǎng)絡中自動提取特征并進行分類識別。其中,一維Dense網(wǎng)絡參數(shù)量為0.11 MB;一維Clique網(wǎng)絡參數(shù)量為0.19 MB;而本文提出的一維深度神經(jīng)網(wǎng)絡參數(shù)量僅為0.02 MB,在不使用深度可分離卷積的情況下,網(wǎng)絡的參數(shù)量為0.023 MB,比前者多了0.003 MB的參數(shù)量,因此,在保證準確率的前提下,使用深度可分離卷積可進一步降低參數(shù)量,更有利于運用在資源受限的終端設備中。
本文構建了一種基于深度可分離卷積的心音自動分類模型用于心音特征自動提取和分類,直接利用原始心音數(shù)據(jù)作為網(wǎng)絡的輸入進行潛在區(qū)分性特征的提取并進行分類識別,避免人工設計特征時,因存在一定的信息丟失,不能很好地表征特征,從而降低了識別效果。采用的深度可分離卷積能夠有效降低網(wǎng)絡的參數(shù)量。此外,為了提升網(wǎng)絡的特征表達能力,引入了通道注意力機制。在PhysioNet/CinC 2016數(shù)據(jù)集上對網(wǎng)絡進行訓練和調(diào)優(yōu),在劃分的測試集上獲得了97.7%的高準確率,同時F1得分達到了0.985 9,同其他模型相比有一定提高。此外整個網(wǎng)絡僅有0.02 MB參數(shù)量,能夠部署在資源受限的終端上,對遠程醫(yī)療、智能輔助診斷的發(fā)展具有重要意義。