基於深度學習的肺部CT影像識別——採用U-net、3D CNN、cGAN實現肺結節的檢測(一)

點擊此處跳轉到系列博客索引


引言

在醫學圖像處理中,傳統的特徵提取方法依賴於含有先驗知識的特徵提取和感興趣區域的獲取,這將直接影響肺結節檢測的精度。而卷積神經網絡無需人工提取特徵,採用深度學習方法,隨着卷積層數的加深,能提取出更加抽象、語義更豐富的特徵。這裏首先採用U-net將肺結節分割出來,生成候選集。html

U-net分割模型

算法原理

卷積神經網絡的典型用途是分類任務,輸出圖像的單個類別標籤。可是在生物醫學圖像處理中,一般面臨的是分割任務,它須要將類別標籤分配給每一個像素。語義圖像分割的目標在於標記圖片中每個像素,並將每個像素與其表示的類別對應起來。2013年,Farabet等人提出了一個多尺度卷積分類網絡。該網絡以某個分類的像素爲中心進行多尺度採樣,將多尺度的局部圖像塊送到CNN分類器中逐一進行分類,最終獲得每一個像素所屬的語義類別。可是因爲逐像素的進行窗口採樣獲得的始終是局部信息,總體的語義仍是不夠豐富。web

除了語義信息提取困難以外,海量的訓練數據在生物醫學任務中一般也是沒法實現的。因而爲了解決這些問題,基於FCN的U-net應運而生,對醫學圖像分割領域產生了深遠的影響。U-net是一個全卷積神經網絡,它可以在不多的訓練圖像下工做,提取多層次的特徵,併產生較爲精確的分割。算法

FCN的主要思路是將全鏈接層取代替換爲卷積層,其中的池化層被上採樣層取代,增長了輸出層的分辨率。爲了定位,使來自收縮路徑的高分辨率特徵圖與上採樣輸出相結合。所以基於以上信息,一個連續的卷積層能夠學習集成更精確的輸出。U-Net相較於FCN多尺度信息更加豐富,包括收縮路徑和對稱擴張路徑分別用於提取上下文信息和定位,以下圖所示。網絡沒有全鏈接層而且只使用每個卷積層的有效部分,這種方法可使用很是少的數據完成端到端的訓練,並得到最好的效果。網絡

在這裏插入圖片描述

實現過程

根據SongpingWang [ 1 ] \color{#0000FF}{[1] } 的系列博客給出的代碼作了應用,可是他給出的代碼不全,一是缺乏對XML標註文件的處理函數,沒法由DICOM文件生成mask訓練數據;二是缺乏將處理好的圖片及其mask路徑寫入txt文件的函數,由於他是經過將訓練數據的路徑寫入txt文件,而後讀取該文件獲得圖像索引,經過random.shuffle()操做圖像索引來打亂(shuffle)圖像。這樣一個預處理trick的目的是防止出現過度有規律的數據,致使過擬合或者不收斂,由於畢竟用到的數據並很少。app

此外,SongpingWang還給出了3DCNN假陽性過濾部分的代碼,然而我用他分享的預訓練模型或者是我本身重頭訓練,分類結果都是50%左右,沒有參考價值。或許是代碼哪一個部分存在問題,我沒有深究下去。因此我只拿U-net提取候選結節,而且用的是他處理好的訓練數據。至於假陽性過濾部分我參考了另外一個3DCNN模型,詳見下一篇博客。dom

這裏給出SongpingWang分享的處理好的數據和預訓練模型:svg

數據集下載:https://pan.baidu.com/s/1zG_xP_NzAIA5CMOJIVf73Q 提取碼:9yd2
U-net和3DCNN的預訓練模型連接: https://pan.baidu.com/s/1PwPX7nbFmzmkuhbvZ7wcLw 提取碼: vqpw函數

實驗結果

在U-net肺結節提取模型中,網絡訓練迭代次數(Epoch)爲70次,每次迭代訓練300次,batch-size爲16。採用隨機梯度降低(SGD)算法來求解模型,學習率爲0.001,並加入動量(momentum)優化。U-net的Loss圖在訓練集上的Acc圖以下所示。
在這裏插入圖片描述
在這裏插入圖片描述
這裏U-net模型輸出的結果只是結節的位置座標信息,我用OpenCV的cv2.rectangle()函數畫出了矩形框做爲標註,便於觀察。可視化結果以下圖所示,其中孤立的實性結節和非實質性結節都可以精準的檢測出,對醫學臨牀上的診斷能起到必定的輔助做用。
在這裏插入圖片描述學習

參考

[1] https://blog.csdn.net/qq_36401512/article/details/85000065優化