基于電子計算機斷層掃描(CT)的肺結節檢測的早期篩查是降低肺癌死亡率的重要手段,而近年來三維卷積神經網絡(3D CNN)已經在肺結節檢測領域取得了成功并不斷深入發展。本文提出了一種基于多尺度注意力機制的3D CNN肺結節檢測算法。針對肺結節大小和形狀各異的特點,設計了一個多尺度的特征提取模塊,提取不同尺度的相應特征。通過注意力模塊,從空間和通道兩個角度挖掘特征間的關聯信息,對特征加強。提取出的特征進入類似金字塔的融合機制,使得特征中同時包含深層的語義信息與淺層的位置信息,更利于目標定位與邊界框回歸。在具有代表性的LUNA16數據集上,相對于目前先進的其他方法,本文方法能夠明顯地提高檢測靈敏度,可為臨床醫學提供理論參考。
引用本文: 趙宇督, 彭振偉, 馬駿, 夏浩, 萬洪林. 基于多尺度注意力機制的三維卷積神經網絡肺結節檢測算法. 生物醫學工程學雜志, 2022, 39(2): 320-328. doi: 10.7507/1001-5515.202011058 復制
版權信息: ?四川大學華西醫院華西期刊社《生物醫學工程學雜志》版權所有,未經授權不得轉載、改編
引言
目前肺癌的死亡率是所有癌癥中最高的[1]。導致肺癌的原因有吸煙、衰老、基因和空氣中有毒顆粒等,遺憾的是,人們還沒有找到有效降低癌癥發病率的方法。因此,早期篩查對于降低肺癌死亡率至關重要。由于大部分早期肺癌患者沒有明顯的臨床癥狀,也沒有特異的生物標記物,因此目前早期篩查的主要方法是采用放射影像如電子計算機斷層掃描(computed tomography,CT)來檢查肺部是否存在可疑病灶。早期肺癌大多表現為肺部結節,它們尺寸小、對比度低、形狀異質化高[2]。如果由醫生進行人工篩查,會產生兩個問題:一是人工篩查過分依賴醫生臨床經驗,這不僅需要極高的專業度,還容易受到醫生主觀判斷的影響,準確度無法保證;二是人工讀片工作量巨大,容易造成醫生疲勞,增加誤判和漏判概率。顯然,僅僅依靠醫生人工篩查CT圖像中的肺結節是有困難的。
隨著深度學習的迅速發展,很多研究人員將卷積神經網絡(convolutional neural network,CNN)應用到CT圖像肺結節的檢測中。相比傳統機器視覺方法,深度學習可以自動提取數據的高級抽象特征,輸出特征可以直接用于識別、分類和檢測,自動化程度高,能夠更有效地區分真實結節和非結節,在提高檢測率、降低假陽性率方面獲得了較好的效果。近年來二維卷積神經網絡(two dimensional CNN,2D CNN)已經在肺結節檢測領域取得了巨大的成功。Setio等[3]提出基于多視角的2D CNN,通過提取不同方向平面上的信息和多種不同的融合方法,在降低假陽性率方面取得了良好的效果。Li等[4]提出了一種集成網絡,構建了三個不同輸入大小、不同深度的子網絡分別進行結節檢測,最后融合上述三個子網絡的結果。這一網絡可以直接檢測肺小結節,提高了檢測效率和精度。Zhao等[5]提出了一種新的假陽性減少框架,與單視圖二維神經網絡集成,用于肺結節檢測。這一網絡采用基于分類的肺結節訓練方案,擴展了對代表性肺結節的學習能力。Zhang等[6]提出了通道和空間注意力融合機制(channel and spatial mixed attention CNN,CSANet)。這一方法是在殘差網絡(residual network,ResNet)網絡中的每個階段,分別嵌入通道注意力模塊和空間注意力模塊,從而能夠更準確地定位有用的通道特征和區域特征,提高了圖像目標檢測精度。
但是采用2D CNN檢測肺結節會忽略肺結節的空間特征,影響檢測的準確率。而三維卷積神經網絡(three dimensional CNN,3D CNN)能提取到肺結節的三維特征,可以更好地結合圖像的空間信息。Ding等[7]提出了基于深度卷積神經網絡(deep convolution neural network,DCNN)的肺結節檢測方法,并將反卷積引入到快速區域卷積神經網絡中,用于軸向切片的候選檢測,然后使用3D CNN來降低假陽性,進一步提高檢測速度和精度。Zhu等[8]設計了一個全自動化的肺部CT癌癥診斷系統Deep Lung,設計了一種基于三維雙路徑和編碼器-解碼器結構相結合的快速卷積神經網絡,并設計了與三維雙路徑網絡相結合的梯度增強分類器(gradient boosting machine,GBM),來實現結節的分類。Lin等[9]提出了單階段3D CNN肺結節檢測方法。首先,通過IoU自歸一化方法對分類標簽進行設置,賦予了更多的邊界盒回歸。其次,在分類器中加入maxout單元來處理肺結節類內較大的變化。此外,還引入了焦損失,有效地解決了樣本的難易不平衡問題。Ozdemir等[10]利用檢測和診斷組件之間的耦合,提出了一種基于3D CNN的端到端的CAD系統,使用3D CNN級聯,并通過Monte Carlo dropout和deep ensembles對模型的不確定性進行了表征,在LUNA16和Kaggle數據集上有效實現了肺結節檢測和腫瘤分類任務。
為了進一步提高檢測精度,本文提出了一種基于多尺度注意力機制的3D CNN肺結節檢測網絡(multi scale 3D CNN with channel and spatial attention,MS-CSANet)。在該方法中設計了一個三維多尺度的特征提取模塊,以提取不同尺度的相應特征。通過注意力模塊,從空間和通道的角度挖掘特征間的關聯信息,對特征進行加強。提取出的特征進入類似于金字塔的融合機制,使得特征中同時包含深層的語義信息與淺層的位置信息,更利于目標定位與邊界框回歸。
1 算法設計
1.1 網絡框架
MS-CSANet以3D ResNet-18作為基礎網絡[11]。ResNet是目標檢測領域中常用的骨干網絡,擴展為3D之后也得到了廣泛的應用。本文算法提出的網絡總共有6個stage,每個stage包含多個卷積層。受限于GPU顯存,整張CT圖像無法直接輸入到網絡,因此需要對CT圖像進行分割。首先將預處理后的CT圖像隨機地分割成96 × 96 × 96的立方體[12],然后將其輸入到網絡中,依次經過每個stage提取出特征圖,然后通過每個stage進行下采樣,對應著stage1~5的輸出。MS-CSANet網絡的總體框架結構如圖1所示,預處理流程示意圖如圖2所示,閾值分割大致分割出肺部區域,通過清除邊緣操作來去掉不屬于肺部區域的部分,找出所有連通區域并給它們分配標簽,通過腐蝕操作侵蝕掉前景區域的邊界,之后填補肺內的微小孔洞,最后將得到的掩模與原始圖像進行疊加操作后輸出[13]。
 圖1
				MS-CSANet 總體結構
			
												
				Figure1.
				Overall block diagram of MS-CSANet
						
				圖1
				MS-CSANet 總體結構
			
												
				Figure1.
				Overall block diagram of MS-CSANet
			
								 圖2
				預處理流程示意圖
			
												
				Figure2.
				Schematic diagram of pretreatment process
						
				圖2
				預處理流程示意圖
			
												
				Figure2.
				Schematic diagram of pretreatment process
			
								圖1中僅展示了Resnet-18的最后3個stage。本文算法在這3個stage后添加了多尺度特征模塊和注意力模塊。從第4個stage開始,輸入的圖像先經過原網絡的殘差模塊,之后依次進入多尺度特征模塊和注意力模塊,提取出的特征圖進入類似于金字塔的融合機制,使得特征中同時包含深層的語義信息與淺層的位置信息[14]。融合特征被送入分類和回歸模塊,進行邊界框定位與目標分類。緊接著網絡將會對這3個階段提取的特征圖依次進行預測。本文算法針對不同大小的結節設計了3種錨框,分別為5 × 5 × 5、10 × 10 × 10和20 × 20 × 20。
1.2 多尺度特征提取模塊
由于肺結節的大小和形狀各異,且位置大多是非固定狀態,因此,僅僅使用單一尺度,很有可能丟失部分特征信息,影響檢測效果。卷積核尺寸會決定特征圖感受野的大小。如果感受野過大,會降低模型對微小尺寸肺結節的檢測效果;反之,如果感受野太小,會導致網絡不能很好地獲得全局信息。針對這個問題,本文借鑒Inception結構思想[15],設計了一個多尺度特征模塊,使用不同尺度的卷積核來獲得不同范圍的感受野,從而獲取更加全面的肺結節特征信息,強化了網絡對多尺度的適應性。
為了減輕計算的消耗,提高網絡的性能,本文算法設計的多尺度特征檢測模塊大多采用的是1 × 1 × 1和3 × 3 × 3的小卷積。其中,1 × 1 × 1的卷積可以實現通道數的降維,減少計算量,還可以把在同一個空間位置、不同通道但相關性很高的特征結合起來。而其他尺寸的卷積核,如3 × 3 × 3、5 × 5 × 5卷積,可以保證較大的感受野和特征的多樣性。多尺度特征模塊的具體結構如圖3所示。
 圖3
				多尺度特征模塊結構
			
												
				Figure3.
				Multiscale feature module structure
						
				圖3
				多尺度特征模塊結構
			
												
				Figure3.
				Multiscale feature module structure
			
								多尺度特征模塊由4個大小不同的尺度組成,分別為卷積核1 × 1 × 1、3 × 3 × 3和5 × 5 × 5三個卷積層和一個平均池化層。除了第四層的平均池化層外,其他三個尺度在輸入肺結節的圖像之后會先通過一個1 × 1 × 1的卷積來實現通道數的降維,避免每層計算量過大。第一層使用1 × 1 × 1的小卷積來檢測小尺寸的結節,第二層使用3 × 3 × 3的卷積來檢測中等大小的結節,第三層使用5 × 5 × 5卷積來檢測大尺寸的結節。第四層使用平均池化層來改變輸入的特征排列,降低特征圖的厚度。執行完上述這些步驟后,將各個尺度獲得的特征信息進行融合,并經過歸一化與激活函數,形成新的特征圖。
1.3 注意力模塊
深度神經網絡注意力機制是對人類視覺注意力機制的模仿。從本質上講,它是一種資源分配機制。人眼可以快速掃描全局圖像,找到需要關注的目標區域,然后對這個區域分配更多注意,目的在于獲取更多細節信息和抑制其他無用信息[16]。如果神經網絡在對圖像進行識別時,每次集中于部分特征上,會使得識別更加準確。注意力機制的原理就是在每次識別時,首先計算每個特征的權值,然后對特征進行加權,權值越大,該特征對當前識別的貢獻就越大。這個加權可以作用在空間尺度上,給不同空間區域加權;也可以作用在通道尺度上,給不同通道特征加權,甚至可以給特征圖上的每個元素加權[17]。
基于注意力機制原理,本文算法在3D ResNet-18網絡上添加了一個注意力網絡模塊來使檢測器更加側重于CT圖像中肺結節的特征,從而提高檢測效果。由于卷積運算通過將多通道和空間信息混合在一起提取特征,因此按照通道軸和空間軸進行注意力網絡的設計,這樣每個分支都可以分別在通道和空間軸上學習到分類和定位信息。在肺結節檢測中,注意力模塊重點關注紋理、形態學、CT值等重要特征,并抑制不必要的特征。注意力機制整體結構如圖4所示。
 圖4
				注意力模塊結構
			
												
				Figure4.
				Attention module structure
						
				圖4
				注意力模塊結構
			
												
				Figure4.
				Attention module structure
			
								從第四個stage開始,通過多尺度塊生成的特征圖被輸入到注意力模塊[18]。特征圖首先進入通道注意力模塊,通過平均池化層和最大池化層來對輸入的特征圖進行壓縮,生成平均匯集特征  和最大匯集特征
 和最大匯集特征  ,之后再將
,之后再將  和
 和  輸入到一個由2個DenseLayers構成的共享權重層。將共享權重層輸出的特征進行融合,再經過sigmoid函數激活,生成最終的通道注意[19]
 輸入到一個由2個DenseLayers構成的共享權重層。將共享權重層輸出的特征進行融合,再經過sigmoid函數激活,生成最終的通道注意[19] 。另外,為了減少計算消耗,將隱藏層的激活大小設置為
。另外,為了減少計算消耗,將隱藏層的激活大小設置為  ,r為通道壓縮率。綜上所述,通道注意的總公式為:
,r為通道壓縮率。綜上所述,通道注意的總公式為:
|  | 
其中  為sigmoid函數。空間注意可以看作是對通道注意的補充。在得到通道注意后,將通道注意和輸入的特征圖融合,作為空間注意模塊的輸入特征。空間注意模塊XC的輸入可以用下面這個公式描述:
 為sigmoid函數。空間注意可以看作是對通道注意的補充。在得到通道注意后,將通道注意和輸入的特征圖融合,作為空間注意模塊的輸入特征。空間注意模塊XC的輸入可以用下面這個公式描述:
|  | 
其中, 表示element-wise乘法。為了充分利用通道信息,通過全局平均池化和最大池化操作生成三維特征圖
 表示element-wise乘法。為了充分利用通道信息,通過全局平均池化和最大池化操作生成三維特征圖  和
 和  。然后將它們融合,再通過一個標準的卷積層生成三維空間注意,稱之為
。然后將它們融合,再通過一個標準的卷積層生成三維空間注意,稱之為  [19]。空間上的注意力計算為:
[19]。空間上的注意力計算為:
|  | 
上式中 為卷積核尺寸為3 × 3 × 3的三維卷積。將MC和MS融合,得到整個注意力模塊的輸出,可以用以下公式表示:
為卷積核尺寸為3 × 3 × 3的三維卷積。將MC和MS融合,得到整個注意力模塊的輸出,可以用以下公式表示:
|  | 
1.4 損失函數
損失函數分為兩部分,分類損失Lcls和回歸損失Lreg。對于Lcls使用二分類交叉熵損失函數,對于Lreg使用平滑L1回歸損失函數[19]。訓練時,如果錨框和標注邊框的交并比大于0.5,將其視為陽性樣本;反之,如果錨框與所有標注邊框的交并比都小于0.02,則視其為陰性樣本。其余的忽略不計。對于錨框i的多任務損失函數定義為:
|  | 
其中,λ為0.5,pi為當前錨框i被預測為結節的概率,ti是對應結節的相對坐標,定義為:
|  | 
其中, 是預測的原空間中結節的坐標和直徑,
 是預測的原空間中結節的坐標和直徑, 是錨框i的坐標和尺寸,而標注中結節的坐標定義如下:
 是錨框i的坐標和尺寸,而標注中結節的坐標定義如下:
|  | 
其中, 是標注中結節的坐標和直徑。
是標注中結節的坐標和直徑。
對于Lcls,考慮到使用sigmoid作為激活函數,最終本文算法選擇使用二分類交叉熵損失函數。其定義如下:
|  | 
式中, 為anchor的真值標簽,接著是回歸損失函數。其定義如下:
為anchor的真值標簽,接著是回歸損失函數。其定義如下:
|  | 
對于H,考慮到L2損失函數將會誤差平方化,模型會對單個樣本更加敏感,而L1范數損失函數在0點處導數不存在,可能會影響收斂,最終選擇使用平滑L1損失函數。具體公式如下:
|  | 
其中, 。
。
2 算法實驗
實驗軟硬件環境:Ubuntu16.04,CPU XEON 4110 × 2,GPU NVIDIA Quadro P5000 16GB × 1,內存64 GB。所有實驗都是基于Python的Pytorch深度學習庫來實現。
2.1 數據集
本實驗使用的是LUNA16數據集[20]。該數據集來自一個更大的可公開獲得的肺結節數據庫(Lung Image Database Consortium,LIDC)。LIDC-IDRI共包含1 018張CT掃描,也就是1 018個病例。該數據集中含有醫療數字影像傳輸協定(Digital Imaging and Communications In Medicine,DICOM)的醫學圖像以及四位放射科專家的標注信息,四位專家分兩階段對該數據集進行標注。在第一階段中,每位專家將所識別的病灶信息標記為非結節、小結節(< 3 mm)、大結節(≥ 3 mm)。在第二階段中,每位專家分別對其他三位專家的標注結果進行復審以確定最終的診斷結果。經過兩階段的處理能夠將漏診率降到最低,使該數據集具有更高的參考價值。
在該數據集中還包含了病變程度、病變特征以及其他相關信息。由于個人主觀原因,每位專家對同一切片的標注不盡相同,因此選取了3~4位專家共同標注的結節作為最終的參考標準,再除去非結節以及小結節,最后選擇了包含1 186個結節標簽的888張CT掃描作為實驗數據,構成了LUNA16數據集。LUNA16將這888例CT圖像分為0~9共10個子集,方便進行10折交叉驗證。
2.2 預處理
為了縮小肺結節的檢測范圍,減少工作量并提高肺結節特征提取的效率,需要對LUNA16數據集中原始的肺部CT圖像進行預處理,以實現肺實質分割[21]。首先,加載原始CT數據和數據掩碼,對數據掩碼非零部分進行重采樣,將分辨率統一。LUNA16已經將原始數據處理成亨氏單位(Hounsfield unit,HU),可直接進行下一步。由于人體每個組織都有特定的HU范圍,而肺的HU值在 ? 500左右,因此只保留HU值在 ? 1 200~600內的區域[22]。本文算法認為HU值不在這個范圍的區域與肺部疾病無關,因此為了便于歸一化,將這些區域的數據置為 ? 1 200 HU或600 HU,再將數據歸一化至0~255。之后對掩碼進行膨脹操作,去除肺內的小空洞。再將重采樣后的數據轉化為體素坐標,對其應用新的分辨率。最后,刪除背景區域,分割出肺實質,將預處理后的數據和標簽用數據特定格式.npy格式存儲。
2.3 參數設置
在本文實驗中,將數據集分為訓練集和測試集兩部分,采用10折交叉驗證方法。由于LUNA16數據集已經被分為10個子集,只需每次取其中的9組作為訓練集,剩下的一組則作為測試集,如此循環10次。這樣每次都能使用不同的數據集,既保證了對樣本的充分利用,也保證了結果的準確性。
在訓練中,通過隨機翻轉圖像來進行數據增強,并使用0.75~1.25的比例裁剪,以緩解陽性樣本、陰性樣本不均衡的問題。對于每個fold,總共訓練150個批次。此外,使用SGD對模型進行優化,其中隨機梯度下降的動量為0.9,權重衰減系數設為0.000 1。批處理大小參數受到GPU存儲器的限制設置為6。采用學習率衰減策略,初始學習率設為0.01,當運行到75批次變為0.001,120批次之后為0.000 1。
在測試階段,使用檢測概率閾值 ? 2(在sigmoid函數之前),然后使用IoU閾值為0.1的非極大抑制(non maximal suppression,NMS)。
2.4 評估指標
在肺結節檢測中,陽性代表該目標是結節,陰性代表該目標是非結節。標注為結節,檢測結果也是結節,則該結果為真陽性(true positives,TP);標注為非結節,檢測結果卻是結節,則該結果為假陽性(false positives,FP);標注為結節,檢測結果卻是非結節,則該結果為假陰性(false negatives,FN);標注為非結節,檢測結果也是非結節,則該結果稱為真陰性(true negatives,TN)。本文使用的評估標準與LUNA16比賽相同。根據LUNA16官方的評價標準,本文通過FROC分析來評價模型的肺結節檢測性能,在FROC曲線中,召回率(靈敏度)可以看作是關于每次掃描的平均假陽性個數[23]。靈敏度越高,假陰性就越低,對應的漏診率也就越低。其計算公式如下:
|  | 
使用FROC曲線可以直觀地看到模型的性能,但不能比較出與其他模型之間的性能優劣。為此本文算法引入了CPM[24]指標來分析本文模型與其他模型的性能差異。CPM被定義為不同單次掃描平均假陽性數量所對應的平均靈敏度,其中單次掃描平均假陽性數量的取值分別為0.125、0.25、0.5、1、2、4和8。CPM得分代表了檢測肺結節中召回率和可容忍假陽性個數的綜合指標,CPM得分越高,模型的性能越好。其計算公式如下:
|  | 
式中,N的值為7, 代表單次掃描平均假陽性數量,
 代表單次掃描平均假陽性數量, 表示對應的
 表示對應的  時的靈敏度。
 時的靈敏度。
2.5 實驗結果及分析
為了直觀地展示本文算法模型的性能,實驗中繪制了MS-CSANet(3DRes18 + MSB + CBAM)的FROC曲線圖,如圖5所示。該方法的CPM值為0.844,證明了本文算法在Res18基礎上添加的多尺度特征塊和注意力模塊的有效性。
 圖5
				MS-CSANet 的 FROC 曲線
			
												
				Figure5.
				FROC curve of MS-CSANet
						
				圖5
				MS-CSANet 的 FROC 曲線
			
												
				Figure5.
				FROC curve of MS-CSANet
			
								將本文算法與近期主流算法進行了比對,如表1[9,25-33]所示。從表中可以看出,本文算法在LUNA16數據集上取得了良好結果。本文算法的CPM得分略高于次優的Bray等[27]所提出的Deep Lung系統。另外,在假陽性率為0.5和1的情況下,本文算法的靈敏度分別是0.826、0.871,在所有算法中最高。
 表1
                在 LUNA16 數據集上與主流算法性能的比較
		 	
		 			 				Table1.
    			Performance comparison with mainstream algorithms on LUNA16 data set
			
						表1
                在 LUNA16 數據集上與主流算法性能的比較
		 	
		 			 				Table1.
    			Performance comparison with mainstream algorithms on LUNA16 data set
       		
       				算法檢測效果的展示如圖6所示。圖中展示了部分樣本,其中檢測出的肺結節用白色矩形框標識,圖片下方的P值代表被預測為肺結節的概率。此處,本文還給出了10折測試單張CT處理所需平均時間的結果(見表2)。
 圖6
				部分檢測結果展示
			
												
				Figure6.
				Display of some test results
						
				圖6
				部分檢測結果展示
			
												
				Figure6.
				Display of some test results
			
								 表2
                10折測試單張CT處理所需平均時間
		 	
		 			 				Table2.
    			Time required for single CT image processing in 10   folds test
			
						表2
                10折測試單張CT處理所需平均時間
		 	
		 			 				Table2.
    			Time required for single CT image processing in 10   folds test
       		
       				2.6 消融實驗
實驗采用多尺度特征模塊和注意力模塊來提高網絡的檢測精度。為此,在LUNA數據集上進行了消融實驗[34]。
消融實驗從不添加任何模塊、只添加一個模塊(多尺度特征模塊或者注意力模塊)以及添加兩個模塊時兩個模塊添加的位置等角度分別進行,結果如表3所示。從表3中可以看出,當不添加任何模塊時,CPM得分為0.834。當在殘差模塊之后加上多尺度特征塊后,CPM得分提高到了0.835,模型的檢測精度略微提升。當在殘差模塊之后加上注意力模塊后,CPM得分達到了0.841,提升較為明顯,說明在網絡開始關注通道維度和空間維度上的相關性并結合了兩個維度上的信息后,更有利于對肺結節的檢測。當在殘差模塊之后依次通過注意力模塊和多尺度塊之后,CPM得分為0.837,比只加多尺度塊略好但比只加注意力模塊差不少。相反,如果先通過多尺度塊而后通過注意力模塊,CPM得分達到了0.844,比其他的得分都要高。說明先通過多尺度塊再通過注意力模塊,更能充分發揮特征之間的關聯信息,達到較好的檢測效果。
 表3
                消融實驗結果
		 	
		 			 				Table3.
    			Ablation results
			
						表3
                消融實驗結果
		 	
		 			 				Table3.
    			Ablation results
       		
       				3 結論
本文提出了基于多尺度注意力機制的3D CNN肺結節檢測算法,稱之為MS-CSANet。首先,針對肺結節大小和形狀各異的特點,設計了一個多尺度的特征提取塊,來提取不同尺度的相應特征。然后,通過注意力模塊,從空間和通道的角度挖掘特征間的關聯信息,對特征進行加強。提取出的特征將進入類似于金字塔的融合機制,使得特征中同時包含深層的紋理信息與淺層的位置信息,以獲得更好的特征定位與分類。最后,從實驗的角度,通過消融研究和實驗對比,驗證了所提出的肺結節檢測方法的各個模塊和整體模型的性能。根據在LUNA16數據集上的實驗結果可以得出結論,與現有的同類技術方法相比,本文模型的結果更加有效。
重要聲明
利益沖突聲明:本文全體作者均聲明不存在利益沖突。
作者貢獻聲明:萬洪林負責數據分析與算法設計,趙宇督負責算法編程與文章撰寫,彭振偉負責實驗結果的采集與整理,馬駿負責數據預處理,夏浩負責實驗環境的搭建與調試。
引言
目前肺癌的死亡率是所有癌癥中最高的[1]。導致肺癌的原因有吸煙、衰老、基因和空氣中有毒顆粒等,遺憾的是,人們還沒有找到有效降低癌癥發病率的方法。因此,早期篩查對于降低肺癌死亡率至關重要。由于大部分早期肺癌患者沒有明顯的臨床癥狀,也沒有特異的生物標記物,因此目前早期篩查的主要方法是采用放射影像如電子計算機斷層掃描(computed tomography,CT)來檢查肺部是否存在可疑病灶。早期肺癌大多表現為肺部結節,它們尺寸小、對比度低、形狀異質化高[2]。如果由醫生進行人工篩查,會產生兩個問題:一是人工篩查過分依賴醫生臨床經驗,這不僅需要極高的專業度,還容易受到醫生主觀判斷的影響,準確度無法保證;二是人工讀片工作量巨大,容易造成醫生疲勞,增加誤判和漏判概率。顯然,僅僅依靠醫生人工篩查CT圖像中的肺結節是有困難的。
隨著深度學習的迅速發展,很多研究人員將卷積神經網絡(convolutional neural network,CNN)應用到CT圖像肺結節的檢測中。相比傳統機器視覺方法,深度學習可以自動提取數據的高級抽象特征,輸出特征可以直接用于識別、分類和檢測,自動化程度高,能夠更有效地區分真實結節和非結節,在提高檢測率、降低假陽性率方面獲得了較好的效果。近年來二維卷積神經網絡(two dimensional CNN,2D CNN)已經在肺結節檢測領域取得了巨大的成功。Setio等[3]提出基于多視角的2D CNN,通過提取不同方向平面上的信息和多種不同的融合方法,在降低假陽性率方面取得了良好的效果。Li等[4]提出了一種集成網絡,構建了三個不同輸入大小、不同深度的子網絡分別進行結節檢測,最后融合上述三個子網絡的結果。這一網絡可以直接檢測肺小結節,提高了檢測效率和精度。Zhao等[5]提出了一種新的假陽性減少框架,與單視圖二維神經網絡集成,用于肺結節檢測。這一網絡采用基于分類的肺結節訓練方案,擴展了對代表性肺結節的學習能力。Zhang等[6]提出了通道和空間注意力融合機制(channel and spatial mixed attention CNN,CSANet)。這一方法是在殘差網絡(residual network,ResNet)網絡中的每個階段,分別嵌入通道注意力模塊和空間注意力模塊,從而能夠更準確地定位有用的通道特征和區域特征,提高了圖像目標檢測精度。
但是采用2D CNN檢測肺結節會忽略肺結節的空間特征,影響檢測的準確率。而三維卷積神經網絡(three dimensional CNN,3D CNN)能提取到肺結節的三維特征,可以更好地結合圖像的空間信息。Ding等[7]提出了基于深度卷積神經網絡(deep convolution neural network,DCNN)的肺結節檢測方法,并將反卷積引入到快速區域卷積神經網絡中,用于軸向切片的候選檢測,然后使用3D CNN來降低假陽性,進一步提高檢測速度和精度。Zhu等[8]設計了一個全自動化的肺部CT癌癥診斷系統Deep Lung,設計了一種基于三維雙路徑和編碼器-解碼器結構相結合的快速卷積神經網絡,并設計了與三維雙路徑網絡相結合的梯度增強分類器(gradient boosting machine,GBM),來實現結節的分類。Lin等[9]提出了單階段3D CNN肺結節檢測方法。首先,通過IoU自歸一化方法對分類標簽進行設置,賦予了更多的邊界盒回歸。其次,在分類器中加入maxout單元來處理肺結節類內較大的變化。此外,還引入了焦損失,有效地解決了樣本的難易不平衡問題。Ozdemir等[10]利用檢測和診斷組件之間的耦合,提出了一種基于3D CNN的端到端的CAD系統,使用3D CNN級聯,并通過Monte Carlo dropout和deep ensembles對模型的不確定性進行了表征,在LUNA16和Kaggle數據集上有效實現了肺結節檢測和腫瘤分類任務。
為了進一步提高檢測精度,本文提出了一種基于多尺度注意力機制的3D CNN肺結節檢測網絡(multi scale 3D CNN with channel and spatial attention,MS-CSANet)。在該方法中設計了一個三維多尺度的特征提取模塊,以提取不同尺度的相應特征。通過注意力模塊,從空間和通道的角度挖掘特征間的關聯信息,對特征進行加強。提取出的特征進入類似于金字塔的融合機制,使得特征中同時包含深層的語義信息與淺層的位置信息,更利于目標定位與邊界框回歸。
1 算法設計
1.1 網絡框架
MS-CSANet以3D ResNet-18作為基礎網絡[11]。ResNet是目標檢測領域中常用的骨干網絡,擴展為3D之后也得到了廣泛的應用。本文算法提出的網絡總共有6個stage,每個stage包含多個卷積層。受限于GPU顯存,整張CT圖像無法直接輸入到網絡,因此需要對CT圖像進行分割。首先將預處理后的CT圖像隨機地分割成96 × 96 × 96的立方體[12],然后將其輸入到網絡中,依次經過每個stage提取出特征圖,然后通過每個stage進行下采樣,對應著stage1~5的輸出。MS-CSANet網絡的總體框架結構如圖1所示,預處理流程示意圖如圖2所示,閾值分割大致分割出肺部區域,通過清除邊緣操作來去掉不屬于肺部區域的部分,找出所有連通區域并給它們分配標簽,通過腐蝕操作侵蝕掉前景區域的邊界,之后填補肺內的微小孔洞,最后將得到的掩模與原始圖像進行疊加操作后輸出[13]。
 圖1
				MS-CSANet 總體結構
			
												
				Figure1.
				Overall block diagram of MS-CSANet
						
				圖1
				MS-CSANet 總體結構
			
												
				Figure1.
				Overall block diagram of MS-CSANet
			
								 圖2
				預處理流程示意圖
			
												
				Figure2.
				Schematic diagram of pretreatment process
						
				圖2
				預處理流程示意圖
			
												
				Figure2.
				Schematic diagram of pretreatment process
			
								圖1中僅展示了Resnet-18的最后3個stage。本文算法在這3個stage后添加了多尺度特征模塊和注意力模塊。從第4個stage開始,輸入的圖像先經過原網絡的殘差模塊,之后依次進入多尺度特征模塊和注意力模塊,提取出的特征圖進入類似于金字塔的融合機制,使得特征中同時包含深層的語義信息與淺層的位置信息[14]。融合特征被送入分類和回歸模塊,進行邊界框定位與目標分類。緊接著網絡將會對這3個階段提取的特征圖依次進行預測。本文算法針對不同大小的結節設計了3種錨框,分別為5 × 5 × 5、10 × 10 × 10和20 × 20 × 20。
1.2 多尺度特征提取模塊
由于肺結節的大小和形狀各異,且位置大多是非固定狀態,因此,僅僅使用單一尺度,很有可能丟失部分特征信息,影響檢測效果。卷積核尺寸會決定特征圖感受野的大小。如果感受野過大,會降低模型對微小尺寸肺結節的檢測效果;反之,如果感受野太小,會導致網絡不能很好地獲得全局信息。針對這個問題,本文借鑒Inception結構思想[15],設計了一個多尺度特征模塊,使用不同尺度的卷積核來獲得不同范圍的感受野,從而獲取更加全面的肺結節特征信息,強化了網絡對多尺度的適應性。
為了減輕計算的消耗,提高網絡的性能,本文算法設計的多尺度特征檢測模塊大多采用的是1 × 1 × 1和3 × 3 × 3的小卷積。其中,1 × 1 × 1的卷積可以實現通道數的降維,減少計算量,還可以把在同一個空間位置、不同通道但相關性很高的特征結合起來。而其他尺寸的卷積核,如3 × 3 × 3、5 × 5 × 5卷積,可以保證較大的感受野和特征的多樣性。多尺度特征模塊的具體結構如圖3所示。
 圖3
				多尺度特征模塊結構
			
												
				Figure3.
				Multiscale feature module structure
						
				圖3
				多尺度特征模塊結構
			
												
				Figure3.
				Multiscale feature module structure
			
								多尺度特征模塊由4個大小不同的尺度組成,分別為卷積核1 × 1 × 1、3 × 3 × 3和5 × 5 × 5三個卷積層和一個平均池化層。除了第四層的平均池化層外,其他三個尺度在輸入肺結節的圖像之后會先通過一個1 × 1 × 1的卷積來實現通道數的降維,避免每層計算量過大。第一層使用1 × 1 × 1的小卷積來檢測小尺寸的結節,第二層使用3 × 3 × 3的卷積來檢測中等大小的結節,第三層使用5 × 5 × 5卷積來檢測大尺寸的結節。第四層使用平均池化層來改變輸入的特征排列,降低特征圖的厚度。執行完上述這些步驟后,將各個尺度獲得的特征信息進行融合,并經過歸一化與激活函數,形成新的特征圖。
1.3 注意力模塊
深度神經網絡注意力機制是對人類視覺注意力機制的模仿。從本質上講,它是一種資源分配機制。人眼可以快速掃描全局圖像,找到需要關注的目標區域,然后對這個區域分配更多注意,目的在于獲取更多細節信息和抑制其他無用信息[16]。如果神經網絡在對圖像進行識別時,每次集中于部分特征上,會使得識別更加準確。注意力機制的原理就是在每次識別時,首先計算每個特征的權值,然后對特征進行加權,權值越大,該特征對當前識別的貢獻就越大。這個加權可以作用在空間尺度上,給不同空間區域加權;也可以作用在通道尺度上,給不同通道特征加權,甚至可以給特征圖上的每個元素加權[17]。
基于注意力機制原理,本文算法在3D ResNet-18網絡上添加了一個注意力網絡模塊來使檢測器更加側重于CT圖像中肺結節的特征,從而提高檢測效果。由于卷積運算通過將多通道和空間信息混合在一起提取特征,因此按照通道軸和空間軸進行注意力網絡的設計,這樣每個分支都可以分別在通道和空間軸上學習到分類和定位信息。在肺結節檢測中,注意力模塊重點關注紋理、形態學、CT值等重要特征,并抑制不必要的特征。注意力機制整體結構如圖4所示。
 圖4
				注意力模塊結構
			
												
				Figure4.
				Attention module structure
						
				圖4
				注意力模塊結構
			
												
				Figure4.
				Attention module structure
			
								從第四個stage開始,通過多尺度塊生成的特征圖被輸入到注意力模塊[18]。特征圖首先進入通道注意力模塊,通過平均池化層和最大池化層來對輸入的特征圖進行壓縮,生成平均匯集特征  和最大匯集特征
 和最大匯集特征  ,之后再將
,之后再將  和
 和  輸入到一個由2個DenseLayers構成的共享權重層。將共享權重層輸出的特征進行融合,再經過sigmoid函數激活,生成最終的通道注意[19]
 輸入到一個由2個DenseLayers構成的共享權重層。將共享權重層輸出的特征進行融合,再經過sigmoid函數激活,生成最終的通道注意[19] 。另外,為了減少計算消耗,將隱藏層的激活大小設置為
。另外,為了減少計算消耗,將隱藏層的激活大小設置為  ,r為通道壓縮率。綜上所述,通道注意的總公式為:
,r為通道壓縮率。綜上所述,通道注意的總公式為:
|  | 
其中  為sigmoid函數。空間注意可以看作是對通道注意的補充。在得到通道注意后,將通道注意和輸入的特征圖融合,作為空間注意模塊的輸入特征。空間注意模塊XC的輸入可以用下面這個公式描述:
 為sigmoid函數。空間注意可以看作是對通道注意的補充。在得到通道注意后,將通道注意和輸入的特征圖融合,作為空間注意模塊的輸入特征。空間注意模塊XC的輸入可以用下面這個公式描述:
|  | 
其中, 表示element-wise乘法。為了充分利用通道信息,通過全局平均池化和最大池化操作生成三維特征圖
 表示element-wise乘法。為了充分利用通道信息,通過全局平均池化和最大池化操作生成三維特征圖  和
 和  。然后將它們融合,再通過一個標準的卷積層生成三維空間注意,稱之為
。然后將它們融合,再通過一個標準的卷積層生成三維空間注意,稱之為  [19]。空間上的注意力計算為:
[19]。空間上的注意力計算為:
|  | 
上式中 為卷積核尺寸為3 × 3 × 3的三維卷積。將MC和MS融合,得到整個注意力模塊的輸出,可以用以下公式表示:
為卷積核尺寸為3 × 3 × 3的三維卷積。將MC和MS融合,得到整個注意力模塊的輸出,可以用以下公式表示:
|  | 
1.4 損失函數
損失函數分為兩部分,分類損失Lcls和回歸損失Lreg。對于Lcls使用二分類交叉熵損失函數,對于Lreg使用平滑L1回歸損失函數[19]。訓練時,如果錨框和標注邊框的交并比大于0.5,將其視為陽性樣本;反之,如果錨框與所有標注邊框的交并比都小于0.02,則視其為陰性樣本。其余的忽略不計。對于錨框i的多任務損失函數定義為:
|  | 
其中,λ為0.5,pi為當前錨框i被預測為結節的概率,ti是對應結節的相對坐標,定義為:
|  | 
其中, 是預測的原空間中結節的坐標和直徑,
 是預測的原空間中結節的坐標和直徑, 是錨框i的坐標和尺寸,而標注中結節的坐標定義如下:
 是錨框i的坐標和尺寸,而標注中結節的坐標定義如下:
|  | 
其中, 是標注中結節的坐標和直徑。
是標注中結節的坐標和直徑。
對于Lcls,考慮到使用sigmoid作為激活函數,最終本文算法選擇使用二分類交叉熵損失函數。其定義如下:
|  | 
式中, 為anchor的真值標簽,接著是回歸損失函數。其定義如下:
為anchor的真值標簽,接著是回歸損失函數。其定義如下:
|  | 
對于H,考慮到L2損失函數將會誤差平方化,模型會對單個樣本更加敏感,而L1范數損失函數在0點處導數不存在,可能會影響收斂,最終選擇使用平滑L1損失函數。具體公式如下:
|  | 
其中, 。
。
2 算法實驗
實驗軟硬件環境:Ubuntu16.04,CPU XEON 4110 × 2,GPU NVIDIA Quadro P5000 16GB × 1,內存64 GB。所有實驗都是基于Python的Pytorch深度學習庫來實現。
2.1 數據集
本實驗使用的是LUNA16數據集[20]。該數據集來自一個更大的可公開獲得的肺結節數據庫(Lung Image Database Consortium,LIDC)。LIDC-IDRI共包含1 018張CT掃描,也就是1 018個病例。該數據集中含有醫療數字影像傳輸協定(Digital Imaging and Communications In Medicine,DICOM)的醫學圖像以及四位放射科專家的標注信息,四位專家分兩階段對該數據集進行標注。在第一階段中,每位專家將所識別的病灶信息標記為非結節、小結節(< 3 mm)、大結節(≥ 3 mm)。在第二階段中,每位專家分別對其他三位專家的標注結果進行復審以確定最終的診斷結果。經過兩階段的處理能夠將漏診率降到最低,使該數據集具有更高的參考價值。
在該數據集中還包含了病變程度、病變特征以及其他相關信息。由于個人主觀原因,每位專家對同一切片的標注不盡相同,因此選取了3~4位專家共同標注的結節作為最終的參考標準,再除去非結節以及小結節,最后選擇了包含1 186個結節標簽的888張CT掃描作為實驗數據,構成了LUNA16數據集。LUNA16將這888例CT圖像分為0~9共10個子集,方便進行10折交叉驗證。
2.2 預處理
為了縮小肺結節的檢測范圍,減少工作量并提高肺結節特征提取的效率,需要對LUNA16數據集中原始的肺部CT圖像進行預處理,以實現肺實質分割[21]。首先,加載原始CT數據和數據掩碼,對數據掩碼非零部分進行重采樣,將分辨率統一。LUNA16已經將原始數據處理成亨氏單位(Hounsfield unit,HU),可直接進行下一步。由于人體每個組織都有特定的HU范圍,而肺的HU值在 ? 500左右,因此只保留HU值在 ? 1 200~600內的區域[22]。本文算法認為HU值不在這個范圍的區域與肺部疾病無關,因此為了便于歸一化,將這些區域的數據置為 ? 1 200 HU或600 HU,再將數據歸一化至0~255。之后對掩碼進行膨脹操作,去除肺內的小空洞。再將重采樣后的數據轉化為體素坐標,對其應用新的分辨率。最后,刪除背景區域,分割出肺實質,將預處理后的數據和標簽用數據特定格式.npy格式存儲。
2.3 參數設置
在本文實驗中,將數據集分為訓練集和測試集兩部分,采用10折交叉驗證方法。由于LUNA16數據集已經被分為10個子集,只需每次取其中的9組作為訓練集,剩下的一組則作為測試集,如此循環10次。這樣每次都能使用不同的數據集,既保證了對樣本的充分利用,也保證了結果的準確性。
在訓練中,通過隨機翻轉圖像來進行數據增強,并使用0.75~1.25的比例裁剪,以緩解陽性樣本、陰性樣本不均衡的問題。對于每個fold,總共訓練150個批次。此外,使用SGD對模型進行優化,其中隨機梯度下降的動量為0.9,權重衰減系數設為0.000 1。批處理大小參數受到GPU存儲器的限制設置為6。采用學習率衰減策略,初始學習率設為0.01,當運行到75批次變為0.001,120批次之后為0.000 1。
在測試階段,使用檢測概率閾值 ? 2(在sigmoid函數之前),然后使用IoU閾值為0.1的非極大抑制(non maximal suppression,NMS)。
2.4 評估指標
在肺結節檢測中,陽性代表該目標是結節,陰性代表該目標是非結節。標注為結節,檢測結果也是結節,則該結果為真陽性(true positives,TP);標注為非結節,檢測結果卻是結節,則該結果為假陽性(false positives,FP);標注為結節,檢測結果卻是非結節,則該結果為假陰性(false negatives,FN);標注為非結節,檢測結果也是非結節,則該結果稱為真陰性(true negatives,TN)。本文使用的評估標準與LUNA16比賽相同。根據LUNA16官方的評價標準,本文通過FROC分析來評價模型的肺結節檢測性能,在FROC曲線中,召回率(靈敏度)可以看作是關于每次掃描的平均假陽性個數[23]。靈敏度越高,假陰性就越低,對應的漏診率也就越低。其計算公式如下:
|  | 
使用FROC曲線可以直觀地看到模型的性能,但不能比較出與其他模型之間的性能優劣。為此本文算法引入了CPM[24]指標來分析本文模型與其他模型的性能差異。CPM被定義為不同單次掃描平均假陽性數量所對應的平均靈敏度,其中單次掃描平均假陽性數量的取值分別為0.125、0.25、0.5、1、2、4和8。CPM得分代表了檢測肺結節中召回率和可容忍假陽性個數的綜合指標,CPM得分越高,模型的性能越好。其計算公式如下:
|  | 
式中,N的值為7, 代表單次掃描平均假陽性數量,
 代表單次掃描平均假陽性數量, 表示對應的
 表示對應的  時的靈敏度。
 時的靈敏度。
2.5 實驗結果及分析
為了直觀地展示本文算法模型的性能,實驗中繪制了MS-CSANet(3DRes18 + MSB + CBAM)的FROC曲線圖,如圖5所示。該方法的CPM值為0.844,證明了本文算法在Res18基礎上添加的多尺度特征塊和注意力模塊的有效性。
 圖5
				MS-CSANet 的 FROC 曲線
			
												
				Figure5.
				FROC curve of MS-CSANet
						
				圖5
				MS-CSANet 的 FROC 曲線
			
												
				Figure5.
				FROC curve of MS-CSANet
			
								將本文算法與近期主流算法進行了比對,如表1[9,25-33]所示。從表中可以看出,本文算法在LUNA16數據集上取得了良好結果。本文算法的CPM得分略高于次優的Bray等[27]所提出的Deep Lung系統。另外,在假陽性率為0.5和1的情況下,本文算法的靈敏度分別是0.826、0.871,在所有算法中最高。
 表1
                在 LUNA16 數據集上與主流算法性能的比較
		 	
		 			 				Table1.
    			Performance comparison with mainstream algorithms on LUNA16 data set
			
						表1
                在 LUNA16 數據集上與主流算法性能的比較
		 	
		 			 				Table1.
    			Performance comparison with mainstream algorithms on LUNA16 data set
       		
       				算法檢測效果的展示如圖6所示。圖中展示了部分樣本,其中檢測出的肺結節用白色矩形框標識,圖片下方的P值代表被預測為肺結節的概率。此處,本文還給出了10折測試單張CT處理所需平均時間的結果(見表2)。
 圖6
				部分檢測結果展示
			
												
				Figure6.
				Display of some test results
						
				圖6
				部分檢測結果展示
			
												
				Figure6.
				Display of some test results
			
								 表2
                10折測試單張CT處理所需平均時間
		 	
		 			 				Table2.
    			Time required for single CT image processing in 10   folds test
			
						表2
                10折測試單張CT處理所需平均時間
		 	
		 			 				Table2.
    			Time required for single CT image processing in 10   folds test
       		
       				2.6 消融實驗
實驗采用多尺度特征模塊和注意力模塊來提高網絡的檢測精度。為此,在LUNA數據集上進行了消融實驗[34]。
消融實驗從不添加任何模塊、只添加一個模塊(多尺度特征模塊或者注意力模塊)以及添加兩個模塊時兩個模塊添加的位置等角度分別進行,結果如表3所示。從表3中可以看出,當不添加任何模塊時,CPM得分為0.834。當在殘差模塊之后加上多尺度特征塊后,CPM得分提高到了0.835,模型的檢測精度略微提升。當在殘差模塊之后加上注意力模塊后,CPM得分達到了0.841,提升較為明顯,說明在網絡開始關注通道維度和空間維度上的相關性并結合了兩個維度上的信息后,更有利于對肺結節的檢測。當在殘差模塊之后依次通過注意力模塊和多尺度塊之后,CPM得分為0.837,比只加多尺度塊略好但比只加注意力模塊差不少。相反,如果先通過多尺度塊而后通過注意力模塊,CPM得分達到了0.844,比其他的得分都要高。說明先通過多尺度塊再通過注意力模塊,更能充分發揮特征之間的關聯信息,達到較好的檢測效果。
 表3
                消融實驗結果
		 	
		 			 				Table3.
    			Ablation results
			
						表3
                消融實驗結果
		 	
		 			 				Table3.
    			Ablation results
       		
       				3 結論
本文提出了基于多尺度注意力機制的3D CNN肺結節檢測算法,稱之為MS-CSANet。首先,針對肺結節大小和形狀各異的特點,設計了一個多尺度的特征提取塊,來提取不同尺度的相應特征。然后,通過注意力模塊,從空間和通道的角度挖掘特征間的關聯信息,對特征進行加強。提取出的特征將進入類似于金字塔的融合機制,使得特征中同時包含深層的紋理信息與淺層的位置信息,以獲得更好的特征定位與分類。最后,從實驗的角度,通過消融研究和實驗對比,驗證了所提出的肺結節檢測方法的各個模塊和整體模型的性能。根據在LUNA16數據集上的實驗結果可以得出結論,與現有的同類技術方法相比,本文模型的結果更加有效。
重要聲明
利益沖突聲明:本文全體作者均聲明不存在利益沖突。
作者貢獻聲明:萬洪林負責數據分析與算法設計,趙宇督負責算法編程與文章撰寫,彭振偉負責實驗結果的采集與整理,馬駿負責數據預處理,夏浩負責實驗環境的搭建與調試。
 
        

 
                 
				 
																   	
                                                                    
                                                                    
																	 
																   	
                                                                    
                                                                    
																	 
																   	
                                                                    
                                                                    
																	 
																   	
                                                                    
                                                                    
																	 
																   	
                                                                    
                                                                    
																	 
                                                                    
                                                                        
                                                                        
                                                                        