侯智超,楊 楊,李曉琴
(北京工業(yè)大學 環(huán)境與生命學部,北京 100124)
肺癌是一種常見的癌癥,其早期表現(xiàn)是肺部CT圖像中出現(xiàn)的結(jié)節(jié)。如果能盡早的發(fā)現(xiàn)結(jié)節(jié)并進行及時治療則可以有效降低發(fā)展為肺癌的幾率。目前主要是通過臨床醫(yī)生觀察CT圖像來檢測肺結(jié)節(jié),隨著肺癌篩查普及,產(chǎn)生了大量的CT掃描,該方法不僅給醫(yī)生帶來了巨大的工作量而且其主要依賴于醫(yī)生的臨床經(jīng)驗,容易導致醫(yī)生疲勞,從而導致誤診和漏診的發(fā)生。因此,有研究者提出將計算機輔助診斷算法應用于肺結(jié)節(jié)的檢測中。
傳統(tǒng)肺部計算機輔助診斷檢測結(jié)節(jié)主要是通過圖像增強技術(shù)將結(jié)節(jié)分割后再進行識別,此類增強方法有可能改變原有的CT數(shù)據(jù),進而干擾后續(xù)特征提取及檢測環(huán)節(jié)[1]。如Teramoto[2]、Aresta[3]等人均關(guān)注結(jié)節(jié)的輪廓,并對其進行增強來進行肺結(jié)節(jié)的分割;John[4]、Leemput[5]等人則關(guān)注于找到合適的閾值來提取結(jié)節(jié);Ogul[6]等人則使用了多尺度的方法來檢測結(jié)節(jié);齊守良[7]等人利用人工確定種子點,采用多閾值結(jié)合距離變換的方法提取結(jié)節(jié)。雖然傳統(tǒng)的方法可以實現(xiàn)肺結(jié)節(jié)的檢測,但是需要對圖像進行復雜的預處理來人工提取特征,然后再對其進行識別和分類。該方法條件苛刻,若檢測數(shù)量增加,則需要投入龐大的計算資源。
自2006年深度學習的概念被正式提出[8],研究者不斷地探索和實驗驗證,證實了其在圖像識別和分類方面應用的優(yōu)勢[9-10]。其中,卷積神經(jīng)網(wǎng)絡技術(shù)可以直接從輸入的圖像數(shù)據(jù)中提取特征并進行后續(xù)分類,相比于傳統(tǒng)方法避免了復雜的預處理過程,在圖像方面的分類和識別研究方面被廣泛應用[11-14]。Setio等人[15]將二維卷積神經(jīng)網(wǎng)絡應用于三維立體圖像的研究,針對不用形態(tài)的結(jié)節(jié),借鑒已有的技術(shù),設(shè)計了三種探測器,并針對每個候選結(jié)節(jié)對象,提取了多個二維視圖,通過融合三個探測系統(tǒng)的結(jié)果,達到了較好的效果。其雖然考慮了結(jié)節(jié)的空間信息,結(jié)合了多個角度進行決策,但其模型仍是基于二維卷積神經(jīng)網(wǎng)絡實現(xiàn)的,(二維的缺陷)。Kim等人[16]將以結(jié)節(jié)為中心的多尺寸區(qū)域放縮到相同的尺寸,并以不同的順序進行組合,其將各個分支的輸出結(jié)合,網(wǎng)絡結(jié)構(gòu)十分復雜。Ding等人[17]將肺部CT切片軸向上連續(xù)的三層作為輸入,訓練了三維卷積神經(jīng)網(wǎng)絡模型用于降低假陽性,考慮了空間信息但僅使用了三層切片。以上研究均為對肺結(jié)節(jié)初篩后再降低結(jié)果中假陽性,耗時較長并且準確度不高。
綜上,本文旨在提出一種基于三維卷積神經(jīng)網(wǎng)絡的肺結(jié)節(jié)探測方法,能夠直接在CT數(shù)據(jù)中探測結(jié)節(jié),并將結(jié)節(jié)進行標記。此外,設(shè)計一套完整的測試流程,為在CT圖像中對肺結(jié)節(jié)進行識別和定位提供參考。
本研究選用美國2016年肺結(jié)節(jié)分析(Lung Nodule Analysis 2016, LUNA16)挑戰(zhàn)賽開源數(shù)據(jù)集(https://luna16.grand-challenge.org)作為源數(shù)據(jù)。LUNA16挑戰(zhàn)是一個完全開放的挑戰(zhàn),數(shù)據(jù)來自現(xiàn)有的最大的公共肺結(jié)節(jié)參考數(shù)據(jù)庫LIDC/IDRI數(shù)據(jù)集。LIDC/IDRI數(shù)據(jù)集包括1 018份CT圖像和附帶相關(guān)的XML文件,并且由4名經(jīng)驗豐富的放射科醫(yī)生對結(jié)節(jié)進行注釋。LUNA16丟棄了切片厚度大于3 mm的掃描,還排除了有缺失或不一致切片的CT,最終得到888個CT掃描。其參考標準為由4名放射科醫(yī)生中至少3名認為是大于等于3 mm的結(jié)節(jié),這樣的結(jié)節(jié)共有1 186個。未包含在參考標準中的注釋(非結(jié)節(jié)、小于3 mm的結(jié)節(jié)和僅由1或2名放射科醫(yī)生注釋的結(jié)節(jié))被稱為不相關(guān)的發(fā)現(xiàn),在官方附件中提供了不相關(guān)的注釋文件。此外本研究還使用了官方給出的用于假陽性減少比賽的包含約55萬個初篩的注釋。
卷積神經(jīng)網(wǎng)絡是一種包含特征提取器的多層神經(jīng)網(wǎng)絡,由LeCun等人[18]在1998年首次正式提出,主要由卷積層、池化層,全連接層組成,網(wǎng)絡多個層之間的組合能夠?qū)D像進行不同層次的抽象處理和特征提取[19],隨著卷積神經(jīng)網(wǎng)絡被廣泛地應用,后來陸續(xù)有新的網(wǎng)絡層被開發(fā)出來對其不斷地進行補充和優(yōu)化,如為防止梯度消失的批歸一化層,防止過擬合的隨機丟棄層等等。
2.1.1 卷積層
卷積層的功能主要是提取特征,層輸出由卷積核實現(xiàn),卷積核的數(shù)量與輸出特征圖的數(shù)量相同,卷積核的大小和移動步長決定了特征圖的特征分布和精度,卷積過程中卷積核共享參數(shù),但不同卷積核的參數(shù)不一定相同。深度學習中卷積操作指卷積核的每個值與卷積區(qū)域的對應位置的值相乘再求和,以一定的移動幅度遍歷整個圖像的過程,二維卷積過程(見圖1)。
圖1 二維卷積過程示意圖Fig.1 Schematic diagram of a 2D convolution process
圖中卷積前圖像大小為5×5,經(jīng)3×3的卷積核進行步長為1的卷積處理后圖像大小變?yōu)?×3。卷積前在圖像周圍補“0”,可防止丟失圖像邊緣像素信息,還可使卷積前后圖像大小保持一致。三維卷積原理與二維卷積類似,不同的是其卷積核是三維卷積核,卷積運算在三個維度中進行,因此輸出的特征圖也為三維形式。
2.1.2 池化層
池化層在于對特征圖進行降維壓縮,以減少參數(shù)數(shù)量,防止過擬合,并保持圖像的平移不變性。目前常用的方法為最大池化和平均池化,根據(jù)圖像特點和需求,本研究選用最大池化方法,即每次選取池化核鄰域內(nèi)最大的像素,如圖2中陰影部分所示。此外,池化運算的步長一般與池化窗口寬度相同,即移動時不與上一步重疊,以達到壓縮特征圖的目的。二維池化過程(見圖2)。
圖2 二維池化過程示意圖Fig.2 Schematic diagram of a 2D max-pooling process
圖中池化窗口尺寸為2×2,移動步長為2,因此輸出特征圖尺寸由輸入時的4×4減小為2×2。三維池化原理與二維相同,不同的是池化核在三維鄰域進行取值操作。該方法可以有效降低特征圖的大小,降低計算壓力,一般與卷積層成對設(shè)置。
2.1.3 全連接層
全連接層將經(jīng)過多個卷積層和池化層提取的特征進行整合后經(jīng)Softmax分類函數(shù)進行分類,得到基于輸入的概率分布[20]。前層輸出的特征圖在經(jīng)過一維化后輸入全連接層,經(jīng)過加權(quán)后將分布式的特征映射到樣本標記空間。
2.2.1 像素歸一化與坐標轉(zhuǎn)換
LUNA16數(shù)據(jù)集中的CT圖像由不同儀器掃描產(chǎn)生,成像因素造成灰度的差異。為了防止灰度值分布增加特征量而對后續(xù)研究產(chǎn)生影響[21],需要對圖像進行像素歸一化處理。根據(jù)人體肺部附近組織及空氣CT值的分布范圍,本研究使用線性變換將CT切片(-1 000,400)的亨氏值歸一化到(0,1)。LUNA16數(shù)據(jù)集給出的坐標值是世界坐標,單位長度為mm,其數(shù)據(jù)存儲均規(guī)范到512×512的大小,每個掃描在其頭文件中給出了空間分辨率,因此需要將其轉(zhuǎn)換為體素坐標。轉(zhuǎn)換如公式(1)所示。
(1)
公式中(coordx, coordy, coordz)為待檢測目標的世界坐標,(origin_x, origin_y, origin_z)為掃描機器對應的世界坐標原點,(spacing_x, spacing_y, spacing_z)為存儲時的空間分辨率,(coordX, coordY, coordZ)為轉(zhuǎn)換后的像素坐標。
2.2.2 數(shù)據(jù)劃分
在深度學習中需要將數(shù)據(jù)按一定比例隨機劃分為訓練集、驗證集和測試集,訓練集用于訓練模型,驗證集用于在訓練過程中對模型進行調(diào)優(yōu),測試集不參與網(wǎng)絡的訓練,用于評估模型。本研究在包含888套掃描的十個無序文件夾中,取前九個作為訓練源數(shù)據(jù),共包含1 081個結(jié)節(jié),最后一個文件夾中的圖像作為獨立的測試數(shù)據(jù),包含105個結(jié)節(jié)。LUNA16比賽數(shù)據(jù)給出的1 186個肺結(jié)節(jié)直徑均小于40 mm且其中90%小于15 mm,將所有圖像進行像素歸一化和坐標轉(zhuǎn)換處理后,將結(jié)節(jié)位置和軸向同位置的鄰近切片以五張40×40的連續(xù)切片存放到h5py格式的文件中,生成用于訓練網(wǎng)絡的3D數(shù)據(jù)集。
2.2.3 數(shù)據(jù)擴充與采樣
對于單次掃描而言,結(jié)節(jié)數(shù)量是遠遠小于正常樣本數(shù)量的。模型具有高準確率的前提是對正負樣本都能準確識別,這取決于模型是否全面地學習到了正負樣本的特征信息。在LUNA16數(shù)據(jù)集中,正樣本的注釋相對于負樣本是非常少的,因此需要擴充正樣本,使訓練數(shù)據(jù)集中有足夠數(shù)量的正樣本;而負樣本數(shù)目龐大,因此需要進行下采樣來減少數(shù)量,盡可能使有限數(shù)量的集合全面包含負樣本特征信息。
本研究分別使用三種不同的正負樣本選擇與擴充方式得到了三個訓練集。其中,訓練集1和訓練集2使用相同的方法擴充正樣本,規(guī)則如下:正樣本的樣本中心在40×40的范圍內(nèi)隨機平移,平移范圍由結(jié)節(jié)直徑大小約束,再經(jīng)過90°、180°旋轉(zhuǎn)以及水平翻轉(zhuǎn)擴充數(shù)據(jù)。在訓練集1中,假設(shè)被標記為正樣本之外的區(qū)域都為負樣本,對正樣本關(guān)于水平中線、豎直中線和反斜對角線對稱的位置進行采樣,然后利用旋轉(zhuǎn)、翻轉(zhuǎn)擴增負樣本。訓練集2的負樣本是我們排除官方提供的不相關(guān)注釋列表中的點位,從剩余非結(jié)節(jié)點位中隨機選取一部分獲得的,數(shù)量與正樣本數(shù)量相當。
為降低隨機移動的偶然性,訓練集3將隨機平移的范圍約束在40×40大小的四個10×10的矩形內(nèi),進行多次擴增,這些正樣本相對均勻地在各方向上均得到了擴充。訓練集3結(jié)合訓練集1和訓練集2的負樣本采樣方式,將采樣到的負樣本隨機混合,并控制其數(shù)量與正樣本數(shù)量相當。得到的三個訓練集的樣本數(shù)量分布(見表1)。
表1 訓練集樣本數(shù)量表Table 1 The number of samples
本研究基于Windows10操作系統(tǒng),利用python編程語言,軟件版本使用Tensorflow-gpu V1.7.0和KerasV2.1.6,搭配CUDAV9.0.176和cudnn V7.4并使用NVIDIAQuadro K2200 GPU搭建了基于3D-CNN的肺結(jié)節(jié)檢測網(wǎng)絡并進行訓練。訓練過程中根據(jù)驗證集準確率和損失值的變化調(diào)整網(wǎng)絡的結(jié)構(gòu)和參數(shù)。經(jīng)過大量實驗得到3D-CNN結(jié)構(gòu)框圖(見圖 3)。平均模型訓練時間約0.5 h。
圖3 3D-CNN結(jié)構(gòu)示意圖Fig.3 Structure diagram of 3D-CNN
如圖3所示,本文搭建的3D-CNN 包含4個卷積層、3個池化層、1個全連接層、1個輸入層和1個輸出層。其中,卷積層中卷積核的尺寸均為3×3×3,步長為1,填充方式為“same”,即卷積前在圖像之外填充0以保證卷積前后圖像大小不變,激活函數(shù)為ReLU激活函數(shù)。前3個卷積層后分別設(shè)置了步長為2的池化層以減少參數(shù)個數(shù),降低網(wǎng)絡計算壓力。全連接層設(shè)置16個神經(jīng)元,用于整合前層的特征,激活函數(shù)為ReLU激活函數(shù),最后由softmax分類輸出層輸出結(jié)果。
訓練過程中通過可視化工具Tensorboard觀察模型在訓練集和驗證集上的準確率變化情況,據(jù)此來調(diào)整模型的結(jié)構(gòu)和參數(shù)。在此展示模型1-3在訓練集和驗證集上的準確率和損失值的變化情況(見圖4、圖5)。其中,圖4為模型1-3在訓練集上準確率和損失值的變化,圖5為模型1-3在驗證集上準確率和損失值的變化。
圖4 訓練集上準確率和損失值曲線圖Fig.4 Gurves of accuracy and loss on training set
圖5 驗證集上準確率和損失值曲線圖Fig.5 Gurves of accuracy and loss on validation set
由圖4和圖5可以看出在網(wǎng)絡進行訓練20輪次左右時模型1和模型2收斂,準確率和損失值基本保持穩(wěn)定。模型3的則需要更多的訓練輪次才達到穩(wěn)定,這是因為在數(shù)據(jù)擴充與采樣時,訓練集3相較于訓練集1和訓練集2數(shù)據(jù)更為多樣化,網(wǎng)絡學習特征的難度更大,從而訓練模型到收斂的過程更長。為使結(jié)果更加可靠,我們對每個訓練集分別進行了多次訓練。
本研究中模型的性能主要通過敏感性、特異性來衡量。敏感性與特異性的計算方式如公式(2)、(3)所示。
(2)
(3)
式中真陽性比例(true positive rate, TPR)表示敏感性,真陰性比例(true negative rate, TNR)表示特異性。
測試集中包含88套CT掃描,在官方初篩注釋中篩除掉不相關(guān)點位后對應32 620個點位,其中由于105個醫(yī)生標注的結(jié)節(jié)中有些被多次檢出,因此32 620個點位包括125個候選結(jié)節(jié)點位和32 495個非結(jié)節(jié)點位,我們以此為評估標準對模型進行測試。
設(shè)計了系統(tǒng)檢測流程(見圖6),為增加位置精確度,要以較小的步長遍歷整套CT,在每一層掃描所有的位置,因此時間的花費主要集中在數(shù)據(jù)處理和存儲,以及結(jié)果預測。
圖6 自動檢測流程圖Fig.6 Flow chart of automatic detection
為降低CNN訓練過程中的隨機因素對結(jié)果的影響,對每個訓練集分別進行了三次訓練,將對應的模型在測試集上的評價指標取均值作為最終的評估結(jié)果。評估結(jié)果(見表2)。其中,第1、2和3組實驗分別計算了由訓練集1、訓練集2和訓練集3訓練得到表2的模型性能。
表2 評估結(jié)果Table 2 Results of evaluation %
由表2可以看出,第1組具有較高的敏感性,但特異度非常低,這是因為訓練集1的負樣本選取方式不確定性較強,網(wǎng)絡不能較為全面地學習到負樣本的特征,對于肺結(jié)節(jié)檢測,負樣本顯然數(shù)量遠遠大于正樣本,假陽性率高使得結(jié)果易混淆,較低的特異性使結(jié)果參考意義大打折扣;第2組明顯提高了特異度,但敏感性下降較多,說明在訓練集2上網(wǎng)絡對負樣本特征過度擬合,對肺結(jié)節(jié)檢測而言敏感性低意味著漏檢率高,在肺癌篩查中是應當盡力避免的;與前兩組相比第3組的結(jié)果同時具有較高的敏感性和特異性,說明后期對負樣本的擴增方法是非常有效的,訓練集3對樣本進行了混合與均衡,網(wǎng)絡得以充分學習到多樣化的樣本空間信息,因此可以在略微犧牲敏感性的基礎(chǔ)上保證較高的特異度。并以多視圖的方式展示了本文模型對部分樣本預測的結(jié)果(見圖7),圖中每一行圖下方的數(shù)值表示模型預測該樣本為結(jié)節(jié)的概率值。
圖7 部分樣本預測結(jié)果Fig.7 Part of prediction results of samples
由圖7可以看出,本文模型對正負樣本有較強的區(qū)分能力,在LUNA16提供的包含1 186個結(jié)節(jié)的候選點位上測試第3組實驗模型,同樣采用三個模型分別進行預測然后取平均值作為最終的預測結(jié)果(見表3),與汪洋等人[22]將殘差網(wǎng)絡與傳統(tǒng)SSD結(jié)合的檢測算法相比,使用同樣的測試數(shù)據(jù),本文的結(jié)果明顯更具優(yōu)勢。
表3 與其他檢測算法的對比Table 3 Comparison with other detection algorithm %
本研究在模擬實際篩查任務中進行了測試,檢測過程中每個樣本選取包含待檢測目標的40~50張CT切片,按照2.5的檢測流程進行全局掃描檢測,對檢測為結(jié)節(jié)的區(qū)域中心標記一個點。因此針對單層切片的單個結(jié)節(jié)周圍會出現(xiàn)多個標記,以及此結(jié)節(jié)涉及到的所有切片的區(qū)域會有多層標記。以像素為單位對帶有標記點的掩膜進行疊加融合,連續(xù)雙層的標記點顏色加深,連續(xù)三層的標記點置為紅色。使用該方法在測試集中隨機選取的CT樣本中進行了檢測實驗,并以多視圖的方式展示三維空間的可視化結(jié)果(見圖8),標注了檢測目標的原始圖像和本研究的檢測方法檢測出的標記示意。
圖8 標記結(jié)果示意圖Fig.8 Schematic diagram of marking results
對目標區(qū)域進行了放大顯示,如圖8所示,紅點密集的地方為檢出區(qū)域。我們的模型在結(jié)節(jié)所在切片及鄰近的切片均檢測出了異常,在遍歷整個CT數(shù)據(jù)塊時能較為準確地識別結(jié)節(jié)所在區(qū)域,結(jié)果表明本研究的方法是切實可行的。在本文的硬件環(huán)境下,我們的模型對每個樣本點位的預測時間約為1.5×10-3s,則檢測一套300張512×512的CT所需時間約為20~30 min。
本研究提出了基于三維卷積神經(jīng)網(wǎng)絡的肺結(jié)節(jié)探測方法,并通過實驗取得了較好的檢測模型和結(jié)果。為了提高肺結(jié)節(jié)初步篩查的準確率,采用不同的方法對正樣本進行擴充、對負樣本進行降維采樣,構(gòu)建了三個樣本數(shù)據(jù)集。搭建了3D-CNN并分別使用三個數(shù)據(jù)集訓練網(wǎng)絡得到對應的分類模型,對比了三組數(shù)據(jù)訓練的模型的效果,發(fā)現(xiàn)負樣本的多樣性在很大程度決定著模型的性能,多樣化程度越高,模型的泛化能力越強,魯棒性越高。最后從得到的肺結(jié)節(jié)檢測模型中進行多次測試并將結(jié)果進行平均以降低偶然性誤差對模型性能的影響,模型的敏感性為93.03%,特異性為97.39%。結(jié)果表明,本研究的肺結(jié)節(jié)檢測方法可以有效的檢測肺結(jié)節(jié)。此外,還設(shè)計了完整的結(jié)節(jié)自動化檢測流程,充分利用了數(shù)據(jù)的空間特征,有效地提高了檢測的精準度,大大降低了肺結(jié)節(jié)初篩的假陽性率。后續(xù)研究或?qū)⒃龃筘摌颖静杉瘮?shù)量和正樣本擴充數(shù)量,進一步提升模型對肺結(jié)節(jié)的檢出率。