LUNA16數據集(一)簡介


LUNA16,全稱Lung Nodule Analysis 16,是16年推出的一個肺部結節檢測數據集,旨在作為評估各種CAD(computer aid detection計算機輔助檢測系統)的banchmark,因為每個CAD都是基於自己的數據集,很難比較之間的性能優劣,這時候banchmark就很重要,在此之前比較知名的數據集就是Anode09了,不過這個數據集太小,訓練集只有5個病例。

目前為止,比賽已經停止結果提交,不過數據集仍然可以下載,並且在leaderboard上有各路大神團隊的比分及算法描述,可以自行查閱。

官方地址:https://luna16.grand-challenge.org

同時該數據集還有一個官方論文,Validation, comparison, and combination of algorithms for automatic detection of pulmonary nodules in computed tomography images: the LUNA16 challenge,本篇博客中主要內容也取於本論文。

論文地址:https://arxiv.org/abs/1612.08012

下面進入正題。主要從數據組成,比賽規則兩方面介紹下這個數據集。


一  數據

LUNA16的數據來源於一個更大的數據集LIDC-IDRI,該數據集共有1018個CT掃描,也就是1018個病例,每個CT圖像都有xml格式的標簽文件,這個數據集的數據來源於7家不同的學術機構,所采用的掃描器及其相關參數都不盡相同,所以,1018個圖像可以說分布不均,用論文中的話來說就是very heterogeneous。

LUNA16數據集將切片厚度(slice thickness)大於3mm的CT去除,同時將切片space不一致以及缺失部分切片的CT也去除,最后產生了888張CT,構成了LUNA16.這里要解釋兩件事,一,剔除3mm以上的CT是因為切片越薄效果越好,這不難理解,對肺部進行掃描,肯定是掃描得出的數據越多越好,想的極端點,如果整個肺部只有一張切片,這厚度絕對夠了吧哈哈,那就連3D數據都沒法獲取了,更別說有效檢測肺結節。二,切片space是啥,個人理解就是切片出來的數據是3D的(把一張張二維切片組合一起),有z,y,x三個維度,spacez指的就是切片厚度,spacey和spacex指的是每張切片的單個像素代表着實際寬高多少的肺部組織。所有的CT圖像都以.mhd格式存儲。

在LIDC-IDRI數據集中,有三種區域會標注出來,直徑>3mm的結節,直徑<3mm的結節以及非結節(但是肺部畸變區域),回到LUNA16,在888張CT中,共有36378個結節被標出(LIDC-IDRI標注的),在LUNA16中,只有直徑>3mm的結節作為樣本,直徑<3mm的結節和非結節都不納入進來,而直徑<3mm的結節有11509個,非結節區域有19004個,這樣還剩下36378-11509-19004=5765個,針對這5765個結節區域,若兩個結節離的太近(此處太近的定義為中心距離小於半徑之和,也就是相交了),則對兩個結節進行合並,合並的中心和半徑是該兩個結節的均值,經過這樣處理,還剩下2290個結節。由於標注的時候是四位專家一起標注,有些結節只有一位專家標注,有些有兩位,最好的情況是四位都標注了,根據這個規則,分別有2290,1602,1186,777個結節由至少1,2,3,4位專家標注,LUNA16選取至少由三位專家標注的1186個結節作為最后要檢測的區域,也就是我們做實驗時下載的數據。

總結一下,數據篩選流程

(1)將直徑>3mm的結節篩選出來,其它的不用,此時還有5765個結節

(2)將相近的結節融合,融合后還有2290個結節

(3)將三個以上專家標注的結節作為檢測使用,共有1186個結節,也就是最后的實驗數據。

(4)補充一點,不用的結節不是真的不用,2290-1186=1104個只有一位專家標注的結節,以及11509個直徑<3mm的結節和19004個非結節合在一起作為irrelevant findings,這些區域,既不作為正樣本也不作為負樣本,所以如果你的算法檢測出這些區域,不會處理為false positive,當然更不是true positive,直接無視之。

這里,不妨看一下實際上LUNA16的文件,共有10個子文件夾,subset0~subset9,這是為了做10折交叉驗證,每個文件夾里都是病例,每個病例對應兩個文件,文件名相同,后綴不同,其中.mhd文件存儲着ct的基本信息,.raw文件存儲着實際的ct數據,可以看到,ct文件還是挺大的,LUNA16足足一百多G,下載起來也挺耗時的。

二 比賽規則

比賽共有兩項,一個是complete nodule detection,另一個是false positive reduction,前者要求實現一個完整的檢測系統,后者要求對給定區域進行二分類,是否為結節。

我跑了一個github上的代碼,只跑了任務一,所以任務二的比賽細節就不講了。

具體而言,整個數據集是十份的,每份CT數相等,針對該數據集要執行10折交叉驗證,總共可以分為四步

(1)取一份做測試集,其余九份做訓練集

(2)在訓練集上訓練算法

(3)在測試集上測試,並生成結果文件

(4)完成10折交叉驗證后,將所有結果融合為一份

最終提交文件要求為.csv格式,每行為一個標注,具體格式就是 image identifier,x,y,z,score,其中第一個代表某個CT,x,y,z為結節坐標,score為置信度。

對於提交的結節候選區,如何判斷正負呢?如果提交的坐標位於結節半徑范圍內,則為正,也就是true positive,如果有多個候選區都與一個結節相關,則選取置信度最高的。若候選區檢測出irrelevant nodules,則忽略掉,既不是正也不是負,剩下的候選區都可以歸為false positive了。

有了正負樣本的定義,就要進行評估,LUNA16采用的是FROC(Free-Response Receiver Operating Characteristic)准則,這一准則的定義及細節需要百度或者維基了解下。其實就是一張圖,縱軸為召回率,橫軸為FPs/scan,

召回率就是標記的結節你找出來幾個,FPs/scan就是平均每個CT的FP數,注意是數,不是百分比。

上圖就是運行某個肺結節檢測模型的FROC圖,橫軸明顯是FP的數目。

最終的評比准則是0.125,0.25,0.5,1,2,4,8七個點召回率的平均值,論文中還提到bootstrap的方法,就是對測試集的每個CT進行重采樣,最終就是有的CT可能出現多次,而有的CT可能沒有,然后將采樣得到的CT的候選區集合起來,計算FROC,不過bootstrap的置信度區間我沒理解,有待考察。

目前任務一也就是檢測的leaderboard已經被刷到了0.951的高分,來自平安科技,第二名0.950,來自健培公司,我跑的這個算法達到0.84,也不錯,不過這前兩名是真的恐怖,虛心學習之~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM