心音聽診是一種重要的用于心臟疾病診斷的方法。心音中可以聽見的部分主要為第一心音(S1)和第二心音(S2)。在一個心動周期中,不同階段的雜音往往對應不同的心臟疾病,因此心音分割是利用心音進行疾病診斷的前提。S1 和 S2 分別出現在心臟收縮期和舒張期的開始階段,準確定位 S1 和 S2 有利于心音的正確分割。本文研究了一種不利用收縮期和舒張期的時間特征,而僅使用 S1 和 S2 本身特性的分類方法。將訓練集中帶有標注的 S1 和 S2 進行短時傅里葉變換得到時頻圖,然后構建有分支的雙層卷積神經網絡,使用時頻圖對卷積神經網絡進行訓練,得到可用于 S1 和 S2 分類的神經網絡。神經網絡對測試集中 S1 和 S2 的分類準確率最高為 91.135%,高于傳統的方法。神經網絡的敏感性和特異性最高分別為 91.156% 和 92.074%。該方法無需預先提取心音的特征,計算簡單,有利于心音的實時分割。
引用本文: 申玉靜, 王尋, 唐閩, 梁金福. 使用二分支卷積神經網絡識別第一心音與第二心音. 生物醫學工程學雜志, 2021, 38(1): 138-144, 153. doi: 10.7507/1001-5515.201909071 復制
引言
心血管疾病在我國是一種較為常見的疾病,盡早發現此類疾病對于提高人們的健康狀況具有非常重大的意義。雖然有超聲心動圖[1]、心臟磁共振[2]、心臟計算機斷層顯像[3]等方法可用于心臟的檢查,但這些設備通常價格昂貴,操作復雜,不利于普及化。由于心音中包含了大量關于心臟和心血管的重要信息[4-5],因此可以被用于判斷心臟的健康狀況。心音聽診是一種非侵入式的利用心音進行心臟疾病診斷的方法,該方法易于操作,成本低廉,適合大規模推廣。
典型的心音波形如圖 1 所示。一個心音周期通常可以分為收縮期和舒張期。普通人的心音中,容易聽見的成分主要有第一心音(S1)和第二心音(S2)。S1 是由二尖瓣(mitral valve,MV)和三尖瓣(tricuspid valve,TV)的關閉引起的,產生于心臟的收縮期,是心室收縮的標志,其頻率范圍主要分布于 50~150 Hz。S2 是由主動脈瓣(aortic valve,AV)和肺動脈瓣(pulmonary valve,PV)的關閉引起的,產生于舒張期的開始階段,主要成分的頻率范圍為 50~200 Hz[6-7]。在基于心音的計算機輔助診斷中,一個心動周期通常被分割為四個階段:S1、S1~S2、S2 和 S2~S1[8]。當心臟出現異常時,心音中可能會有雜音的出現,有效利用此雜音可以實現心臟疾病的診斷[9-10]。

由于一個心動周期中不同階段的雜音對應的疾病往往是不同的,心音的準確分割對于心臟疾病的診斷具有非常重大的意義。S1 和 S2 的定位在心音分割中非常重要。目前常用的識別 S1 和 S2 的方法大多利用了收縮期和舒張期的時間特性,然而一些患者心臟的收縮期和舒張期時長大小關系不固定,此時利用收縮期和舒張期的時長特性來識別 S1 和 S2 是不準確的[11]。為了解決上述問題,研究人員提出僅用 S1 和 S2 本身的特征來對其進行區分。Kumar 等[12]計算心音的高頻包絡,并設定了一個閾值。由于 S2 的頻率上限通常高于 S1,作者將包絡超過該閾值的心音段判定為 S2。這種方法對于閾值的選擇非常敏感。另外,有時 S1 與 S2 的頻率分布非常接近,此時該方法的準確率有限。Moukadem 等[11]提出了基于心音 S 矩陣奇異值分解(singular value decomposition,SVD)提取心音特征,并使用 k 最近鄰(k-nearest neighbor,KNN)算法對其進行分類。但 KNN 算法需要將待測樣本與數據庫中全部樣本進行對比,當數據庫中樣本較多時,計算耗時太長,不利于實時分類[13]。侯雷靜[14]提取了心音的梅爾倒譜系數(Mel-frequency cepstral coefficients,MFCCs),并使用深度神經網絡(deep neural network,DNN)對 S1 和 S2 進行分類,平均準確率為 88.63%。Chen 等[15]先將心音轉換為 MFCC 的序列,然后使用 K-means 算法將每一個心音段的聲學特征聚類為兩組,計算每個組的中心向量,合并上述兩個中心向量為一個超向量,然后使用該超向量訓練深度神經網絡,進而對心音中的 S1 和 S2 進行分類。該模型準確率可達到 91%,但計算過程較為繁瑣。Tsao 等[16]提出使用譜重建算法(spectral restoration algorithm,SRA)以減小心音中的噪聲成分,并使用多重訓練策略(multi-style training strategy,MTS)來訓練穩健的 DNN 對 S1 和 S2 進行分類,但是該方法也存在提取特征過程繁瑣以及訓練流程復雜的不足。
本文提出了一種基于卷積神經網絡(convolutional neural network,CNN)的 S1 和 S2 識別方法。對心音數據進行短時傅里葉變換(short-time Fourier transform,STFT),將其轉換為時頻圖,再由專業醫生對時頻圖中 S1 和 S2 數據段進行標注。使用訓練集中已標注的 S1 和 S2 時頻圖訓練不同深度的 CNN。當訓練完成后,使用該神經網絡對測試集中的 S1 和 S2 進行分類。本方法無須預先提取心音信號的特征,免去了繁瑣的計算過程,具有較高的實用價值。
1 算法介紹
1.1 短時傅里葉變換
STFT 是一種常用的時頻分析方法,它是 Gabor 于 1946 年提出的,其表達式為[17]:
![]() |
其中x(τ)為待變換的時域信號,h(·)為窗函數,需要足夠窄以確保窗內的信號是平穩的。對于具體的時刻t0,S(t0,f)可以看成是信號在該時刻的瞬時頻譜[18]。當心音進行 STFT 之后,就被轉成類似圖像的二維信號,可以反映出心音頻率分布的特征。
1.2 卷積神經網絡
近年來,隨著高性能 GPU 的出現,計算機的運算能力得到了很大提高,這使得 DNN 得到了大規模應用[19]。CNN 作為 DNN 的一種,被廣泛應用于自然語言處理[20]、語音信號處理[21]、目標識別[22]、醫學信號和圖像分析[23-26]等領域。傳統的圖像模式識別方法需要預先提取圖像的特征,但是這嚴重依賴于使用者的經驗。通過使用大量數據進行訓練,CNN 可以學習到自動提取圖像特征的方法,這對于降低處理流程的復雜性和提高識別準確率都是有益的[27-28]。此外,CNN 使用了共享權重機制,需要計算的參數比傳統全連接 DNN 少[29-31]。在語音識別中,部分研究人員將語音信號轉換為語譜圖送入 CNN 中[32],這在某種程度上與圖像識別類似。而心音也是一種音頻信號,由于 S1 和 S2 的頻率分布不同,其 STFT 變換后得到的時頻圖也是不同的,因此可以使用 CNN 對 S1 和 S2 進行識別。
在 CNN 中,比較具有代表性的有 AlexNet[33]、GoogLeNet[34]、VGGNet[35]和 ResNet[36]等,這些網絡在計算機視覺任務中有突出的表現。然而上述網絡都是為復雜的分類任務而設計的,參數較多,需要使用大量的數據訓練。當訓練數據不足時,很容易出現過擬合的現象。此外,這些復雜網絡占用計算機的資源較多。在本文中,我們沒有直接使用這些復雜的網絡,而是構建了一個帶分支的小型雙層 CNN 網絡用于實現 S1 和 S2 的分類。
本文所使用的分支 CNN 的結構如圖 2 所示,它由輸入層、卷積層、池化層、全連接層和輸出層組成。在本文中,輸入層為 S1 和 S2 的時頻圖。卷積層用于訓練輸入圖像局部的感受野,進而可以提取圖像的抽象特征。抽象特征的矩陣由輸入圖像與卷積核卷積運算之后生成,其計算公式為:

![]() |
其中g(·)為激活函數,m為當前層,ki,j為濾波器,bj為偏置,*表示卷積操作,Tj表示輸入特征矩陣的集合。激活函數中常用的有 tanh、sigmoid 和 ReLU 等[37]。考慮到 ReLU 激活函數計算速度較快,且可以有效地避免訓練時的過飽和與梯度消失[38-39],本文選用 ReLU 激活函數,其表達式為:
![]() |
池化層(pooling layer)也被稱為減采樣(sub-sampling)層,通常用于對卷積之后的特征圖進行減采樣。常用的池化方式有兩種:最大值池化(max pooling)和平均值池化(average pooling)。最大值池化計算局部特征圖的最大值,而平均值池化計算局部特征圖中的平均值[40]。本研究采用最大值池化。
本文所用的模型第一層使用了分支的卷積神經網絡,兩個分支的卷積核大小分別固定為 3 × 3 和 5 × 5,這有利于提取輸入心音時頻圖不同層次的特征。經過分支卷積后,需要將結果合并,然后送到第二層卷積神經網絡中。由于本文研究的是分類問題,訓練時選用交叉熵誤差(cross entropy error)損失函數[41]。
2 實驗過程
2.1 實驗數據
本文的研究使用 PhysioNet/Computing in Cardiology Challenge 心音數據庫(

在表 1 中,訓練集和測試集分別有 2 917 和 323 個心音文件。由于心音的頻率范圍通常低于 500 Hz[43],根據奈奎斯特采樣定理,我們將訓練集和測試集中的心音都由 4 kHz 減采樣至 1 kHz。圖 3 所示為一個典型的心音周期的時域波形和對應的 STFT 之后的時頻圖。我們選出心音中的 S1 和 S2(如圖中白線包圍的部分)送入 CNN 中進行訓練和測試。數據庫的訓練集中 S1 有 83 754 個,S2 有 83 631 個,測試集中 S1 有 9 181 個,S2 有 9 172 個。

a. 時域波形;b. 短時傅里葉變換后的時頻圖
Figure3. A heart sound cyclea. waveform; b. time-frequency diagram after short-time Fourier transform
2.2 神經網絡構建與計算
為了對比不同結構 CNN 的效果,本文構建了五種 CNN,其結構如表 2 所示。其中 Conv1a 和 Conv1b 分別表示第一層中兩個分支所使用的卷積濾波器數量,Dropout1a 和 Dropout1b 分別表示第一層中兩個分支的隨機 dropout 比例。

本研究使用 Keras 和 Tensorflow 構建 CNN 網絡,利用相同的數據訓練和測試上述五種 CNN 模型。計算機主要配置如下:操作系統為 Ubuntu 18.04,CPU 為 Intel i5 8400,主板為 GIGABYTE B360-HD3,顯卡為 GTX1060 6 GB,內存為 DDR4 2400(共 24 GB)。訓練 300 個 epoches。訓練過程中的 Loss 曲線和 Accuracy 曲線如圖 4 所示。

3 分類結果分析
本文使用準確率(accuracy)、敏感性(sensitivity)和特異性(specificity)來衡量不同 CNN 模型的分類性能。其計算公式為
![]() |
![]() |
![]() |
其中Acc、Se、Sp分別表示準確率、敏感性和特異性,TP 表示真陽性(本來是陽性,被正確分類為陽性)的樣本個數,FP 表示假陽性(本來不是陽性,被錯誤分類為陽性)的樣本個數,TN 表示真陰性(本來是陰性,被正確分類為陰性)的樣本個數,FN 表示假陰性(本來不是陰性,被錯誤分類為陰性)的樣本個數。在本文中為了便于說明,我們假定 S1 為陽性,S2 為陰性。因此,TP 表示的是 S1 的正確檢出數,TN 表示的是 S2 的正確檢出數。
3.1 在公開數據集上的結果
表 3 給出了不同的模型對表 1 中測試集數據的分類結果。作為對比,表 1 中也列出了使用文獻[14-16]分類方法的準確率。

對比表 3 中 Model 1 到 Model 3 的結果可以看出,隨著第一層卷積濾波器數量的增加(依次為 16、32、64),預測準確率Acc會上升。這表明卷積濾波器數量的增加使得 CNN 具備更強大的特征提取能力。然而對比 Model 3 和 Model 4 可以發現,繼續增加第一層卷積濾波器的數量反而導致Acc下降。此時如果增加第二層的濾波器數量,可以發現Acc有所提升(對比 Model 4 和 Model 5)。 Model 5 的參數數量比 Model 3 多,但其 Acc 略低于 Model 3。這可能是由于訓練時出現了過擬合的情況。在本文所述模型中,Acc最高的模型為 Model 3,為 91.135%,其對應的Se為 90.339%,Sp為 91.932%。這表明在我們研究的范圍內,CNN 第一層的兩個分支均使用 64 個卷積核,而第二層使用 128 個卷積核,可以達到最優的總體分類效果。
對比表中Se和Sp可以發現,Model 5 的Se最高(91.156%),而 Model 3 和 Model 4 的Sp相對較高(分別為 91.932% 和 92.074%)。這表明如果想要達到較高的 S1 檢出率,需要在 CNN 的第一層使用 128 個卷積核,在第二層使用 256 個卷積核。若想達到較高的 S2 檢出率,則第一層可以使用 64 或 128 個卷積核,第二層使用 128 個卷積核。
綜合來看,上文所提出的 Model 3 雖然Se低于文獻[16]所描述的結果,但其Acc高于文獻[14-16]的效果,這證明了本文所述方法有利于提高 S1 和 S2 識別的分類準確率。此外,本文所述方法無須繁瑣的特征提取步驟,而是由 CNN 自動提取特征,這使得模型構建流程的復雜性進一步降低。
3.2 對實際采集心音的分類結果
為了驗證本文所提出模型實際應用的效果,我們在中國醫學科學院阜外醫院采集了 20 例患者的心音,其中竇性心律和心律不齊的患者各 10 例,采集的心音包括主動脈瓣聽診區和二尖瓣聽診區的心音,每段心音采集時長為 40 s。其中心律不齊的患者包括 3 例室性早搏、3 例房性早搏、2 例左束支傳導阻滯和 2 例右束支傳導阻滯的病例。心音數據采集符合醫學倫理學原則,在采集數據前已經征得被測試人員同意,且采集時未損害被測試者人體。使用 Model 3 對上述心音中的 S1 和 S2 進行分類,結果如表 4 所示。

從表 4 中可以看出,Model 3 對于竇性心律心音的 S1 和 S2 分類準確率高于心律不齊心音的 S1 和 S2。這可能是由于竇性心律的心音的頻譜特征與用于訓練模型的樣本更加相似。此外,在主動脈瓣聽診區采集的心音,S2 檢出率高于 S1,而在二尖瓣聽診區采集的心音,S1 檢出率高于 S2。這是由于主動脈瓣聽診區 S2 強度較高,S1 更容易受噪聲所影響,而二尖瓣聽診區則 S1 強度高于 S2。可見,如果想要實現更加精確的 S1 和 S2 分類,需要多個聽診區同步采集心音。
為了展示本模型對不同心律不齊疾病心音中 S1 和 S2 的識別效果,我們在表 5 和表 6 中分別給出本模型對采集于四類心律不齊患者主動脈瓣聽診區和二尖瓣聽診區的心音的詳細識別結果。可以看出,在上述兩個聽診區采集的心音中,右束支傳導阻滯心音的 S1 和 S2 分類準確率相對較低,其他三類心律失常心音中 S1 和 S2 的分類準確率大致相同。其原因有待于進一步探究。


值得注意的是,本文所用的分支卷積神經網絡是基于經典的卷積計算方法,計算量相對較大。未來如果需要將該方法應用于嵌入式設備中,則可以借鑒 MobileNet 的思想,采用深度可分離卷積(depth-wise separable convolution)代替傳統卷積,即將標準卷積分解為深度卷積和逐點卷積(pointwise convolution)。如此可以在準確率損失不大的情況下大幅度降低 CNN 的參數數量,同時將每次卷積的計算量減少(其中N為輸入特征圖的大小,DK為標準卷積核的大小)。同時,也可以嘗試 ShuffleNet 的思路,將輸入層的不同特征圖分組,然后使用不同卷積核對各個組進行卷積,以降低計算量。文獻[44]表明分組之后計算量可以降低到原來的 1/g(g為輸入輸出的組數)。
4 總結
不使用時間信息的心音分割長期以來是一個難點,此時無法利用收縮期短于舒張期這一特性確定第一心音(S1)和第二心音(S2)。本文提出了一種 S1 和 S2 的識別方法,該方法在對心音信號進行短時傅里葉變換的基礎上,使用訓練好的分支卷積神經網絡對 S1 和 S2 進行分類。對比不同的卷積神經網絡模型,我們發現本文所提出的模型的分類準確率最高可以達到 91.135%,分類敏感性和特異性最高分別可達到 91.156% 和 92.074%。此后將訓練出來的模型用于我們采集到的竇性心律和心律不齊的心音,采集區域為主動脈瓣聽診區和二尖瓣聽診區。結果表明對于主動脈瓣聽診區采集到的心音,S2 檢出率較高,而對于二尖瓣聽診區采集到的心音,S1 檢出率較高。本文所述方法無須預先提取復雜的特征,計算較為簡單,能夠迅速識別 S1 和 S2,有利于實現不依賴時間間隔特征的心音分割。下一步我們將改進本文所述模型,減小計算量,以移植到嵌入式系統中;另外,我們計劃研究進一步提高識別準確率的方法,例如多聽診區同時采集心音等。同時,考慮到實際采集到的心音經常包含各種類型的噪聲,我們將研究使用卷積神經網絡識別包含噪聲的 S1 和 S2,以擴大該方法的適用范圍。
利益沖突聲明:本文全體作者均聲明不存在利益沖突。
引言
心血管疾病在我國是一種較為常見的疾病,盡早發現此類疾病對于提高人們的健康狀況具有非常重大的意義。雖然有超聲心動圖[1]、心臟磁共振[2]、心臟計算機斷層顯像[3]等方法可用于心臟的檢查,但這些設備通常價格昂貴,操作復雜,不利于普及化。由于心音中包含了大量關于心臟和心血管的重要信息[4-5],因此可以被用于判斷心臟的健康狀況。心音聽診是一種非侵入式的利用心音進行心臟疾病診斷的方法,該方法易于操作,成本低廉,適合大規模推廣。
典型的心音波形如圖 1 所示。一個心音周期通常可以分為收縮期和舒張期。普通人的心音中,容易聽見的成分主要有第一心音(S1)和第二心音(S2)。S1 是由二尖瓣(mitral valve,MV)和三尖瓣(tricuspid valve,TV)的關閉引起的,產生于心臟的收縮期,是心室收縮的標志,其頻率范圍主要分布于 50~150 Hz。S2 是由主動脈瓣(aortic valve,AV)和肺動脈瓣(pulmonary valve,PV)的關閉引起的,產生于舒張期的開始階段,主要成分的頻率范圍為 50~200 Hz[6-7]。在基于心音的計算機輔助診斷中,一個心動周期通常被分割為四個階段:S1、S1~S2、S2 和 S2~S1[8]。當心臟出現異常時,心音中可能會有雜音的出現,有效利用此雜音可以實現心臟疾病的診斷[9-10]。

由于一個心動周期中不同階段的雜音對應的疾病往往是不同的,心音的準確分割對于心臟疾病的診斷具有非常重大的意義。S1 和 S2 的定位在心音分割中非常重要。目前常用的識別 S1 和 S2 的方法大多利用了收縮期和舒張期的時間特性,然而一些患者心臟的收縮期和舒張期時長大小關系不固定,此時利用收縮期和舒張期的時長特性來識別 S1 和 S2 是不準確的[11]。為了解決上述問題,研究人員提出僅用 S1 和 S2 本身的特征來對其進行區分。Kumar 等[12]計算心音的高頻包絡,并設定了一個閾值。由于 S2 的頻率上限通常高于 S1,作者將包絡超過該閾值的心音段判定為 S2。這種方法對于閾值的選擇非常敏感。另外,有時 S1 與 S2 的頻率分布非常接近,此時該方法的準確率有限。Moukadem 等[11]提出了基于心音 S 矩陣奇異值分解(singular value decomposition,SVD)提取心音特征,并使用 k 最近鄰(k-nearest neighbor,KNN)算法對其進行分類。但 KNN 算法需要將待測樣本與數據庫中全部樣本進行對比,當數據庫中樣本較多時,計算耗時太長,不利于實時分類[13]。侯雷靜[14]提取了心音的梅爾倒譜系數(Mel-frequency cepstral coefficients,MFCCs),并使用深度神經網絡(deep neural network,DNN)對 S1 和 S2 進行分類,平均準確率為 88.63%。Chen 等[15]先將心音轉換為 MFCC 的序列,然后使用 K-means 算法將每一個心音段的聲學特征聚類為兩組,計算每個組的中心向量,合并上述兩個中心向量為一個超向量,然后使用該超向量訓練深度神經網絡,進而對心音中的 S1 和 S2 進行分類。該模型準確率可達到 91%,但計算過程較為繁瑣。Tsao 等[16]提出使用譜重建算法(spectral restoration algorithm,SRA)以減小心音中的噪聲成分,并使用多重訓練策略(multi-style training strategy,MTS)來訓練穩健的 DNN 對 S1 和 S2 進行分類,但是該方法也存在提取特征過程繁瑣以及訓練流程復雜的不足。
本文提出了一種基于卷積神經網絡(convolutional neural network,CNN)的 S1 和 S2 識別方法。對心音數據進行短時傅里葉變換(short-time Fourier transform,STFT),將其轉換為時頻圖,再由專業醫生對時頻圖中 S1 和 S2 數據段進行標注。使用訓練集中已標注的 S1 和 S2 時頻圖訓練不同深度的 CNN。當訓練完成后,使用該神經網絡對測試集中的 S1 和 S2 進行分類。本方法無須預先提取心音信號的特征,免去了繁瑣的計算過程,具有較高的實用價值。
1 算法介紹
1.1 短時傅里葉變換
STFT 是一種常用的時頻分析方法,它是 Gabor 于 1946 年提出的,其表達式為[17]:
![]() |
其中x(τ)為待變換的時域信號,h(·)為窗函數,需要足夠窄以確保窗內的信號是平穩的。對于具體的時刻t0,S(t0,f)可以看成是信號在該時刻的瞬時頻譜[18]。當心音進行 STFT 之后,就被轉成類似圖像的二維信號,可以反映出心音頻率分布的特征。
1.2 卷積神經網絡
近年來,隨著高性能 GPU 的出現,計算機的運算能力得到了很大提高,這使得 DNN 得到了大規模應用[19]。CNN 作為 DNN 的一種,被廣泛應用于自然語言處理[20]、語音信號處理[21]、目標識別[22]、醫學信號和圖像分析[23-26]等領域。傳統的圖像模式識別方法需要預先提取圖像的特征,但是這嚴重依賴于使用者的經驗。通過使用大量數據進行訓練,CNN 可以學習到自動提取圖像特征的方法,這對于降低處理流程的復雜性和提高識別準確率都是有益的[27-28]。此外,CNN 使用了共享權重機制,需要計算的參數比傳統全連接 DNN 少[29-31]。在語音識別中,部分研究人員將語音信號轉換為語譜圖送入 CNN 中[32],這在某種程度上與圖像識別類似。而心音也是一種音頻信號,由于 S1 和 S2 的頻率分布不同,其 STFT 變換后得到的時頻圖也是不同的,因此可以使用 CNN 對 S1 和 S2 進行識別。
在 CNN 中,比較具有代表性的有 AlexNet[33]、GoogLeNet[34]、VGGNet[35]和 ResNet[36]等,這些網絡在計算機視覺任務中有突出的表現。然而上述網絡都是為復雜的分類任務而設計的,參數較多,需要使用大量的數據訓練。當訓練數據不足時,很容易出現過擬合的現象。此外,這些復雜網絡占用計算機的資源較多。在本文中,我們沒有直接使用這些復雜的網絡,而是構建了一個帶分支的小型雙層 CNN 網絡用于實現 S1 和 S2 的分類。
本文所使用的分支 CNN 的結構如圖 2 所示,它由輸入層、卷積層、池化層、全連接層和輸出層組成。在本文中,輸入層為 S1 和 S2 的時頻圖。卷積層用于訓練輸入圖像局部的感受野,進而可以提取圖像的抽象特征。抽象特征的矩陣由輸入圖像與卷積核卷積運算之后生成,其計算公式為:

![]() |
其中g(·)為激活函數,m為當前層,ki,j為濾波器,bj為偏置,*表示卷積操作,Tj表示輸入特征矩陣的集合。激活函數中常用的有 tanh、sigmoid 和 ReLU 等[37]。考慮到 ReLU 激活函數計算速度較快,且可以有效地避免訓練時的過飽和與梯度消失[38-39],本文選用 ReLU 激活函數,其表達式為:
![]() |
池化層(pooling layer)也被稱為減采樣(sub-sampling)層,通常用于對卷積之后的特征圖進行減采樣。常用的池化方式有兩種:最大值池化(max pooling)和平均值池化(average pooling)。最大值池化計算局部特征圖的最大值,而平均值池化計算局部特征圖中的平均值[40]。本研究采用最大值池化。
本文所用的模型第一層使用了分支的卷積神經網絡,兩個分支的卷積核大小分別固定為 3 × 3 和 5 × 5,這有利于提取輸入心音時頻圖不同層次的特征。經過分支卷積后,需要將結果合并,然后送到第二層卷積神經網絡中。由于本文研究的是分類問題,訓練時選用交叉熵誤差(cross entropy error)損失函數[41]。
2 實驗過程
2.1 實驗數據
本文的研究使用 PhysioNet/Computing in Cardiology Challenge 心音數據庫(

在表 1 中,訓練集和測試集分別有 2 917 和 323 個心音文件。由于心音的頻率范圍通常低于 500 Hz[43],根據奈奎斯特采樣定理,我們將訓練集和測試集中的心音都由 4 kHz 減采樣至 1 kHz。圖 3 所示為一個典型的心音周期的時域波形和對應的 STFT 之后的時頻圖。我們選出心音中的 S1 和 S2(如圖中白線包圍的部分)送入 CNN 中進行訓練和測試。數據庫的訓練集中 S1 有 83 754 個,S2 有 83 631 個,測試集中 S1 有 9 181 個,S2 有 9 172 個。

a. 時域波形;b. 短時傅里葉變換后的時頻圖
Figure3. A heart sound cyclea. waveform; b. time-frequency diagram after short-time Fourier transform
2.2 神經網絡構建與計算
為了對比不同結構 CNN 的效果,本文構建了五種 CNN,其結構如表 2 所示。其中 Conv1a 和 Conv1b 分別表示第一層中兩個分支所使用的卷積濾波器數量,Dropout1a 和 Dropout1b 分別表示第一層中兩個分支的隨機 dropout 比例。

本研究使用 Keras 和 Tensorflow 構建 CNN 網絡,利用相同的數據訓練和測試上述五種 CNN 模型。計算機主要配置如下:操作系統為 Ubuntu 18.04,CPU 為 Intel i5 8400,主板為 GIGABYTE B360-HD3,顯卡為 GTX1060 6 GB,內存為 DDR4 2400(共 24 GB)。訓練 300 個 epoches。訓練過程中的 Loss 曲線和 Accuracy 曲線如圖 4 所示。

3 分類結果分析
本文使用準確率(accuracy)、敏感性(sensitivity)和特異性(specificity)來衡量不同 CNN 模型的分類性能。其計算公式為
![]() |
![]() |
![]() |
其中Acc、Se、Sp分別表示準確率、敏感性和特異性,TP 表示真陽性(本來是陽性,被正確分類為陽性)的樣本個數,FP 表示假陽性(本來不是陽性,被錯誤分類為陽性)的樣本個數,TN 表示真陰性(本來是陰性,被正確分類為陰性)的樣本個數,FN 表示假陰性(本來不是陰性,被錯誤分類為陰性)的樣本個數。在本文中為了便于說明,我們假定 S1 為陽性,S2 為陰性。因此,TP 表示的是 S1 的正確檢出數,TN 表示的是 S2 的正確檢出數。
3.1 在公開數據集上的結果
表 3 給出了不同的模型對表 1 中測試集數據的分類結果。作為對比,表 1 中也列出了使用文獻[14-16]分類方法的準確率。

對比表 3 中 Model 1 到 Model 3 的結果可以看出,隨著第一層卷積濾波器數量的增加(依次為 16、32、64),預測準確率Acc會上升。這表明卷積濾波器數量的增加使得 CNN 具備更強大的特征提取能力。然而對比 Model 3 和 Model 4 可以發現,繼續增加第一層卷積濾波器的數量反而導致Acc下降。此時如果增加第二層的濾波器數量,可以發現Acc有所提升(對比 Model 4 和 Model 5)。 Model 5 的參數數量比 Model 3 多,但其 Acc 略低于 Model 3。這可能是由于訓練時出現了過擬合的情況。在本文所述模型中,Acc最高的模型為 Model 3,為 91.135%,其對應的Se為 90.339%,Sp為 91.932%。這表明在我們研究的范圍內,CNN 第一層的兩個分支均使用 64 個卷積核,而第二層使用 128 個卷積核,可以達到最優的總體分類效果。
對比表中Se和Sp可以發現,Model 5 的Se最高(91.156%),而 Model 3 和 Model 4 的Sp相對較高(分別為 91.932% 和 92.074%)。這表明如果想要達到較高的 S1 檢出率,需要在 CNN 的第一層使用 128 個卷積核,在第二層使用 256 個卷積核。若想達到較高的 S2 檢出率,則第一層可以使用 64 或 128 個卷積核,第二層使用 128 個卷積核。
綜合來看,上文所提出的 Model 3 雖然Se低于文獻[16]所描述的結果,但其Acc高于文獻[14-16]的效果,這證明了本文所述方法有利于提高 S1 和 S2 識別的分類準確率。此外,本文所述方法無須繁瑣的特征提取步驟,而是由 CNN 自動提取特征,這使得模型構建流程的復雜性進一步降低。
3.2 對實際采集心音的分類結果
為了驗證本文所提出模型實際應用的效果,我們在中國醫學科學院阜外醫院采集了 20 例患者的心音,其中竇性心律和心律不齊的患者各 10 例,采集的心音包括主動脈瓣聽診區和二尖瓣聽診區的心音,每段心音采集時長為 40 s。其中心律不齊的患者包括 3 例室性早搏、3 例房性早搏、2 例左束支傳導阻滯和 2 例右束支傳導阻滯的病例。心音數據采集符合醫學倫理學原則,在采集數據前已經征得被測試人員同意,且采集時未損害被測試者人體。使用 Model 3 對上述心音中的 S1 和 S2 進行分類,結果如表 4 所示。

從表 4 中可以看出,Model 3 對于竇性心律心音的 S1 和 S2 分類準確率高于心律不齊心音的 S1 和 S2。這可能是由于竇性心律的心音的頻譜特征與用于訓練模型的樣本更加相似。此外,在主動脈瓣聽診區采集的心音,S2 檢出率高于 S1,而在二尖瓣聽診區采集的心音,S1 檢出率高于 S2。這是由于主動脈瓣聽診區 S2 強度較高,S1 更容易受噪聲所影響,而二尖瓣聽診區則 S1 強度高于 S2。可見,如果想要實現更加精確的 S1 和 S2 分類,需要多個聽診區同步采集心音。
為了展示本模型對不同心律不齊疾病心音中 S1 和 S2 的識別效果,我們在表 5 和表 6 中分別給出本模型對采集于四類心律不齊患者主動脈瓣聽診區和二尖瓣聽診區的心音的詳細識別結果。可以看出,在上述兩個聽診區采集的心音中,右束支傳導阻滯心音的 S1 和 S2 分類準確率相對較低,其他三類心律失常心音中 S1 和 S2 的分類準確率大致相同。其原因有待于進一步探究。


值得注意的是,本文所用的分支卷積神經網絡是基于經典的卷積計算方法,計算量相對較大。未來如果需要將該方法應用于嵌入式設備中,則可以借鑒 MobileNet 的思想,采用深度可分離卷積(depth-wise separable convolution)代替傳統卷積,即將標準卷積分解為深度卷積和逐點卷積(pointwise convolution)。如此可以在準確率損失不大的情況下大幅度降低 CNN 的參數數量,同時將每次卷積的計算量減少(其中N為輸入特征圖的大小,DK為標準卷積核的大小)。同時,也可以嘗試 ShuffleNet 的思路,將輸入層的不同特征圖分組,然后使用不同卷積核對各個組進行卷積,以降低計算量。文獻[44]表明分組之后計算量可以降低到原來的 1/g(g為輸入輸出的組數)。
4 總結
不使用時間信息的心音分割長期以來是一個難點,此時無法利用收縮期短于舒張期這一特性確定第一心音(S1)和第二心音(S2)。本文提出了一種 S1 和 S2 的識別方法,該方法在對心音信號進行短時傅里葉變換的基礎上,使用訓練好的分支卷積神經網絡對 S1 和 S2 進行分類。對比不同的卷積神經網絡模型,我們發現本文所提出的模型的分類準確率最高可以達到 91.135%,分類敏感性和特異性最高分別可達到 91.156% 和 92.074%。此后將訓練出來的模型用于我們采集到的竇性心律和心律不齊的心音,采集區域為主動脈瓣聽診區和二尖瓣聽診區。結果表明對于主動脈瓣聽診區采集到的心音,S2 檢出率較高,而對于二尖瓣聽診區采集到的心音,S1 檢出率較高。本文所述方法無須預先提取復雜的特征,計算較為簡單,能夠迅速識別 S1 和 S2,有利于實現不依賴時間間隔特征的心音分割。下一步我們將改進本文所述模型,減小計算量,以移植到嵌入式系統中;另外,我們計劃研究進一步提高識別準確率的方法,例如多聽診區同時采集心音等。同時,考慮到實際采集到的心音經常包含各種類型的噪聲,我們將研究使用卷積神經網絡識別包含噪聲的 S1 和 S2,以擴大該方法的適用范圍。
利益沖突聲明:本文全體作者均聲明不存在利益沖突。