近期宜遠智能參加阿里天池醫(yī)療AI大賽,用3D Faster RCNN模型在CT影像的肺結(jié)節(jié)探測上,取得了較好的成績,特別是在計算資源充足的情況下,模型效果表現(xiàn)優(yōu)異。這是他們的經(jīng)驗分享(https://tianchi.aliyun.com/competition/new_articleDetail.html?raceId=231601&postsId=2898&from=part),末尾還附有代碼開源地址。
1.數(shù)據(jù)預(yù)處理
首先用SimpleITK把mhd圖片讀入,對每個切片使用Gaussian filter然后使用閾值-600把肺部圖片二值化,然后再分析該切片的面積,去掉面積小于30mm2的區(qū)域和離心率大于0.99的區(qū)域,找到3D的連通區(qū)域。
只保留0.68L到8.2L體積的區(qū)域,并且如果大于6000 mm2的區(qū)域到切片的中心區(qū)域的距離大于62mm也刪除該連通區(qū)。最后只留下一個最大的連通區(qū)域。
左邊是原始圖,右邊是切完肺的。
在實際中預(yù)處理中,我們可視化了每個肺的部分切片,存在一些bad case。主要有以下3種,我們也對這3種情況做了優(yōu)化:
把肺邊緣結(jié)節(jié)切掉。因為閾值導(dǎo)致的,把二值化環(huán)境-600改成-150有改善。切出來全部為黑的(未找到任何肺部區(qū)域)。有些ct圖是從頭部開始掃描的,導(dǎo)致影響了連通區(qū)域判斷,需要手動查看該mhd文件,看里面的從第個切片到第幾個切片是肺部,在做完二值化操作后,人為把前面和后面的切片全部設(shè)置為0。切出來只有一側(cè)肺部情況。
有些患者兩個肺的大小差別比較大,需要調(diào)整閾值,放寬閾值標注,把大于6000 mm2的區(qū)域到切片的中心區(qū)域的距離大于62mm也刪除該連通區(qū),改為大于1500 mm2的區(qū)域到切片的中心區(qū)域的距離大于92mm也刪除該連通區(qū)。并且在最后一步,不只保留最大的連通區(qū),同時保留最大的兩個連通區(qū)。
2.模型網(wǎng)絡(luò)結(jié)構(gòu)
我們的網(wǎng)絡(luò)如圖所示,整體上是采用Unet+Resnet的思想。里面每個Resnet Block都是由多個卷積層和bn層和relu層組成的。我們只展示主體結(jié)構(gòu)(整體深度大概150多層):
3.整體優(yōu)化思路
3.1 數(shù)據(jù)優(yōu)化
肺部切割優(yōu)化:這塊其實沒有完美的方法能把所有的肺一次性都切好。具體的思路我們已經(jīng)在第1章數(shù)據(jù)預(yù)處理部分寫出來了:我們會先切一遍,然后將切肺中切的不好的,再調(diào)參數(shù)重新切一次。10mm 以下結(jié)節(jié)的訓(xùn)練數(shù)據(jù)增強。我們在沒做數(shù)據(jù)增強的情況下跑出來的模型,在驗證集上漏掉了不少10mm以下的結(jié)節(jié),所以對這部分的結(jié)節(jié)做了增強。
3.2 工業(yè)界優(yōu)化思路:模型架構(gòu) > 模型網(wǎng)絡(luò)
我們的優(yōu)化思路非常的工業(yè)界,用更多的計算資源,和更復(fù)雜的模型架構(gòu),并不把大量的時間用在調(diào)模型網(wǎng)絡(luò)上面。
3.3 層次化Hard Mining
業(yè)界兩套網(wǎng)絡(luò)的做法比較普遍,比如用Unet切割或Faster RCNN檢測,用3D CNN分類,如下圖所示。
我們用的是如下統(tǒng)一的一套模型架構(gòu),即3D Faster RCNN的RPN網(wǎng)絡(luò),沒有后續(xù)的全連接做分類,也并沒有
再在后面接一套3D CNN來做降假陽。能減少需要調(diào)節(jié)的網(wǎng)絡(luò)參數(shù)。
該hard mining的過程,其實就是用上一層的模型作為下一層的輸入,每一層的訓(xùn)練數(shù)據(jù)都選取比上一層更難分的。
這套架構(gòu),無需2套網(wǎng)絡(luò),只需要選擇一套較深的網(wǎng)絡(luò)。
根據(jù)我們的經(jīng)驗,采取層次化模型訓(xùn)練,第二層模型froc能比第一層效果提升0.05,第三層能比第二層提升0.02。
3.4 LOSS 函數(shù)的設(shè)計
在計算loss函數(shù)的時候,我們做了2點優(yōu)化。
1.在使用hard mining的時候,每個batchsize里面負例的個數(shù)會明顯多于正例。為了防止算loss的時候被負例主導(dǎo)。我們將loss函數(shù)分成3個部分,負例的loss,正例的loss和邊框的loss。
2.在上一節(jié)提到的層次化hard mining,我們在最后一層訓(xùn)練模型的時候,會修改loss函數(shù)的計算,對于分錯的負例和正例,做加權(quán)。這個思路和focal loss是很像的。
比如:
紅框里面的部分,本來是負例,卻以很大的概率被分成正例,這部分在算loss的時候權(quán)值就大些。紅框外面的部分權(quán)值就小些。
4.本次比賽的關(guān)鍵點總結(jié):
1) 解決了基于Intel extended Caffe的150多層深度網(wǎng)絡(luò)的 3D Faster RCNN RPN網(wǎng)絡(luò)收斂問題。
可以從2個方向來解決(線下Phi卡平臺均已驗證過)。
a)將 drop out設(shè)置為 0.1。缺點是會容易過擬合。
b)先訓(xùn)練一個crop size為32的模型
用這個模型做pre train model,訓(xùn)練crop size 64的模型
依次類推。
直到完成crop size為128的模型訓(xùn)練
由于時間關(guān)系,我們并未比較這2種思路的效果。比賽中使用的是第1個思路,收斂的更快些。
2) 提出層次化Hard Mining的訓(xùn)練框架。并沒有采用常見的,unet做分割+3D CNN降假陽 或者 2d faster rcnn做檢測+3D CNN降假陽的思路。我們只用了一套網(wǎng)絡(luò)。減少了需要調(diào)節(jié)的網(wǎng)絡(luò)參數(shù)。
3) 重新設(shè)計了loss函數(shù),防止負例主導(dǎo)loss的計算, 并且在降低loss的過程中,更聚焦于分錯的訓(xùn)練樣本。
5. 經(jīng)驗總結(jié):
我們團隊雖然過往深度學(xué)習(xí)架構(gòu)經(jīng)驗多,但對醫(yī)學(xué)影像處理的know how屬于尚在探索之中。所以,我們的優(yōu)化思路,是用更多的計算資源,和更復(fù)雜的模型架構(gòu),來彌補沒有專用模型網(wǎng)絡(luò)積累的短板。在第一輪比賽時通過調(diào)用比較充足的計算資源時效果比較顯著,但在第二輪限定計算資源的多CPU的框架上,比較受限于計算資源及時間。
在計算資源比較充沛的情況下,選取比較深的Resnet效果會明顯。在資源受限的實際場合或者現(xiàn)實的生產(chǎn)環(huán)境,我們有兩點啟發(fā):
學(xué)會認同重復(fù)造輪子的基礎(chǔ)性工作。第一輪比賽我們是pytorch框架,第二輪按要求在caffe上實現(xiàn),特別是在Intel Extended Caffe對3D支持有限,重寫了不少很基礎(chǔ)的模塊,這種貌似重復(fù)造輪子的工作,對我們提出了更高的要求,但也鍛煉了我們深入到框架底層的能力,從而對不同框架的性能特點有更深的認識,這種重寫甚至還因此幫我們找到我們第一版pytorch代碼里detect部分存在的一個bug。根據(jù)資源靈活優(yōu)化訓(xùn)練策略乃至模型。我們的3D Faster RCNN 初期在Extended Caffe 上過于耗時,但因為在計算資源充足環(huán)境下我們的做法比較有效,所以沒有去考慮一些更快的檢測算法,比如SSD、YOLO等,這點也算是路徑依賴的教訓(xùn)了。
代碼開源說明:
我們在GitHub (https://github.com/YiYuanIntelligent/3DFasterRCNN_LungNoduleDetector ) 開源了核心代碼,特別是將我們基于Intel Extended Caffe的3D Faster RCNN RPN訓(xùn)練模塊發(fā)布到社區(qū),相信這也是業(yè)內(nèi)首個Intel extended Caffe版的150層網(wǎng)絡(luò)3D Faster RCNN開源,希望對Intel 的深度學(xué)習(xí)社區(qū)用戶有幫助。
該代碼對醫(yī)學(xué)影像的處理也展示了有效性,相信對醫(yī)學(xué)影像領(lǐng)域AI實踐的發(fā)展,對技術(shù)如何造福大眾,能起到一些幫助。
通過開源,希望有同行提出性能優(yōu)化、功能擴充等的修改建議,互相促進。
宜遠智能是一家專注于大健康領(lǐng)域的AI創(chuàng)新企業(yè),團隊由多名AI博士、來自騰訊的算法高手、醫(yī)療領(lǐng)域?qū)<覙?gòu)成。目前提供醫(yī)學(xué)影像圖像分析平臺及服務(wù)。還提供專業(yè)皮膚AI方案以及基于阿里云市場的測膚API平臺。對我們的開源代碼及相關(guān)醫(yī)學(xué)影像處理有任何疑問、建議、合作與求職意向,可聯(lián)系:
tkots_wu@sina.com JohnnyGambler
csshshi@comp.hkbu.edu.hk 施少懷
End.返回搜狐,查看更多
責(zé)任編輯: