天天看點

如何利用深度學習診斷心髒病

如何利用深度學習診斷心髒病
開發一個能夠對心髒磁共振成像(MRI)資料集圖像中的右心室自動分割的系統。到目前為止,這主要是通過經典的圖像處理方法來處理的。而現代深度學習技術有可能提供更可靠、更自動化的解決方案。
在腔記憶體在信号強度類似于心肌的小梁; RV複雜的新月形;分割根尖圖像切片的難度;個體之間的室内形狀和強度存在相當大的差異,特别是在不同的疾病病例之間。

撇開醫學術語不談,要識别RV就更困難了。左心室是一個厚壁圓環,而右心室是一個形狀不規則的物體,有薄的壁,有時會與周圍的組織混合在一起。這是MRI快照右心室内壁和外壁(心内膜和心外膜)的手工繪制輪廓:

如何利用深度學習診斷心髒病

這是一個分割起來很容易的例子。這一個比較困難:

如何利用深度學習診斷心髒病

而這對于沒有經過訓練的眼睛來說完全是一個挑戰:

如何利用深度學習診斷心髒病

事實上,與左心室相比,醫生需要耗費兩倍的時間來确定右心室的體積并生成結果。這項工作的目的是建立一個高度準确的右心室自動分割深度學習模型。模型的輸出是分割掩碼,即一個逐像素的掩碼,用來表示某個像素是否是右心室的一部分或隻是背景。

由于資料集過小,人們可能會懷疑無法将其一般化到尚未看到的圖像!但是很不幸,醫療上标記過的資料非常昂貴,并且很難擷取到。對資料集進行處理的标準程式是對圖像應用仿射變換:随機旋轉、平移、縮放和剪切。此外,我實作了彈性變形,也就是對圖像的局部區域進行拉伸和壓縮。

如何利用深度學習診斷心髒病

應用這種圖像增強算法的目的是為了防止神經網絡隻記住訓練的樣例,并強迫其學習RV是一個實心的、月牙形的、方向任意的物體。在我實作的訓練架構中,我會随時對資料集應用圖像變換算法,這樣,神經網絡就會在每次訓練時看到新的随機變換。

由于大多數像素都屬于背景,是以各個種類之間分布不平衡。如果将像素強度歸一化在0和1之間,那麼在整個資料集中,隻有5%的像素屬于RV腔的一部分。

如何利用深度學習診斷心髒病

在建立損失函數時,我嘗試了重權重方案來平衡種類的分布情況,但最終發現未權重平均算法的表現最好。

在訓練中,有20%的圖像被取出來作為驗證集使用。 RV分割挑戰賽的組織者有一個單獨的測試集,它由另外32個患者的514張MRI圖像組成。我送出的預測輪廓就是使用這個測試集進行最終評估的。

如何利用深度學習診斷心髒病
如何利用深度學習診斷心髒病

計算值是交叉區域與兩區域之和的比率的兩倍。對于不相交的區域,值為0;如果兩區域完全一緻,則值為1。

下面我們來看下模型架構。

由于我們隻有四周的時間來完成這個項目,是以我想盡快實作一個基線模型并讓它運作起來。我選擇了由Ronneberger、Fischer和Brox提出的u-net模型,因為它曾在生物醫學分割項目中取得過成功,而且它的作者能夠通過使用積極的圖像增強和逐像重新權重算法并僅基于30張圖檔來訓練網絡。

u-net架構由一個收縮路徑組成,就是将圖像折疊成一組進階特征,随後是使用特征資訊建構像素分割掩碼的擴充路徑。 u-net獨特的地方就是它的“複制和合并”連接配接,這些連接配接能夠将資訊從早期特征圖傳遞到建構分割掩碼網絡的後續部分。作者指出,這些連接配接允許網絡同時并入進階特征和像素方面的細節。

我們使用的架構如下所示:

如何利用深度學習診斷心髒病

由于我們圖像尺寸是u-net作者原本考慮的一半大小,是以我們需要将原始模型中的降采樣層數從4個減少到3個來适應網格。我們也要用零來填充卷積,以保持圖像的大小不變。該模型是用Keras實作的。

如果沒有圖像增強,u-net在訓練資料集上的戴斯系數能達到0.99(0.01),這意味着該模型具有足夠的能力來捕獲RV分割問題的複雜性。然而,驗證戴斯系數為0.79(0.24),是以u-net過強。圖像增強改進了泛化,并将驗證精度提高到了0.82(0.23),代價是将訓練精度降至0.91(0.06)。

要對器官圖像進行分割,需要了解器官之間排列的相關知識。事實證明,即使在u-net最深層的神經元也隻有68×68像素的感受野。網絡的任何部分都無法“看到”整個圖像。網絡不知道人類隻有一個右心室。例如,下面的圖檔中,箭頭标記的地方被錯誤分類了:

如何利用深度學習診斷心髒病

我們使用擴張卷積來增加網絡的感受野。

如何利用深度學習診斷心髒病

在上圖中,底層的卷積是規則的3×3卷積。下一層,我們将卷積擴大了2倍,是以在原始圖像中它們的有效感受野是7×7。如果頂層卷積擴大4倍,則能産生15×15的感受野。以此類推。

如何利用深度學習診斷心髒病

從原理上來說,黃色标記的卷積層被u-net中的擴張卷積所替代。最内層的神經元現在具有了覆寫整個輸入圖像的感受野。我稱之為“擴張u-net”。

在數量上,擴張u-net确實提高了效果,達到了0.85(0.19)的驗證戴斯分數,同時保持了0.92(0.08)的訓練效果!

對于分割而言,我們需要來自多個尺度的全局上下文和資訊來産生像素級掩碼。如果我們完全依賴于擴張卷積來産生全局上下文,而不是通過降采樣來将圖像變得更小呢?現在,所有卷積層的大小都相同,我們可以應用DenseNet架構的關鍵思想,并在所有層之間使用“複制和合并”連接配接。擴張DenseNet的結果如下圖所示:

如何利用深度學習診斷心髒病

在DenseNet中,第一個卷積層的輸出作為輸入饋送到所有的後續層中,第二、第三層也這樣。

擴張DenseNet表現不錯,在驗證集上得到了0.87(0.15)的戴斯得分,訓練精度為0.91(0.10),同時保持了極高的參數效率!

對人類在RV分割方面的評估給如何對模型的表現進行評估指明了方向。研究人員估計,人類完成RV分割任務的戴斯得分為0.90(0.10)。上面所述的已經釋出的模型是完全卷積網絡(FCN),測試集上的精度為0.84(0.21)。

我開發的模型在驗證集上已經超過了最新的技術水準,并且正在接近人類的表現!然而,真正的評測是在測試集上評估模型的表現。此外,上面引用的數字是針對心内膜的, 那麼心外膜的表現如何呢?我在心外膜上訓練了一個單獨的模型,并将細分輪廓送出給了組織者,希望能獲得最好的成績。

以下是結果,首先是心内膜:

如何利用深度學習診斷心髒病

這個是心外膜:

如何利用深度學習診斷心髒病

擴張u-net與心内膜上的最新技術水準相當,并超過它在心外膜上的表現。擴張DenseNet緊跟其後,僅有190K個參數。

深度學習模型的表現有時候看起來似乎很神奇,但這是精心設計的結果。即使資料集很小,精心挑選的資料增強方案也可以讓深度學習模型更好地一般化。

根據這些想法,我建立出了最先進的模型來分割心髒MRI中的右心室。我非常高興地看到了擴張DenseNet能夠在其他圖像分割評測上成功運作。

文章的最後,我來談談本項目未來可能需要做的工作:

對資料集進行權重,以突出難以分割的根尖切片。

探索多級(本地化、注冊、細分)流水線。

在生産系統中優化射血分數。

記憶體高效的擴張DenseNet:密集連接配接的網絡有一個很大的缺點,它需要占用大量的記憶體。 而TensorFlow的實作卻與衆不同,它将我們限制在16GB GPU并且一個批次具有3個圖像的8個層上。如果切換到之前提出的記憶高效的實作上的話,就可以建立出更深層次的體系架構來。

文章原标題《Heart Disease Diagnosis with Deep Learning》,作者:Chuck-Hou Yee,譯者:夏天,審校:主題曲。

繼續閱讀