閱讀945 返回首頁    go 阿裏雲 go 技術社區[雲棲]


幹貨|大神教你如何參加kaggle比賽——根據CT掃描圖預測肺癌

https://yq.aliyun.com/cloud

91a6da5bee8620a5e8270184ceecdb7e9f1dfd21


Data Science Bowl是由Kaggle主辦的年度數據科學比賽,今年的參賽題目是根據一年內診斷為癌症的人的胸部CT圖像來進行預測肺癌。競賽平台可以在此查看
為了完成此次挑戰,由來自根特大學的博士生和博士後Andreas VerleysenElias VansteenkisteFrédericGodinIra KorshunovaJonas DegraveLionel PigouMatthias Freiberger組成機器學習團隊Deep Breath,沒有任何一個成員具有關於醫學圖像分析或癌症預測方麵的具體知識。比賽結束後,Deep Breath取得了9名的成績!在這篇文章中將說明該團隊采用的方法。

a0256d7760b8f2ad4935cec43b1a4cf78e931020


從圖中可以看到肺癌是全球癌症死亡的最常見原因其次是乳腺癌。為了預防肺癌死亡,高風險個體正在使用小劑量的CT掃描圖來進行篩查,這是因為早期檢測使肺癌患者的存活率增加了一倍從CT掃描圖圖中自動識別癌性病變可以節省放射科醫生的時間這將使診斷變得更加實惠,從而挽救更多的生命。
為了通過胸部CT預測肺癌,總體策略是將高維CT圖降維到一些感興趣的區域,基於這些感興趣的區域來預測肺癌。下麵將解釋如何訓練幾個網絡來提取興趣區域。


為了確定是否有人會發展肺癌,不得不尋找
早期階惡性肺結節,而在肺CT中發現早期惡性結節就像大海撈針。為了說明這個聲明下麵一起LngC / IDRI數據集中的惡性結節的例子,這些數據集是從LUng Node Analysis Grand Challenge中獲得的,本文廣泛使用了這個數據集通常也被稱為LUNA數據集,該數據集中包含已被診斷患有肺癌的患者 

ac759540a9a0f80c18a5ecd4485be688467c001a

LUNA數據集中平均惡性肺結節的半徑為4.8 mm,而普通CT掃描圖圖采集的體積為400mm×400mm×400mm,真的如大海撈針一樣即我們正在尋找一個比輸入量小一百萬倍的特征;此外特征決定了整個輸入體積的分類。這對於放射科醫師來說是一個巨大的負擔,同時對於使用卷積網絡的常規分類算法來說,也是一個困難的任務

在競賽中上述問題變得更糟糕,因為必須從掃描日期的一年之內的一名患者中被診斷患有肺癌的患者CT開始預測肺癌。在我們的病例中,患者可能尚未發展為惡性結節。因此,假設直接對競爭對手的數據和標簽進行訓練是不合理的。 

節檢測 


為了減少掃描中的信息量,首先嚐試檢測肺結節。由於LUNA數據集包含患者掃描圖中每個結節的位置和直徑信息,因此可以通過建立了一個網絡來分割掃描中的結節,並使用數據集中記錄的信息來訓練搭建的分割網絡。
為了解決不同CT掃描圖儀產生胸部掃描圖的立體像素間距存在的差異,對所有CT掃描圖圖進行縮放和插值,以使得每個立體像素代表1x1x1毫米的立方體。為了訓練分割網絡,將CT掃描圖切割為64x64x64大小的圖像塊將其作為分段網絡的輸入。對於每個圖像塊其真值是一個32x32x32毫米的掩膜掩膜中的每個立體像素表示該立體像素是否在結節內。掩模通過使用結節注釋中的直徑來構造。 





本文將優化Dice係數作為目標函數,Dice係數是圖像分割常用的度量標準。Dice係數的缺點在於若真值掩膜內沒有結節,則它的默認值為零每個圖像塊中必須有一個結節,並將其反饋給網絡。應用平移和旋轉增加方法引入額外的變化,選擇合適的平移和旋轉參數使得結節的一部分保留在64x64x64輸入圖像塊的中心周圍32x32x32立方體內。
網絡架構如下圖所示該架構主要基於U-net架構2D圖像分割的通用架構),可以看到該架構主要由3x3x3無填充的濾波器卷積層組

f116a910d702ddb736d9084e14de13f50fd7a8dd

張量形狀深灰色框表示,淺灰色方框內表示網絡操作。C1卷積層是1x1x1大小的濾波器,C3卷積層是3×3×3大小的濾波器。將訓練的網絡用於分割LUNA和DSB數據集中患者CT掃描圖,64x64x64的圖像塊以32x32x32的速度取出,並將輸出拚接在一起得到的一個張量中,張量中的每個值表示立體像素位於結節內的預測概率。 


這個階段對肺掃描中的每個立體像素進行預測,但是我們想找出結節的中心,並將其中心將被用作結節候選者的中心。

本文使用高斯差分(DoG)方法檢測斑塊,使用拉普拉斯算子計算密度較小的近似值。另外使用以下兩種方法可以降低結節候選者的數量

  •    在斑點檢測之前應用肺分割
  •    訓練假陽性減少專家網絡

分割 

結節分割網絡無法看到全部內容,因此在肺外部產生了許多假陽性結果,了緩解這個問題,采用手工設計的肺分割方法。
起初,采用了類似於Kaggle教程中提出的策略它使用一些形態學操作來分割肺。但通過檢查後發現,肺分割的質量和計算時間太依賴於架構元素的大小。

8eb885d3c92964d62a8909ba47ee8bc9942e65b2

最終采用的方法是3D方法,其重點是從圍繞肺部的凸包中切出非肺腔。 

68112490166db59fe0fe881cd91b0aeda324699e

為了進一步減少結節候選人的數量,我們訓練了專家網絡來預測斑點檢測後的給定候選者是否確實是一個結節。我們使用假和結節候選人的名單來訓練專家網絡。LUNA大挑戰為每個病人提供一個虛假和真正的結節候選人名單。
為了訓練假陽性減少專家,我們使用了48x48x48圖像塊,並應用全旋轉和微移增加方法(±3 mm)。

如果想要網絡檢測到小結節(直徑<= 3mm)和大結節(直徑> 30 mm),架構應使網絡能夠以非常窄的和廣泛的接受來訓練這兩個特征。我們的架構主要是基於RESNET V2這種架構(非常適合於不同的感受野的訓練特點),並對其簡化將其原理應用於具有3個空間維度的張量。

4b026e1933e83ce3807a8958b0b09b036116a3fd

空間縮減塊通過應用不同的縮減方法,輸入張量的空間尺寸減半

75abf90965e5c68cf2ac6250a5a4b6c8b2424f76

特征縮減塊中1x1x1濾波器內核卷積層是用來減少特征的數量。濾波器內核的數量(f/2)是輸入特征圖數量f的一半。 

a92307781c1664e74822467c76a22134710bd93d

殘差卷積塊包含三個不同的堆疊,每個堆疊具有不同數量的卷積層。最淺的堆疊不會擴大接收域,因為它隻有一個具有1x1x1過濾器的卷積層。然而,最深的堆疊擴大接收域之後,不同堆疊的特征圖被連接和縮小後再次與輸入圖疊加到一起。最後,經過應用ReLu非線性激活函數
通過實驗發現以下是減少假陽性最有效的架構 





初始版本的resnet v2架構相比的一個重要區別是創建的網絡開始時隻有一個卷積層。

LUNA數據集的驗證子集由118個患者總共238個結節的組成。通過分割和斑點檢測後,發現229個結節中的,但仍然有大約17K個假陽性。為了減少假陽性,候選人按照假陽性減少網絡給出的預測進行排名。 

4c2471025163177d8ac93afe9259a71a7a3db97d

惡性腫瘤的預測
在比賽的最後2周,我們發現LUNA數據集中的結節存在惡性腫瘤標簽。這些標簽是LUNA所基於的LIDC-IDRI數據集的一部分。隻有當我們訓練了一個模型來預測個體結節/圖像塊的惡性腫瘤時,能夠接近LB的最高分數 


def build_model(l_in):
    l = conv3d(l_in, 64)

    l = spatial_red_block(l)
    l = res_conv_block(l)
    l = spatial_red_block(l)
    l = res_conv_block(l)

    l = spatial_red_block(l)
    l = spatial_red_block(l)

    l = dense(drop(l), 512)

    l_out = DenseLayer(l, num_units=1, nonlinearity=sigmoid)
    return l_out


可以看到使用的網絡與FPR網絡架構非常相似。
之後重新縮放惡性腫瘤標簽,以便它們在0和1之間表示。通過在LUNA數據集中抽取等量的不具有惡性腫瘤標簽的候選結節來作為訓練集。
另外使用均方誤差(MSE)損失作為目標函數,比二進製交叉熵目標函數性能更好 

癌預測
使用假陽性減少網絡對候選結節進行排序,並訓練構建的惡性腫瘤預測網絡之後就可以在Kaggle數據集上訓練一個肺癌預測網絡。采用的方法是通過相同的子網發送一組n個靠前的候選結節,並將最終匯聚層中的各個評分/預測/激活結合起來。
遷移學習
在訓練了不同的架構後,我們意識到需要更好的推理特征的方法。雖然CT掃描圖被縮減到一些感興趣的區域,但患者數量仍然很低,導致惡性結節的數量很。因此,我們專注於使用預先訓練的權重初始化網絡
遷移學習的思想在彩色圖像分類任務中非常流行,其中大多數的遷移學習方法是將ImageNet數據集上訓練的網絡作為其自己網絡的卷積層這些卷積層在大數據集上學到了很好的特征,然後作為另一個神經網絡/另一個分類任務的一部分重新使用(遷移)。然而,對於CT掃描圖,需要自己訓練一個這樣的網絡
起初使用的是一些改進的fpr網絡,後來是訓練了一個網絡來預測結節的大小。在這兩種情況下,我們的主要方法反複使用卷積層,但都是隨機初始化。

在最後幾個星期,我們使用完整的惡性腫瘤網絡並添加了一個聚合層就得到了最好的解決方案。 

合結節的預測

  • P_patient_cancer = 1 - Π P_nodule_benign:這聚合背後的想法是,如果所有結節都是良性的,那麼患癌症的概率等於1如果一個結節被分類為惡性腫瘤,P_patient_cancer將是1。這種方法存在的問題是,當惡性腫瘤預測網絡相信有一個結節是惡性時,其表現不佳,所有一旦網絡正確地預測一個結節是惡性的終止學習。 
  • 對數平均指數LME:這種聚合背後的想法是,癌症概率由最惡性/最不良良性結節決定它以指數方式打破了單個結節預測,因此專注於最大的概率。與簡單的最大函數相比,此函數還允許通過其他預測的網絡進行反向傳播。

 
我們整體合並了30個最後階段模型的預測由於Kaggle允許兩次提交因此使用以下兩種集成方法:

防守集成使用驗證集優化的權重來平均預測。在這個過程中,集成中使用的模型數量大幅度減少這是由於模型之間的高相似性引起的。
積極集成交叉驗證用於選擇均勻混合的高分模型。在這個集成中使用的模型對所有數據進行了訓練,因此命名為“積極集成”。統一地混合這些“好”模型以避免由於在權重優化過程中具有較高修剪因子而導致極少數模型集的風險。它還可以減少過載模型的影響。


挑戰賽的很大一部分工作是建立一個完整的係統它包括相當多的步驟。由於沒有時間完全了解每一個部分所以該係統還有很大的改進空間,另外感謝比賽組織者。

在比賽開始之前,巧妙地推出了排行榜的真標簽利用了從提交預測時返回的高精度分數得到的信息。因此,每個人都可以通過有限數量的提交結果更新排行榜。
通常,排行榜真實地表明了其他隊伍的表現,但由於隊伍完全處於不知情中,這會其動力產生不利的影響。因此,Kaggle通過截斷提交返回的分數來避免這種情況的出現 

Github:https://github.com/EliasVansteenkiste

Linkedin:https://www.linkedin.com/in/elias-vansteenkiste-33060839/

Youtubu:https://www.youtube.com/EliasVansteenkiste

Twitter:https://twitter.com/sailenav

本文由北郵@愛可可-愛生活老師推薦,阿裏雲雲棲社區組織翻譯。

文章原標題《Predicting lung cancer》,作者:Elias Vansteenkiste,譯者:海棠,審閱:

文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-05-23 22:31:30

  上一篇:go  Java問題啊
  下一篇:go  《雲周刊》第123期:來了,致未來開發者,525首屆互聯網新兵進階在線峰會