通過kaggle瞭解肺炎和胸片

不記得以前誰說過:在kaggle,你幾個月前在研究高能物理(Particle Tracking),這個月在學習天文(Astronomical Classification) ,過段時間又當起瞭地質學傢或者醫學傢,對於對啥都感興趣的data scientist來說,kaggle到是個不錯的瞭解各學科的窗口。

如何看待阿裡達摩院研發的新冠肺炎 CT 影像 AI 診斷技術,平均識別不到 20 秒準確率達 96%? 最近關於AI應用起瞭爭議,我想起我之前整理過的從機器學習競賽看AI治百病 裡就有關於肺炎的比賽,因此去看瞭一下,發現有一個介紹比賽背景的Notebook寫的很好,解除瞭我心中的一些關於AI應用在胸片判斷肺炎的疑惑,因此翻譯分享一下。

需要說明的是:以下皆為生硬的翻譯,不一定準確,一切醫生為準。

來源 :what-are-lung-opacities 及其他rsna-pneumonia-detection-challenge 比賽裡的Notebook

什麼是肺炎

肺炎是由細菌,病毒或真菌引起的肺部感染。

肺長啥樣

下圖這是胸部解剖圖,其中肺部突出顯示,可以看到在肺周圍和肺之間有大量組織。這些區域包含皮膚,肌肉,脂肪,骨頭,以及心臟和大血管,這將轉化成為大量的胸部X光片信息。

什麼是胸部X光片

在拍攝胸片的過程中,X射線會穿過人體並到達另一側的檢測器。具有稀疏物質的組織(例如充滿空氣的肺)不會吸收X射線,並且在圖像中顯示為黑色。密集的組織(例如骨頭)會吸收X射線,並在圖像中顯示為白色。簡而言之:

黑色=空氣

白色=骨頭

灰色=組織或液體

在正常人的胸片圖像中,我們看到肺是對應黑色的,但是肋骨,主要氣道,血管和心臟在肺部上的投影導致上面也有部分白色。

什麼是陰影(opacity)?如果看到陰影(opacity),我們將會瞭解什麼?

註:不知道opacity翻譯成陰影對不對

陰影(opacity)是一個非常寬松的術語,陰影(opacity)是指衰減X射線束並因此比周圍區域看起來更不透明的任何區域。它是一個非特定術語,不表示異常的大小或病理性質。

通常,肺部充滿空氣。當某人患有肺炎時,肺中的空氣會被其他物質(如液體,細菌,免疫系統細胞等)所替代。這就是為什麼混濁區域為灰色區域,但應更呈黑色。當我們看到它們時,我們瞭解到該區域的肺組織可能不健康。

如果將樣本正常人1(下左圖)和樣本患者2(下右圖)的圖像進行比較,您會發現患者2的肺下緣被陰影(opacity)遮蓋瞭。在樣本正常人1的圖像中,您可以看到肺(黑色部分)與其下方組織之間的明顯差異,而在樣本患者2的圖像中,邊界變的比較模糊。

放射科醫生之間對於infiltrates的存在隻有中等程度的共識,從定義上講這是不透明的。肺部陰影(opacity)不是完全同質的,它們沒有清晰的中心或清晰的邊界。不同的放射線醫師之間的標註會有所不同。

肺炎以及其他肺部疾病在圖像中的陰影

肺炎相關陰影在胸部X光片上看起來彌散的原因是,感染和積聚的液體在肺的正常氣道內擴散,感染沒有明確的邊界。這與其他肺部疾病不同,例如腫瘤,後者圖像與正常肺完全不同,並且不能維持肺內氣道的正常結構。

下圖兩名患者之間陰影類型的主要區別是陰影的邊界和形狀,右圖(肺結節和腫塊)具有多個圓形且清晰定義的混濁,左圖(肺炎)具有這種陰影不清的模糊性,模糊瞭肺和心臟的邊緣。這種模糊被稱為consolidation。不同的肺部疾病導致的陰影的不同非常細微,需要訓練有素的醫生才能辨別。

這個Notebook還講解瞭肺炎毛玻璃狀和Consolidations狀的形式;非肺炎的Pleural effusion(胸腔積液)、Lung Masses and Nodules(肺部腫塊和結節)、Increased Vascular Markings + Enlarged Heart(血管斑塊增多+心臟擴大)、White Lung(白肺)、Unclear Abnormality等對應的胸片模樣,有興趣可以點鏈接去看。

小結

通過這個Notebook的學習,可以看到,對於一個x光片,首先可以通過陰影來判定肺部是否有病變,然後有經驗的醫生可以通過陰影的外觀判定是肺炎還是其他肺部疾病。但是判斷肺炎是由細菌,病毒或真菌哪個引起的可能就比較困難瞭,再進一步判斷是否由新冠狀病毒引起的就更加難瞭,這也就解釋瞭為什麼之前一直要用核酸檢驗而不是胸片來判定患者是否是新冠狀病毒肺炎患者瞭。

再說AI來判定新冠狀病毒肺炎,如果把一個新冠狀病毒肺炎患者和一個正常人放在一塊,那是非常容易判別的,但是如果把一個新冠狀病毒肺炎患者和一個其他肺炎患者放在一起,那麼可能就很難判別瞭。之前大傢提到瞭accuracy這個metric不太好,我覺得即便更換成AUC或者F1,也需要看正負樣本是如何構成,如果是僅有新冠狀病毒肺炎患者和正常人構成,那麼auc可能也很容易達到0.9以上或者更高。但如果是新冠狀病毒肺炎患者、其他肺炎患者、其他肺部疾病患者、正常人構成,這時候我們的ai技術還能不能有很好的表現呢?進一步,如果隻有新冠狀病毒肺炎患者和其他肺炎患者呢?

另外,這個比賽數據集由於train和test的標註規范不一樣,導致test裡被判定為肺炎的比例增加,而陰影面積變小,所以最後的冠軍隻是人為的後處理修改閾值,最後得分就從0.22變成瞭0.26的巨大提升,那麼模型實際落地的時候也會遇到分佈變化的情況,這個時候由誰來調整閾值呢?(會不會鬧出亞馬遜人臉識別誤判28名國會議員為罪犯 的笑話)

如何看待阿裡達摩院研發的新冠肺炎 CT 影像 AI 診斷技術,平均識別不到 20 秒準確率達 96%? 裡,也有很多人提到瞭拍x片設備可能導致信息泄露。不同的拍x片設備以及醫生的操作習慣對應的不同的數據源,數據源本身的樣本比例也存在bias,即便我們采用瞭resize和歸一化等操作,但是模型依然可以學到數據源特征來判定樣本數據來源而利用這些bias得到leak,導致local cv 虛高,但是無法泛化到實際設備上去。簡單的來說,從武漢和西藏各取一半的樣本,模型成功判定西藏樣本均不是肺炎,但這可能隻是因為西藏的x光設備和武漢不一樣被模型學到瞭,並不是模型學會瞭怎麼判定肺炎。這個問題來自於一個APTOS糖尿病性視網膜病變檢測notebook整理 的學習。

以上隻是一個門外漢在公認數據比較幹凈的kaggle上碰到的兩個問題:深度學習在不同分佈上的無力以及不可解釋所導致的泛化無力。在實際落地上隻可能和理想模型有更大的gap,更多奇奇怪怪的坑。所以我覺得AI想取代醫生恐怕還是很遙遠的事情(大概和自動駕駛取代司機的時間差不多)。但是AI給醫生做助手省力我覺得還是大有可為的,由醫生來把控閾值,把定性為簡單的容易的重復的工作交AI,然後把復雜的不確定的留給醫生自己把關。

也可以考慮不建立直接可用的模型,隻需把模型封裝好,把train按鈕交給醫生,將醫生們改造為調包俠,讓醫生在封裝好的簡化ui界面上自己收集數據,自己預處理,自己訓練,建立user defined model,也許更好。

以上隻是外行小白隨便寫寫。

赞(0)