SimpleITK使用深度学习识别肺癌CT DICOM数据集
肺癌數據集DICOM :https://wiki.cancerimagingarchive.net/display/Public/LIDC-IDRI
?
首先用SimpleITK把mhd圖片讀入,對每個切片使用Gaussian filter然后使用閾值-600把肺部圖片二值化,然后再分析該切片的面積,去掉面積小于30mm2的區域和離心率大于0.99的區域,找到3D的連通區域。
只保留0.68L到8.2L體積的區域,并且如果大于6000 mm2的區域到切片的中心區域的距離大于62mm也刪除該連通區。最后只留下一個最大的連通區域。
左邊是原始圖,右邊是切完肺的。
在實際中預處理中,我們可視化了每個肺的部分切片,存在一些bad case。主要有以下3種,我們也對這3種情況做了優化:
有些患者兩個肺的大小差別比較大,需要調整閾值,放寬閾值標注,把大于6000 mm2的區域到切片的中心區域的距離大于62mm也刪除該連通區,改為大于1500 mm2的區域到切片的中心區域的距離大于92mm也刪除該連通區。并且在最后一步,不只保留最大的連通區,同時保留最大的兩個連通區。
2.模型網絡結構
我們的網絡如圖所示,整體上是采用Unet+Resnet的思想。里面每個Resnet Block都是由多個卷積層和bn層和relu層組成的。我們只展示主體結構(整體深度大概150多層):
?
3.整體優化思路
3.1 數據優化
3.2 工業界優化思路:模型架構 > 模型網絡
我們的優化思路非常的工業界,用更多的計算資源,和更復雜的模型架構,并不把大量的時間用在調模型網絡上面。
3.3 層次化Hard Mining
業界兩套網絡的做法比較普遍,比如用Unet切割或Faster RCNN檢測,用3D CNN分類,如下圖所示。
?
我們用的是如下統一的一套模型架構,即3D Faster RCNN的RPN網絡,沒有后續的全連接做分類,也并沒有
再在后面接一套3D CNN來做降假陽。能減少需要調節的網絡參數。
?
該hard mining的過程,其實就是用上一層的模型作為下一層的輸入,每一層的訓練數據都選取比上一層更難分的。
?
?
這套架構,無需2套網絡,只需要選擇一套較深的網絡。
根據我們的經驗,采取層次化模型訓練,第二層模型froc能比第一層效果提升0.05,第三層能比第二層提升0.02。
3.4 LOSS 函數的設計
在計算loss函數的時候,我們做了2點優化。
1.在使用hard mining的時候,每個batchsize里面負例的個數會明顯多于正例。為了防止算loss的時候被負例主導。我們將loss函數分成3個部分,負例的loss,正例的loss和邊框的loss。
2.在上一節提到的層次化hard mining,我們在最后一層訓練模型的時候,會修改loss函數的計算,對于分錯的負例和正例,做加權。這個思路和focal loss是很像的。
比如:
紅框里面的部分,本來是負例,卻以很大的概率被分成正例,這部分在算loss的時候權值就大些。紅框外面的部分權值就小些。
?
4.本次比賽的關鍵點總結:
1) 解決了基于Intel extended Caffe的150多層深度網絡的 3D Faster RCNN RPN網絡收斂問題。
可以從2個方向來解決(線下Phi卡平臺均已驗證過)。
a)將 drop out設置為 0.1。缺點是會容易過擬合。
b)先訓練一個crop size為32的模型
用這個模型做pre train model,訓練crop size 64的模型
依次類推。
直到完成crop size為128的模型訓練
由于時間關系,我們并未比較這2種思路的效果。比賽中使用的是第1個思路,收斂的更快些。
2) 提出層次化Hard Mining的訓練框架。并沒有采用常見的,unet做分割+3D CNN降假陽 或者 2d faster rcnn做檢測+3D CNN降假陽的思路。我們只用了一套網絡。減少了需要調節的網絡參數。
3) 重新設計了loss函數,防止負例主導loss的計算, 并且在降低loss的過程中,更聚焦于分錯的訓練樣本。
5. 經驗總結:
我們團隊雖然過往深度學習架構經驗多,但對醫學影像處理的know how屬于尚在探索之中。所以,我們的優化思路,是用更多的計算資源,和更復雜的模型架構,來彌補沒有專用模型網絡積累的短板。在第一輪比賽時通過調用比較充足的計算資源時效果比較顯著,但在第二輪限定計算資源的多CPU的框架上,比較受限于計算資源及時間。
在計算資源比較充沛的情況下,選取比較深的Resnet效果會明顯。在資源受限的實際場合或者現實的生產環境,我們有兩點啟發:
代碼開源說明:
我們在GitHub (https://github.com/YiYuanIntelligent/3DFasterRCNN_LungNoduleDetector?) 開源了核心代碼,特別是將我們基于Intel Extended Caffe的3D Faster RCNN RPN訓練模塊發布到社區,相信這也是業內首個Intel extended Caffe版的150層網絡3D Faster RCNN開源,希望對Intel 的深度學習社區用戶有幫助。
該代碼對醫學影像的處理也展示了有效性,相信對醫學影像領域AI實踐的發展,對技術如何造福大眾,能起到一些幫助。
通過開源,希望有同行提出性能優化、功能擴充等的修改建議,互相促進。
?
總結
以上是生活随笔為你收集整理的SimpleITK使用深度学习识别肺癌CT DICOM数据集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: haskell程序设计语言
- 下一篇: 第五六七章(PTA复习)