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