陳宇峰,陳建文,侯佳儀
(1.蘭州大學 數學與統計學院,蘭州 甘肅 730107;2.蘭州大學 外國語學院,蘭州 甘肅 730107)
2020年的新冠肺炎疫情讓大眾對于病毒性肺炎有了更加深刻的認識,放射學影像(Radiography)數據的分析是對于病毒性肺炎的重要診療手段,通過使人體內部結構和器官形成影像,了解人體解剖與生理功能狀況以及病理變化,以達到診斷的目的。根據《流行性感冒診療方案(2018年版)》:“并發肺炎者影像學檢查可見肺內斑片狀、磨玻璃影、多葉段滲出性病灶;進展迅速者,可發展為雙肺彌漫的滲出性病變或實變,個別病例可見胸腔積液”。因為通過放射學影像(Radiography),可以對于患者的診療做出初步判斷。
同時,在機器學習中,深度學習屬于其研究中一個相對較新的方向,得益于計算機的發展和運算速度的提升,深度學習在今年來也成為了研究人員廣泛使用的工具之一[2]。其主要目的是構建一系列多層的學習模型,通過對數據集數據進行訓練,提取有效的特征信息,對一些未知信息進行有效預測,提高預測的準確率。作為最受歡迎且發展最快的深度學習框架之一,Keras支持GPU和CPU,此框架優點在于代碼簡潔,在搭建新的網絡架構時能夠極大地提高效率,同時支持TensorFlow等作為后端。
卷積神經網絡(Convolutional Neural Networks,CNN)也叫convnet,它是計算機視覺應用幾乎都在使用的一種深度學習模型[2],卷積神經網絡有局部連接,權重共享和等變表示三個結構上的特點。因此這些特性使得卷積神經網絡具有一定程度上的平移、縮放和旋轉不變性[3]。在面對深度學習對圖像進行分類的問題以及訓練數據集較小的情況下,卷積神經網絡能夠發揮出較好的效果,卷積神經網絡的工作原理大致分為三個部分:卷積層、池化層、全連接層[4-5]。如圖1示。

圖1 卷積神經網絡示意圖
CHEST X-RAY DATABASE是一個圖像數據集,是用于研究病毒性肺炎的放射學影像識別。共有1341個正常圖像和1345個病毒性肺炎圖像。圖片均取自胸部X線圖像(肺炎)數據庫。所有的圖像都是便攜式網絡圖形(PNG)文件格式,分辨率為1024×1024像素,因此可以容易地轉換為卷積神經網絡(CNN)通常需要的224×224像素。本次CHEST X-RAY DATABASE中共有2686張黑白放射影像圖片,每張大小均為1024×1024,其中2000張圖像用于訓練,686張圖像用于測試,所有圖片的內容標簽分為兩類類(分別為正常圖像及病毒性肺炎陽性圖像),每一張圖片都擁有唯一的獨立標簽,兩種標簽的圖像數量接近1:1(1341:1345)。
本次模型采用的是卷積神經網絡(CNN),使用固定尺寸的小卷積核( 3×3),一共有五層卷積層,每一層卷積層搭配一層池化層,以2的冪次遞增卷積核數量。其中卷積核為128的卷積層有兩層;卷積核為32、64、256的卷積層均只有一層,隨后將結果輸入到Flatten層。并采用Dropout的正則化方法,防止模型過擬合,最后利用激活函數sigmoid輸出結果。
2.3.1 圖像數據的預處理
圖像預處理主要分為兩個個階段,首先將數據集(CHEST X-RAY DATABASE)的所有圖像打亂并隨機選擇以用于模型的訓練和測試;其次將用于訓練的圖像進行數據增強,主要包括水平翻轉,小角度旋轉、縮放,和加入高斯噪聲(方差0.5)。最后再導出預處理后的訓練圖像用于下一階段的模型訓練。
2.3.2 利用Keras 建立模型
在window10環境下,利用Pycharm進行編程,首先導入Keras的相關模塊以及其他相關庫,以TensorFlow作為后端,基于Keras構造上述模型。使用summary()查看的模型的完整結構如圖2所示。

圖2 卷積神經網絡模型結構圖
此模型共計五段卷積網絡,每一段卷積網絡由一層卷積層和一層池化層構成。五層卷積層的步長均為 1×1;卷積核分別為32、64、128、128、256。每層卷積網絡后均為一個2×2的最大池化層。通過五段卷積網絡后,將結果輸入Flatten層。Flatten層能夠使多維的輸入一維化,在Flatten層之后采用Dropout的正則化方法,提升模型的泛化能力并防止模型過擬合,隨后進入一層帶有‘relu’激活的全連接層(Dense),之后直接進入2分類的sigmoid Classifier。
2.3.3 實驗結果與分析
本模型采用的編程語言為Python,深度學習框架為Keras,將上文提及的深度學習模型對數據集(CHEST X-RAY DATABASE)的圖片預處理后進行特征提取與訓練,因訓練數據較少,故通過選用不同的Steps Per Epoch值對模型訓練結果進行比較。

首先選用Steps Per Epoch=20對模型進行訓練,經過100步的迭代,將訓練好的模型對數據集(CHEST X-RAY DATABASE)訓練集進行測試,所能達到的最高準確率為96.00%,在第62步達到。模型在測試集上所能達到的最高準確率為97.00%,在第43步達到。此處出現測試集正確率最大值高于訓練集正確率最大值的原因,可能在于:使用的比例為0.5的Droput層以及用于訓練的數據量過少(總共只有2686組可用數據)。在數據集(CHEST X-RAY DATABASE)上的模型訓練過程準確率和損失率數據在可視化后,得到準確率和損失率變化曲線,如圖3所示。

圖3 模型訓練損失和準確率變化曲線(Steps Per Epoch=20)
根據圖3的損失率變化曲線,可以觀察到模型在測試集上的準確率以及損失波動過大,在Epoch=40開始過擬合。通過模型訓練過程相關圖表以及訓練數據,基于數據集(CHEST X-RAY DATABASE)數據量過小等限制條件,我們大概可以得出Steps Per Epoch為20的模型準確度應該在80%-95%之間。而模型在訓練及驗證時準確率與損失波動過大的原因可能在于所有選取的Steps Per Epoch參數過小。當把模型的Steps Per Epoch改為30時,在數據集(CHEST X-RAY DATABASE)上的模型訓練過程準確率和損失率數據在可視化后,得到準確率和損失率變化曲線,如圖4所示。

圖4 模型訓練損失和準確率變化曲線(Steps Per Epoch =30)
相較于Steps Per Epoch =20的情況下,當Steps Per Epoch e值為30時,模型在測試集上的實驗穩定性有所提升。經過100步的迭代,此模型在訓練集上所能達到的最高準確率為 97.00%,在第50步達到。模型在測試集上所能達到的最高準確率為98.00%,在第65步達到,通過訓練過程的相關數據,我們大概可以得出Steps Per Epoch為30的模型準確度應該在90%-95%之間。
最后將Steps Per Epoch分別設置為40和50、60。得到模型的訓練損失和準確率變化曲線圖5、圖6和圖7

圖5 模型訓練損失和準確率變化曲線(Steps Per Epoch =40)

圖6 模型訓練損失和準確率變化曲線(Steps Per Epoch =50)

圖7 模型訓練損失和準確率變化曲線(Steps Per Epoch =60)
通過對比不同的Steps Per Epoch參數條件下模型訓練過程的準確率,我們可以得到當Steps Per Epoch=60時,模型在數據集(CHEST X-RAY DATABASE)上的最高的識別準確率為99%,在模型第92代迭代上取得。
2.3.4 對比不同Steps Per Epoch 選擇下的模型訓練過程
不同的Steps Per Epoch下的損失率、準確率、穩定性的差異見表1。因數據較少,波動過大,故表1中的Accuracy數據采用平均值。通過對比觀察,結合圖3-圖7以及表1,我們可以得到以下幾條關于Steps Per Epoch對訓練模型影響的結論: 在訓練數據較少的情況下,在一定范圍內,Steps Per Epoch值越大,模型的整體的準確率以及損失波動越趨于穩定;Steps Per Epoch值越大,模型訓練時的收斂速度呈現出加快趨勢;Steps Per Epoch越大,模型在數據集上的最高準確率呈現出上升趨勢。

表1 多種Steps Per Epoch 對比結果
本文介紹了一種利用有限訓練數據訓練、應用于識別病毒性肺炎放射學影像的深度學習模型,基于深度學習框架Keras,利用CHEST X-RAY DATABASE數據集進行訓練與測試,利用數據的可視化對比不同Steps Per Epoch條件下的模型訓練過程,實驗得出CHEST X-RAY DATABASE數據集識別正確率最高可以達到99%。模型精準度最高能夠穩定在90%-95%之間。雖然訓練數據過少導致了訓練準確率的不穩定,但通過訓練過程中的相關記錄數據可以得出此模型仍具有一定的實用價值,能夠有效地通過人體放射學影響判斷出患者是否感染病毒性肺炎,為醫療工作者提供有效地參考建議。為解決少量訓練數據情況下的放射學圖像識別問題提供了不錯的思路。