當前位置:
首頁 > 知識 > 醫療保健案例研究:怎樣用深度學習檢測瘧疾?

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

導言

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

本文中,我們將集中討論人工智慧(AI)與流行的開源工具、技術和框架如何被用於發展和改善醫療行業。俗話說,健康就是財富。在這篇文章中,我們將探討如何利用人工智慧來檢測一種致命的疾病--瘧疾,以及如何建立一種低成本、有效和準確的開源解決方案。我們的目的有兩個,了解致命疾病瘧疾的動機和重要性以及深度學習在檢測瘧疾方面的有效性。

本文主要討論以下主題:

此項目的動機

瘧疾檢測方法

瘧疾檢測的深度學習

從頭開始訓練的卷積神經網路

基於預訓練模型的遷移學習

本文不是為了誇大人工智慧的地位,而是展示人工智慧如何用低成本、有效和準確的開源解決方案來幫助瘧疾的檢測和診斷,並減少人工的複雜勞動。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

Python和TensorFlow構建開源深度學習解決方案

由於Python和TensorFlow深度學習框架的強大功能,我們可以以此構建強大的、可擴展的深度學習解決方案。這些工具的另一個好處是開放的源代碼是免費的,這使我們能夠建立具有成本效益的解決方案,並被大家輕易採用和使用。

動機

瘧疾是由瘧原蟲引起的一種致命的、傳染性的由蚊蟲傳播的疾病,這些寄生蟲由感染的雌性按蚊叮咬傳播。共有有五種主要類型的瘧疾。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

瘧疾估計風險健康圖(資料來源:Treated.com)

很明顯,瘧疾在全球各地普遍流行,特別是在熱帶地區。本項目的動機是基於此疾病的性質和致命性。最初,如果被感染的蚊子叮咬,蚊子攜帶的寄生蟲會進入你的血液,開始破壞攜帶氧氣的紅細胞。通常在蚊子叮咬後幾天或數周內開始感到不適,瘧疾的第一癥狀與流感或病毒相似。然而,這些致命的寄生蟲可以生活在人身體內超過一年的時間。延誤治療時機可能引起併發症甚至導致死亡,儘早和準確地檢測瘧疾可以保命。

世界衛生組織公布了幾個關於瘧疾的情況,據統計,世界上將近一半的人正面臨著瘧疾風險,每年有2億以上的瘧疾患病人員和約40萬死於瘧疾的人。所以,利用深度學習,使瘧疾的檢測和診斷迅速、簡便和有效是非常有必要的。

瘧疾檢測方法

瘧疾的檢測和診斷有多種方法,本文簡要介紹部分方法。這些檢查包括但不限於厚和薄的血液塗片檢查、聚合酶鏈反應(PCR)和快速診斷試驗(RDT)。這裡並沒有詳細介紹所有的方法,但後兩種測試都是通常使用的方法,特別是在沒有高質量顯微鏡的情況下。

我們來看一個基於血液塗片的標準瘧疾診斷工作流程

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

瘧疾檢測的血液塗片工作流程

根據《世界衛生組織議定書》的指導方針,這一程序包括在100倍放大率下對血液塗片進行深入檢查。在此過程中,人們手工計算5000個細胞中含有寄生蟲的紅細胞。事實上,我們之前提到過的Rajaraman et. al.的論文,討論的是相似的話題,本文引用了論文中的觀點來使事情更清楚。

厚血塗片有助於檢測寄生蟲的存在,而薄血塗片有助於識別引起感染的寄生蟲的種類(美國疾病控制和預防中心,2012)。

診斷的準確性在很大程度上依賴於人類的專業知識,並且可能受到觀察者之間的差異、疾病流行但資源受限地區、大規模診斷等帶來的負面影響(Mitiku, Mengistu & Gelaw, 2003)。

採用聚合酶鏈反應(PCR)和快速診斷試驗(RDT)等替代技術,然而,PCR分析的性能有限(Hommelsheim et al., 2014),

RDT在疾病流行地區的成本效益較差(Hawkes, Katsuva & Masumbuko, 2009)。

因此,瘧疾檢測絕對是一個複雜的手工過程,也許可以通過深度學習實現瘧疾檢測自動化。

瘧疾檢測的深度學習

由於血液塗片的常規人工診斷是一個複雜的手工過程,需要專業分類知識,並且要計數寄生和未感染細胞。如果世界各地的特定地區沒有足夠的專業知識,可能無法準確檢測瘧疾,還有可能會造成嚴重後果。在利用最先進的(SOTA)圖像處理和分析技術來進行瘧疾監測和構建基於機器學習的分類模型方面已經取得了一些進展。然而,由於數據量太大和功能設計太耗時,這些模型是不可擴展的。

深度學習模型,或者更具體地說,卷積神經網路(CNN)已被證明在各種計算機視覺任務中非常有效。假如您不了解CNN,可以通過本文更深入地了解CNN。簡而言之,CNN模型中的關鍵層包括卷積層和池化層,如下圖所示。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

典型的CNN結構(來源:Deepplearning.net)

卷積層從數據中學習空間層次模式,這些模式也是平移不變的。因此他們能夠學習圖像的不同方面。例如,第一個卷積層將學習局部的模式,如邊角;第二個卷積層將根據第一層的特徵學習更大的模式。這使得CNNs可以自動化特性工程,並學習有效的特性,這些特性還可以很好地概括新的數據點。池化層有助於降低採樣和降維。

因此,CNN可以幫助我們實現自動化和可擴展的工程。此外,在模型的末尾插入密集層使我們能夠執行圖像分類等任務。使用像CNN這樣的深度學習模型進行瘧疾自動檢測可能非常有效、低成本和可擴展,特別是隨著遷移學習和預訓練模型的出現,這些模型即使在數據源不足等限制條件下也能正常工作。

Rajaraman等人的論文《預訓練卷積神經網路作為特徵提取器,用於改進薄血塗片圖像中的寄生蟲檢測》顯示,通過利用論文中提到的六個預訓練模型,他們在檢測瘧疾和非感染樣本時的準確率達到了95.9%。因此,我們的重點是嘗試一些簡單的CNN模型和使用遷移學習的預訓練模型,看看我們在相同的數據集中得到的結果!我們將使用開源工具和框架如Python和TensorFlow來構建我們的模型。

數據集詳細信息

讓我們談談將在分析中使用的數據集。有研究人員在利斯特希爾國家生物醫學傳播中心(LHNCBC)仔細地收集和注釋了健康和受感染的血液塗片圖像數據集。

事實上,他們已經開發了一款手機應用程序,該程序運行在一款Android智能手機上,並與傳統的光學顯微鏡相連,在孟加拉國吉大港醫學院醫院收集了150例惡性瘧原蟲感染患者和50例健康患者的giemsa染色薄血塗片。這款智能手機的內置攝像頭可以用微觀視野拍攝幻燈片的圖像。我們來檢查一下數據集結構,首先根據所使用的操作系統安裝一些基本的選項。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

我在雲上使用基於Debian的系統,因為它有GPU,所以可以加速運行模型。如果沒有樹依賴選項話請先安裝,以便我們可以查看目錄結構。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

我們有兩個文件夾,其中包含受感染和健康的細胞圖像。 我們可以使用以下代碼進一步了解圖像總數。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

看起來我們有一個包含13779張瘧疾和非瘧疾(未感染)細胞圖像的平衡數據集。讓我們從中構建一個數據幀,這將在開始構建數據集時發揮作用。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

建立和探索圖像數據集

要構建深度學習模型,我們需要訓練數據,但我們還需要測試模型在隱藏數據中的性能。分別使用60:10:30分割、驗證和測試數據集。我們將在訓練期間測試和驗證數據集,並檢查模型在測試數據集上的性能。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

顯然,由於血塗片和細胞圖像將根據、測試方法和拍攝照片的方向而變化,因此圖像的尺寸有所不同。 所以需要收集部分訓練數據集的摘要統計數據,以確定最佳圖像尺寸(注意不要接觸測試數據集!)。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

應用並行處理來加速圖像讀取操作,並根據匯總統計,根據結果將每個圖像調整為125x125像素,載入所有圖像並將它們調整為固定尺寸。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

再次利用並行處理加速與圖像載入和調整大小相關的計算。 最後,得到所需尺寸的圖像張量,如前面的輸出所示。接下來我們可以查看一些樣本單元格圖像,以了解這些數據是如何形成的。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

根據以上樣本圖像,我們可以注意到瘧疾和健康細胞圖像之間的一些細微差別。我們基本上會讓深度學習模型嘗試在模型訓練中學習這些模式。在開始訓練模型之前,需要進行一些基本的配置設置。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

我們修正了圖像的尺寸、批量大小、年代和分類標籤的編碼。我們將使用TensorFlow 2.0的alpha版本進行深度學習模型訓練。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

深度學習模型訓練階段

在模型訓練階段,我們將建立幾個深度學習模型,並根據訓練數據對它們進行訓練,並在驗證數據上比較它們的性能。然後,我們將保存這些模型,並在模型評估階段再次使用它們。

模式1:CNN從零開始

第一個瘧疾檢測模型將從零開始建立和訓練一個基本的卷積神經網路(CNN)模型。首先需要對模型架構進行定義。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

在前面的代碼架構上,我們的CNN模型有三個卷積和池化層,然後是兩個密集層,為了正則化,中途退出。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

我們得到的驗證準確率為95.6%,結果還不錯。儘管我們的模型看起來過於擬合,但我們的訓練準確率為99.9%。通過繪製訓練和驗證準確度的損耗曲線,我們可以對此有清晰的認識。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

基本CNN的學習曲線

因此,我們可以看到,在第五階段之後,情況似乎並沒有改善很多。記得保存這個模型,以便接下來進行評估。

model.save("basic_cnn.h5")

深度遷移學習

正如人類具有跨任務傳遞知識的固有能力一樣,遷移學習使我們能夠將以往學習任務中的知識應用到更新的、相關的任務中,在機器學習或深度學習的環境中也是如此。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

深度遷移學習的幾點思考

在本文中,我們的想法是,我們能否利用一個預先訓練好的深度學習模型(它是在一個大數據集上訓練的,比如ImageNet),通過在上下文中應用和傳輸瘧疾檢測的知識來解決瘧疾檢測的問題?

我們將運用兩種最流行的深度遷移學習策略。

作為特徵提取器的預訓練模型

預先訓練與微調模式

我們將使用由牛津大學視覺幾何組(VGG)開發的預訓練VGG-19深度學習模型進行實驗。 VGG-19預訓練模型是已經預先訓練過的模型,它位於具有大量不同圖像類別的大型數據集(ImageNet)上。所以該模型應該已經學習了一個強大的特徵層次結構,這些特徵也跟CNN模型學習的特徵相關。 因此,該模型已經學習了超過一百萬個圖像特徵,可以作為適合計算機視覺問題的新圖像的良好特徵提取器,用於瘧疾檢測。 讓我們簡要討論一下VGG-19模型架構。

認識VGG-19模型

VGG-19模型是一個19層(卷積和完全連接)深度學習網路,建立在ImageNet資料庫上,該資料庫是為圖像識別和分類而構建的。 這個模型由Karen Simonyan和Andrew Zisserman創建。VGG-19模型的體系結構如下圖所示。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

VGG-19模型體系結構

可以清楚地看到模型總共有16個卷積層,使用3 x 3卷積濾波器以及用於下採樣的最大池層,並且每層中總共有兩個完全連接的4096個單元的隱藏層,接著是1000個單元的密集層,其中 每個單元代表ImageNet資料庫中的一個圖像類別。不需要最後三層,因為我們將使用完全連接的密集層來預測瘧疾。我們需要更關注前五個塊,以便可以利用VGG模型作為有效的特徵提取器。

對於其中一個模型,我們將它作為一個簡單的特徵提取器,通過凍結所有五個卷積塊來確保它們的權重不會在每個曆元之後更新。對於最後一個模型,我們將對VGG模型應用微調,在這裡解凍最後兩個塊(第4塊和第5塊),以便在訓練自己的模型時,在每個epoch更新它們的權重。

模型2:作為特徵提取器的預訓練模型

為了建立這個模型,我們將利用TensorFlow載入VGG-19模型,並凍結卷積塊,以便使用它作為圖像特徵提取器。並且需要在最後插入我們自己的密集層來執行分類任務。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

從前面的輸出可以很明顯地看出,模型中有很多層,我們將只使用VGG-19模型的凍結層作為特徵提取器。可以使用以下代碼來驗證模型中有多少層是可訓練的,以及在網路中共有多少層。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

現在,使用前面模型中類似配置和回調來訓練模型。可以觀察以下圖表,圖表顯示了模型的準確性。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

冷凍預訓練CNN的學習曲線

這表明,這個模型並沒有像基本的CNN模型那樣過度擬合,性能也並不是真的更好,實際上比我們的基本CNN模型要差一些。保存這個模型,以便將來進行評估。

model.save("vgg_frozen.h5")

模型3:圖像增強的精調預訓練模型

在最後一個模型中,我們將對預訓練的VGG-19模型的最後兩個塊中出現的層的權重進行微調。除此之外,我們還將介紹圖像增強的概念:從訓練數據集中載入現有的圖像,並對它們應用一些圖像轉換操作,例如旋轉、剪切、平移、縮放等等,以生成現有圖像的新版本。由於這些是隨機變換的,所以我們不會每次都得到相同的圖像。我們將利用tf.keras中名為ImageDataGenerator的程序。keras可以幫助我們創建形象增強器。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

除了縮放圖像(這是必須的)之外,我們不對驗證數據集應用任何轉換,因為我們會用它來評估每個時期的模型性能。讓我們來看一批圖像增強轉換的一些示例結果。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

樣本增強圖像

在前面的輸出中,您可以清楚地看到圖像的細微變化。現在,我們將構建我們的深度學習模型,以確保VGG-19模型的最後兩個模塊是可訓練的。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

我們在模型中降低了學習速度,因為我們不想在微調時對預先訓練的層進行大的權重更新。這個模型的訓練過程將略有不同,因為我們使用數據生成器和fit_generator(…)函數。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

這看起來是最好的模型,它的驗證精度達到了96.5%。基於訓練精度,我們的模型似乎沒有第一個模型擬合得那麼好。這可以通過下面的學習曲線來驗證。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

微調預訓練CNN的學習曲線

保存這個模型,這樣就可以在測試數據集上用它來評估模型了。

model.save("vgg_finetuned.h5")

這就完成了模型訓練階段,接下來在實際的測試數據集上測試以上模型的性能!

深度學習模式性能評估階段

現在,我們通過對測試數據集中的數據進行預測,以此來評估剛剛在訓練階段構建的三個不同的模型,因為僅僅進行驗證是不夠的!我們還構建了一個實用程序模塊model_evaluation_utils,用它來評估具有相關分類指標的深度學習模型的性能。第一步是擴展測試數據。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

下一步是載入之前保存深度學習模型,並對測試數據進行預測。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

最後一步是利用model_evaluation_utils模塊,檢查每個模型的性能與相關的分類指標。

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

醫療保健案例研究:怎樣用深度學習檢測瘧疾?

看起來,第三個模型在測試數據集中測試結果最好,在三個模型中的精確度達到96%,這是相當不錯的。

結語

在本文中,我們研究了一個關於瘧疾檢測的醫學成像案例研究。瘧疾檢測工作非常複雜,沒有足夠的專業人員也是非常嚴重的問題。利用人工智慧技術構建開源軟體可以使人類在檢測瘧疾方面達到最高精確度,也希望在醫療保健領域能更多地採用開源軟體和人工智慧,從而使人工智慧夠造福社會。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT168企業級 的精彩文章:

代表性企業級大容量氦氣硬碟解析:希捷Exos X14
混合雲或成未來主流趨勢

TAG:IT168企業級 |