search
深度學習下的醫學圖像分析(三)

深度學習下的醫學圖像分析(三)

導語:本文將從卷積神經網路的角度討論深度學習

本文由圖普科技編譯自《Medical Image Analysis with Deep Learning Part3》,是最近發表的《深度學習下的醫學圖像分析(二)》的後續文章。

本文將從卷積神經網路的角度討論深度學習。在本文中,我們將使用Keras和Theano,重點關注深度學習的基本原理。本文將展示兩個例子——其中一個例子使用Keras進行基本的預測分析,另外一個使用VGG進行圖像分析。

我們談論的話題其實是相當廣泛和深入的,需要更多的文章進行探討。在接下來的一些文章中,我們將會討論醫學影像中DICOM和NIFTI格式之間的不同,並且研究如何使用深度學習進行2D肺分割分析。除此之外,我們還將討論在沒有深度學習時,醫學圖像分析是如何進行的;以及我們現在如何使用深度學習進行醫學圖像分析。在這裡,我非常歡迎和感謝我的新夥伴Flavio Trolese——4Quant的聯合創始人和ETH Zurich的講師——他將協助我整合所有討論的內容。

在本文中,我們將討論Keras並且展示兩個示例——其中一個使用Keras完成簡單的預測性分析任務,另一個進行圖像分析。

  • 何為Keras?

根據Keras官網的介紹,Keras是Theanos和Tensor Flow的一個深度學習庫。

運行於Theano和TensorFlow之上的Keras api

Keras是一個高級Python神經網路API,它能夠運行於TensorFlow和Theano之上。Keras的開發重點在於支持快速實驗。

  • 何為Theano和Tensor Flow?

James Bergstra教授等人在2010年的Scipy曾說,Theano是一個CPU和GPU的數學表達式編譯器。換句話來說,Theano是一個能夠讓你高效地對數學表達式進行定義、優化和評估的Python學習庫。Theano是由一些高級研究人員,如Yoshua Bengio,和「蒙特羅學習演算法研究所」(MILA)共同研發的。下圖是發佈於2010年Scipy上的Theano教程,圖中對比了Theano下的GPU和CPU與當年其他的工具。這張圖片發表於原創論文——《Theano——CPU和GPU的Python數學編譯器》。

《Theano——CPU和GPU的Python數學編譯器》作者:James Bergstra, Olivier Breuleux, Frédéric Bastien, Pascal Lamblin, Razvan Pascanu, Guillaume Desjardins,Joseph Turian, David Warde-Farley, Yoshua Bengio

建立在Theano之上的還有一些其他的深度學習庫,包括Pylearn2、GroundHog(同樣是由MILA開發的)、Lasagne和Blocks and Fuel等。

  • 《使用Theano計算的透明GPU》——James Bergstra

TensorFlow是由「谷歌機器智能研究所」組織下的「谷歌大腦」團隊研發完成的。TensorFlow的開發是為了進行機器學習和深度神經網路的研究,除此之外,它還廣泛適用於其他的領域。根據TensorFlow官網介紹,TensorFlow是一個使用數據流圖表進行數值計算的開源軟體庫。圖表中的節點代表數學運算,而表格邊緣則代表溝通節點的多維數據數組(tensors)。其中的代碼視覺上正如下圖所展示的:

圖片來源:《TensorFlow:異構分佈系統上的大規模機器學習》

  • 使用Keras進行預測性分析的示例

在本文中,我們將使用來自UCI網站的Sonar數據集來完成一個簡單的預測模型示例。在下面的代碼中,我們直接從UCI網站獲取數據,並將這些數據按照60::40的比例分為訓練數據和測試數據。我們使用Keras進行預測建模,使用sklearn對標籤進行編碼。

在下一個代碼片段中,我們使用之前定義好的函數來讀取數據集中的數據。列印數據集之後,我們會發現我們的獨立變數是需要進行編碼的。

我們使用來自Scikit-learn的LabelEncoder(標籤編碼器)對標籤進行編碼,將字母R和M分貝轉換為數字0和1。一種熱編碼還將分類特徵轉換成為了一種與演算法更合適的格式。在這個示例中,我們的Y變數與R和M一樣是分類對象,使用標籤編碼器,我們將這些字母變數轉換為了1或0。

Scikit-learn的標籤編碼器

之後,我們創建了一個使用Keras的模型:

在沒有任何預處理操作的情況下,使用簡單模型的準確度為81.64%

  • 使用Keras進行圖像分析的示例

為了更好地用Keras解釋圖像處理過程,我們將使用來自「Kaggle貓狗競賽」的數據。這個競賽的目的是開發一個能夠用來區分圖像中包含的是一隻狗還是一隻貓的演算法。對於人類來說,區分貓狗是很簡單的,但對於計算機來說可就複雜的多了。在這項「區分貓狗」的挑戰中,有25000張標記了貓狗的訓練圖片,測試資料庫中還有12500張等著我們去標記。根據Kaggle官網,當這個競賽開始時(2013年年底):

「目前的文獻表明,機器分類器在這個任務上的準確度能達到80%以上。」因此,如果我們能成功突破80%的準確度,我們就能躍居2013年的技術發展最前沿。

想要了解更多細節、進行下一步的學習或對深度學習進行尖端研究,我強烈推薦Fast.ai的網路公開課程。我在下面的代碼中引用了fast.ai,它為我們的學習提供了一個很好的起點。

第一步:完成設置

從Kaggle網站上下載貓、狗的圖片數據,將其保存在你的電腦上。在本文提到的示例中,我會在我的iMac電腦上運行代碼。

基本的設置

Jeremy Howard提供了一個Python實用文件,幫助我們獲取已封裝的基礎函數。我們要做的第一步就是使用這個實用文件。下圖就是這個實用文件。隨著細節的深入,我們將一步步打開這個文件,看看隱藏在文件背後的信息。

第二步:使用VGG

我們在第一步中簡單地使用了一個完全為我們建立的模型,這個模型能夠識別各種各樣的圖像。第二步,我們將使用VGG。VGG是一個非常容易創建和理解的模型,它贏得了2014年的「ImageNet挑戰賽」。VGG imagenet團隊創建了兩個模型——VGG 19和VGG 16。VGG 19是一個大型的、操作性能慢的、準確度稍佳的模型;而VGG 16是一個小型的、操作性能快的模型。我們將會使用VGG 16,因為VGG 19的操作性能比較慢,通常不值得在精確度上再做改進。

我們建立了一個Python類——Vgg16。Vgg16能讓VGG 16模型的使用更加簡單。在fast.ai的github上同樣能找到Vgg16,具體細節如下圖:

第三步:實例化VGG

Vgg16建立於Keras(我們將在稍後討論更多關於Keras的內容)之上。Keras是一個靈活的、易於使用的、建立在Theano和TensorFlow上的深度學習庫。Keras使用一個固定的目錄結構來分批查看大量的圖像和標籤,在這個目錄結構下,每一類訓練圖像都必須放置在單獨的文件夾里。

下面是我們從文件夾中隨意抓取的數據:

第四步:預測貓、狗

第五步:將圖像和代碼文件匯總

為了匯總這些圖像和文件,我推薦的方法如下圖:

總結:

閱讀到這裡,就證明你就已經採納了我們在上一篇文章中討論的理論,並做了一些實際的編程。如果你按照上面的指示和說明完成了兩個示例,那麼你就已經成功建立了你的第一個預測模型,並完成了圖像分析。

註:文章首發於雷鋒網,轉載請註明。

熱門推薦

本文由 一點資訊 提供 原文連結

一點資訊
寫了5860316篇文章,獲得23313次喜歡
留言回覆
回覆
精彩推薦