侯智超,楊 楊,李曉琴
(北京工業大學 環境與生命學部,北京 100124)
肺癌是一種常見的癌癥,其早期表現是肺部CT圖像中出現的結節。如果能盡早的發現結節并進行及時治療則可以有效降低發展為肺癌的幾率。目前主要是通過臨床醫生觀察CT圖像來檢測肺結節,隨著肺癌篩查普及,產生了大量的CT掃描,該方法不僅給醫生帶來了巨大的工作量而且其主要依賴于醫生的臨床經驗,容易導致醫生疲勞,從而導致誤診和漏診的發生。因此,有研究者提出將計算機輔助診斷算法應用于肺結節的檢測中。
傳統肺部計算機輔助診斷檢測結節主要是通過圖像增強技術將結節分割后再進行識別,此類增強方法有可能改變原有的CT數據,進而干擾后續特征提取及檢測環節[1]。如Teramoto[2]、Aresta[3]等人均關注結節的輪廓,并對其進行增強來進行肺結節的分割;John[4]、Leemput[5]等人則關注于找到合適的閾值來提取結節;Ogul[6]等人則使用了多尺度的方法來檢測結節;齊守良[7]等人利用人工確定種子點,采用多閾值結合距離變換的方法提取結節。雖然傳統的方法可以實現肺結節的檢測,但是需要對圖像進行復雜的預處理來人工提取特征,然后再對其進行識別和分類。該方法條件苛刻,若檢測數量增加,則需要投入龐大的計算資源。
自2006年深度學習的概念被正式提出[8],研究者不斷地探索和實驗驗證,證實了其在圖像識別和分類方面應用的優勢[9-10]。其中,卷積神經網絡技術可以直接從輸入的圖像數據中提取特征并進行后續分類,相比于傳統方法避免了復雜的預處理過程,在圖像方面的分類和識別研究方面被廣泛應用[11-14]。Setio等人[15]將二維卷積神經網絡應用于三維立體圖像的研究,針對不用形態的結節,借鑒已有的技術,設計了三種探測器,并針對每個候選結節對象,提取了多個二維視圖,通過融合三個探測系統的結果,達到了較好的效果。其雖然考慮了結節的空間信息,結合了多個角度進行決策,但其模型仍是基于二維卷積神經網絡實現的,(二維的缺陷)。Kim等人[16]將以結節為中心的多尺寸區域放縮到相同的尺寸,并以不同的順序進行組合,其將各個分支的輸出結合,網絡結構十分復雜。Ding等人[17]將肺部CT切片軸向上連續的三層作為輸入,訓練了三維卷積神經網絡模型用于降低假陽性,考慮了空間信息但僅使用了三層切片。以上研究均為對肺結節初篩后再降低結果中假陽性,耗時較長并且準確度不高。
綜上,本文旨在提出一種基于三維卷積神經網絡的肺結節探測方法,能夠直接在CT數據中探測結節,并將結節進行標記。此外,設計一套完整的測試流程,為在CT圖像中對肺結節進行識別和定位提供參考。
本研究選用美國2016年肺結節分析(Lung Nodule Analysis 2016, LUNA16)挑戰賽開源數據集(https://luna16.grand-challenge.org)作為源數據。LUNA16挑戰是一個完全開放的挑戰,數據來自現有的最大的公共肺結節參考數據庫LIDC/IDRI數據集。LIDC/IDRI數據集包括1 018份CT圖像和附帶相關的XML文件,并且由4名經驗豐富的放射科醫生對結節進行注釋。LUNA16丟棄了切片厚度大于3 mm的掃描,還排除了有缺失或不一致切片的CT,最終得到888個CT掃描。其參考標準為由4名放射科醫生中至少3名認為是大于等于3 mm的結節,這樣的結節共有1 186個。未包含在參考標準中的注釋(非結節、小于3 mm的結節和僅由1或2名放射科醫生注釋的結節)被稱為不相關的發現,在官方附件中提供了不相關的注釋文件。此外本研究還使用了官方給出的用于假陽性減少比賽的包含約55萬個初篩的注釋。
卷積神經網絡是一種包含特征提取器的多層神經網絡,由LeCun等人[18]在1998年首次正式提出,主要由卷積層、池化層,全連接層組成,網絡多個層之間的組合能夠對圖像進行不同層次的抽象處理和特征提取[19],隨著卷積神經網絡被廣泛地應用,后來陸續有新的網絡層被開發出來對其不斷地進行補充和優化,如為防止梯度消失的批歸一化層,防止過擬合的隨機丟棄層等等。
2.1.1 卷積層
卷積層的功能主要是提取特征,層輸出由卷積核實現,卷積核的數量與輸出特征圖的數量相同,卷積核的大小和移動步長決定了特征圖的特征分布和精度,卷積過程中卷積核共享參數,但不同卷積核的參數不一定相同。深度學習中卷積操作指卷積核的每個值與卷積區域的對應位置的值相乘再求和,以一定的移動幅度遍歷整個圖像的過程,二維卷積過程(見圖1)。

圖1 二維卷積過程示意圖Fig.1 Schematic diagram of a 2D convolution process
圖中卷積前圖像大小為5×5,經3×3的卷積核進行步長為1的卷積處理后圖像大小變為3×3。卷積前在圖像周圍補“0”,可防止丟失圖像邊緣像素信息,還可使卷積前后圖像大小保持一致。三維卷積原理與二維卷積類似,不同的是其卷積核是三維卷積核,卷積運算在三個維度中進行,因此輸出的特征圖也為三維形式。
2.1.2 池化層
池化層在于對特征圖進行降維壓縮,以減少參數數量,防止過擬合,并保持圖像的平移不變性。目前常用的方法為最大池化和平均池化,根據圖像特點和需求,本研究選用最大池化方法,即每次選取池化核鄰域內最大的像素,如圖2中陰影部分所示。此外,池化運算的步長一般與池化窗口寬度相同,即移動時不與上一步重疊,以達到壓縮特征圖的目的。二維池化過程(見圖2)。

圖2 二維池化過程示意圖Fig.2 Schematic diagram of a 2D max-pooling process
圖中池化窗口尺寸為2×2,移動步長為2,因此輸出特征圖尺寸由輸入時的4×4減小為2×2。三維池化原理與二維相同,不同的是池化核在三維鄰域進行取值操作。該方法可以有效降低特征圖的大小,降低計算壓力,一般與卷積層成對設置。
2.1.3 全連接層
全連接層將經過多個卷積層和池化層提取的特征進行整合后經Softmax分類函數進行分類,得到基于輸入的概率分布[20]。前層輸出的特征圖在經過一維化后輸入全連接層,經過加權后將分布式的特征映射到樣本標記空間。
2.2.1 像素歸一化與坐標轉換
LUNA16數據集中的CT圖像由不同儀器掃描產生,成像因素造成灰度的差異。為了防止灰度值分布增加特征量而對后續研究產生影響[21],需要對圖像進行像素歸一化處理。根據人體肺部附近組織及空氣CT值的分布范圍,本研究使用線性變換將CT切片(-1 000,400)的亨氏值歸一化到(0,1)。LUNA16數據集給出的坐標值是世界坐標,單位長度為mm,其數據存儲均規范到512×512的大小,每個掃描在其頭文件中給出了空間分辨率,因此需要將其轉換為體素坐標。轉換如公式(1)所示。
(1)
公式中(coordx, coordy, coordz)為待檢測目標的世界坐標,(origin_x, origin_y, origin_z)為掃描機器對應的世界坐標原點,(spacing_x, spacing_y, spacing_z)為存儲時的空間分辨率,(coordX, coordY, coordZ)為轉換后的像素坐標。
2.2.2 數據劃分
在深度學習中需要將數據按一定比例隨機劃分為訓練集、驗證集和測試集,訓練集用于訓練模型,驗證集用于在訓練過程中對模型進行調優,測試集不參與網絡的訓練,用于評估模型。本研究在包含888套掃描的十個無序文件夾中,取前九個作為訓練源數據,共包含1 081個結節,最后一個文件夾中的圖像作為獨立的測試數據,包含105個結節。LUNA16比賽數據給出的1 186個肺結節直徑均小于40 mm且其中90%小于15 mm,將所有圖像進行像素歸一化和坐標轉換處理后,將結節位置和軸向同位置的鄰近切片以五張40×40的連續切片存放到h5py格式的文件中,生成用于訓練網絡的3D數據集。
2.2.3 數據擴充與采樣
對于單次掃描而言,結節數量是遠遠小于正常樣本數量的。模型具有高準確率的前提是對正負樣本都能準確識別,這取決于模型是否全面地學習到了正負樣本的特征信息。在LUNA16數據集中,正樣本的注釋相對于負樣本是非常少的,因此需要擴充正樣本,使訓練數據集中有足夠數量的正樣本;而負樣本數目龐大,因此需要進行下采樣來減少數量,盡可能使有限數量的集合全面包含負樣本特征信息。
本研究分別使用三種不同的正負樣本選擇與擴充方式得到了三個訓練集。其中,訓練集1和訓練集2使用相同的方法擴充正樣本,規則如下:正樣本的樣本中心在40×40的范圍內隨機平移,平移范圍由結節直徑大小約束,再經過90°、180°旋轉以及水平翻轉擴充數據。在訓練集1中,假設被標記為正樣本之外的區域都為負樣本,對正樣本關于水平中線、豎直中線和反斜對角線對稱的位置進行采樣,然后利用旋轉、翻轉擴增負樣本。訓練集2的負樣本是我們排除官方提供的不相關注釋列表中的點位,從剩余非結節點位中隨機選取一部分獲得的,數量與正樣本數量相當。
為降低隨機移動的偶然性,訓練集3將隨機平移的范圍約束在40×40大小的四個10×10的矩形內,進行多次擴增,這些正樣本相對均勻地在各方向上均得到了擴充。訓練集3結合訓練集1和訓練集2的負樣本采樣方式,將采樣到的負樣本隨機混合,并控制其數量與正樣本數量相當。得到的三個訓練集的樣本數量分布(見表1)。

表1 訓練集樣本數量表Table 1 The number of samples
本研究基于Windows10操作系統,利用python編程語言,軟件版本使用Tensorflow-gpu V1.7.0和KerasV2.1.6,搭配CUDAV9.0.176和cudnn V7.4并使用NVIDIAQuadro K2200 GPU搭建了基于3D-CNN的肺結節檢測網絡并進行訓練。訓練過程中根據驗證集準確率和損失值的變化調整網絡的結構和參數。經過大量實驗得到3D-CNN結構框圖(見圖 3)。平均模型訓練時間約0.5 h。

圖3 3D-CNN結構示意圖Fig.3 Structure diagram of 3D-CNN
如圖3所示,本文搭建的3D-CNN 包含4個卷積層、3個池化層、1個全連接層、1個輸入層和1個輸出層。其中,卷積層中卷積核的尺寸均為3×3×3,步長為1,填充方式為“same”,即卷積前在圖像之外填充0以保證卷積前后圖像大小不變,激活函數為ReLU激活函數。前3個卷積層后分別設置了步長為2的池化層以減少參數個數,降低網絡計算壓力。全連接層設置16個神經元,用于整合前層的特征,激活函數為ReLU激活函數,最后由softmax分類輸出層輸出結果。
訓練過程中通過可視化工具Tensorboard觀察模型在訓練集和驗證集上的準確率變化情況,據此來調整模型的結構和參數。在此展示模型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可以看出在網絡進行訓練20輪次左右時模型1和模型2收斂,準確率和損失值基本保持穩定。模型3的則需要更多的訓練輪次才達到穩定,這是因為在數據擴充與采樣時,訓練集3相較于訓練集1和訓練集2數據更為多樣化,網絡學習特征的難度更大,從而訓練模型到收斂的過程更長。為使結果更加可靠,我們對每個訓練集分別進行了多次訓練。
本研究中模型的性能主要通過敏感性、特異性來衡量。敏感性與特異性的計算方式如公式(2)、(3)所示。
(2)
(3)
式中真陽性比例(true positive rate, TPR)表示敏感性,真陰性比例(true negative rate, TNR)表示特異性。
測試集中包含88套CT掃描,在官方初篩注釋中篩除掉不相關點位后對應32 620個點位,其中由于105個醫生標注的結節中有些被多次檢出,因此32 620個點位包括125個候選結節點位和32 495個非結節點位,我們以此為評估標準對模型進行測試。
設計了系統檢測流程(見圖6),為增加位置精確度,要以較小的步長遍歷整套CT,在每一層掃描所有的位置,因此時間的花費主要集中在數據處理和存儲,以及結果預測。

圖6 自動檢測流程圖Fig.6 Flow chart of automatic detection
為降低CNN訓練過程中的隨機因素對結果的影響,對每個訓練集分別進行了三次訓練,將對應的模型在測試集上的評價指標取均值作為最終的評估結果。評估結果(見表2)。其中,第1、2和3組實驗分別計算了由訓練集1、訓練集2和訓練集3訓練得到表2的模型性能。

表2 評估結果Table 2 Results of evaluation %
由表2可以看出,第1組具有較高的敏感性,但特異度非常低,這是因為訓練集1的負樣本選取方式不確定性較強,網絡不能較為全面地學習到負樣本的特征,對于肺結節檢測,負樣本顯然數量遠遠大于正樣本,假陽性率高使得結果易混淆,較低的特異性使結果參考意義大打折扣;第2組明顯提高了特異度,但敏感性下降較多,說明在訓練集2上網絡對負樣本特征過度擬合,對肺結節檢測而言敏感性低意味著漏檢率高,在肺癌篩查中是應當盡力避免的;與前兩組相比第3組的結果同時具有較高的敏感性和特異性,說明后期對負樣本的擴增方法是非常有效的,訓練集3對樣本進行了混合與均衡,網絡得以充分學習到多樣化的樣本空間信息,因此可以在略微犧牲敏感性的基礎上保證較高的特異度。并以多視圖的方式展示了本文模型對部分樣本預測的結果(見圖7),圖中每一行圖下方的數值表示模型預測該樣本為結節的概率值。

圖7 部分樣本預測結果Fig.7 Part of prediction results of samples
由圖7可以看出,本文模型對正負樣本有較強的區分能力,在LUNA16提供的包含1 186個結節的候選點位上測試第3組實驗模型,同樣采用三個模型分別進行預測然后取平均值作為最終的預測結果(見表3),與汪洋等人[22]將殘差網絡與傳統SSD結合的檢測算法相比,使用同樣的測試數據,本文的結果明顯更具優勢。

表3 與其他檢測算法的對比Table 3 Comparison with other detection algorithm %
本研究在模擬實際篩查任務中進行了測試,檢測過程中每個樣本選取包含待檢測目標的40~50張CT切片,按照2.5的檢測流程進行全局掃描檢測,對檢測為結節的區域中心標記一個點。因此針對單層切片的單個結節周圍會出現多個標記,以及此結節涉及到的所有切片的區域會有多層標記。以像素為單位對帶有標記點的掩膜進行疊加融合,連續雙層的標記點顏色加深,連續三層的標記點置為紅色。使用該方法在測試集中隨機選取的CT樣本中進行了檢測實驗,并以多視圖的方式展示三維空間的可視化結果(見圖8),標注了檢測目標的原始圖像和本研究的檢測方法檢測出的標記示意。

圖8 標記結果示意圖Fig.8 Schematic diagram of marking results
對目標區域進行了放大顯示,如圖8所示,紅點密集的地方為檢出區域。我們的模型在結節所在切片及鄰近的切片均檢測出了異常,在遍歷整個CT數據塊時能較為準確地識別結節所在區域,結果表明本研究的方法是切實可行的。在本文的硬件環境下,我們的模型對每個樣本點位的預測時間約為1.5×10-3s,則檢測一套300張512×512的CT所需時間約為20~30 min。
本研究提出了基于三維卷積神經網絡的肺結節探測方法,并通過實驗取得了較好的檢測模型和結果。為了提高肺結節初步篩查的準確率,采用不同的方法對正樣本進行擴充、對負樣本進行降維采樣,構建了三個樣本數據集。搭建了3D-CNN并分別使用三個數據集訓練網絡得到對應的分類模型,對比了三組數據訓練的模型的效果,發現負樣本的多樣性在很大程度決定著模型的性能,多樣化程度越高,模型的泛化能力越強,魯棒性越高。最后從得到的肺結節檢測模型中進行多次測試并將結果進行平均以降低偶然性誤差對模型性能的影響,模型的敏感性為93.03%,特異性為97.39%。結果表明,本研究的肺結節檢測方法可以有效的檢測肺結節。此外,還設計了完整的結節自動化檢測流程,充分利用了數據的空間特征,有效地提高了檢測的精準度,大大降低了肺結節初篩的假陽性率。后續研究或將增大負樣本采集數量和正樣本擴充數量,進一步提升模型對肺結節的檢出率。