黃文博,黃鈺翔,姚遠,燕楊
(1.長春師范大學 計算機科學與技術學院,吉林 長春 130032;2.中國科學院重大任務局,北京 100864)
視網膜病變會導致患者視物模糊、視力下降甚至失明[1],由于缺少自動識別與分級系統,大量診斷工作主要由專家人工操作,因此基于深度學習方法的視網膜病變自動識別與分級成為研究熱點[2]。
國內外學者對視網膜病變自動分級方法展開了較為深入的研究。Xu等[3]采用卷積神經網絡(Convolutional Neural Network,CNN)將視網膜病變圖像分類。Jiang等[4]通過預訓練3個不同的CNN網絡,通過Adaboost方法將預訓練的模型融合實現視網膜病變識別。以上兩種模型僅對患者是否存在視網膜病變進行判定,未得到具體的病變分級結果。目前,視網膜病變自動分級的方法較多,以CNN為基礎模型進行改進或與其他方法相結合。Li等[5]提出了基于CNN的遷移學習方法,結合支持向量機(Support Vector Machine,SVM)實現視網膜病變分級。韋哲[6]提出利用基于遷移學習的Xception[7]模型實現視網膜病變分級。王嘉良[8]提出了基于目標檢測的區域全卷積網絡(Region-based Fully Convolutional Networks,R-FCN)算法,通過檢測血管瘤、眼底出血及玻璃體出血等病變區域,實現對視網膜病變的圖像分級。Lin等[9]提出了抗噪聲檢測和注意力融合的視網膜病變檢測模型。鄭雯[10]引入空洞卷積代替普通卷積并融合注意力機制實現了視網膜病變分級。這些方法基本解決了視網膜病變分級問題中視盤區域對病灶識別的干擾問題,但由于視網膜微血管的類間圖像特征差別小,分級的特征臨界值相對模糊,現有視網膜病變分級算法仍存在分級準確率較低、模型能力受限等問題,因此目前視網膜病變分級仍然是一項具有挑戰性的工作[11]。
本文提出一種基于ConvNeXt網絡的視網膜病變自動識別與分級方法。ConvNeXt網絡使用余弦下降法動態調整學習率。針對訓練網絡帶標記的眼底圖像數據不足,導致ConvNeXt網絡在訓練的過程中分級精度較低的問題,通過圖像增強和引入額外數據集的方法解決數據分布不均衡問題。針對類間圖像特征差別小導致的低精度問題,采用遷移學習法訓練模型中所有層權重,設計了能夠提取更深層次特征的E-Block模塊,添加到ConvNeXt網絡模型中,避免參數降維,有效捕捉跨通道交互信息,顯著提升了模型的準確率。
本文的主體數據集采用APTOS 2019 Blindness Detection競賽數據集。該數據集采用國際視網膜病變分級標準,依據視網膜病變的嚴重程度將圖片分為5個等級,如圖1所示。其中,0級為正常,1級為輕度病變,2級為中度病變,3級為重度病變,4級為增殖性視網膜病變。通過觀測數據集中各類數據的分布,可發現APTOS2019數據集存在嚴重的數據不均衡情況,導致模型更多關注樣本多的類別,忽略樣本少的類別,訓練效果不理想。因此,這里引入由EyePACS平臺提供的Kaggle(2015)競賽數據集和IDRiD(Indian Diabetic Retinopathy Image Dataset)數 據 集??紤]到圖像的采集環境,首先要對數據集進行清理,清理掉因受拍攝環境影響而出現的圖像顯示不正常和噪聲太大的數據,如圖2所示。通過數據增強對數據量較少的類別(主要針對等級3和等級4)進行數據擴充,采用水平翻轉、左右變換等方法擴充數據集,使得每個類別的圖像數量相對均衡,最終構建成本文的實驗數據集,共10 041幅圖像,各類別圖像數如表1所示。

圖1 APTOS 2019 Blindness Detection數據集示例Fig.1 Examples of APTOS 2019 blindness detection dataset sample

圖2 清理掉的圖像示例Fig.2 Examples of cleaned up images

表1 數據集擴充前后對比Tab.1 Comparison before and after dataset expansion
由于數據集中多數眼底圖像的對比度比較低,病灶區域和非病灶區域不容易區分,使得病變特征不易檢測。另外,受制于眼底圖像的拍攝環境及成像設備的性能,數據集中的圖像出現不同程度的圖像模糊、照明不均等問題。為了得到更好的訓練效果,本文使用Graham方法[12]對圖像進行預處理,減輕因不同照明條件或成像設備而產生的問題。給定一張眼底圖像I,經Graham方法處理后的圖像?為:

其中:G(θ)是具有標準差θ的2D高斯濾波器,*是卷積算子,α,β和γ是加權因子。

圖3 預處理前后圖像對比Fig.3 Comparison of images before and after preprocessing
采用中心裁剪法去掉圖像中含有無用信息的黑色區域,如圖3所示。處理后的圖像裁剪掉了無關區域,提亮了眼球邊緣的暗部區域,出血點、絮狀物、滲出物和血管等重要特征更加突出。在訓練時還引入了隨機裁剪、隨機透視變換和高斯濾波等方法對圖像進行特征增強。
視網膜病變圖像分類的難點主要是不同類別圖像的病變特征差距很小且重疊率高,屬于細粒度圖像分類的范疇,是對大類下的子類進行分類,只有向神經網絡輸送大量的圖像信息才能挖掘到更深層次的特征。本文搭建的ConvNeXt網絡結構如圖4所示,詳細參數信息如表2所示。選擇ConvNeXt-T網絡作為基礎網絡,與Transfrom網絡[13]相比,ConvNext網絡不需要進行分塊合并、窗口偏移和相對位置偏執等操作,具有更好的性能和更少的計算量。ConvNext網絡的 整 體 結 構 與ResNet[14]類 似,在Block的 堆 疊次數設計上參考了Transformer網絡。本網絡主要由卷積層、E-Block層和線性層3部分組成。其中,E-Block層是本網絡的核心部分,負責提取視網膜圖像的特征,E-Block層1至E-Block層3由E-Block模塊和下采樣模塊組成,E-Block層4由E-Block模塊和全局平均池化層組成,EBlock層1至E-Block層4的堆疊次數分別為(3,3,9,3),延續使用ConvNeXt-T網絡結構堆疊次數設置。
在ConvNeXt模型中,首先將經過預處理的視網膜圖像輸入模型,在第一部分對圖像使用4×4的卷積核進行卷積處理,設置步距為4,經過層歸一化(Layer Normalization,LN)處理后進入第二部分的E-Block層,最后在第三部分的線性層輸出模型的預測結果。

表2 ConvNeXt網絡結構詳細信息Tab.2 ConvNeXt network structure details

圖4 本文ConvNeXt網絡的結構模型Fig.4 Structure model of proposed ConvNeXt
理論上模型的網絡深度越深,其性能就會越好,但是大量實驗表明,盲目地加深網絡的深度會適得其反,造成“退化”現象。針對這個問題,何凱明等[14]在ResNet網絡的設計中提出了殘差單元結構,殘差單元將經過處理的參數與原參數相加,解決了網絡的退化問題。本文基于殘差基本思想提出了E-Block結構。E-Block結構設計如圖5所示,相比于經典卷積方法,深度可分離卷積(Depthwise Separable Convolution,DSC)可在保留大卷積核的基礎上減少參數量并加速模型訓練。因此,本文首先利用DSC減少參數,加速模型訓練。在DSC中,每個卷積核的通道數都等于1,每個卷積核只負責輸入特征矩陣的一個通道數,所以卷積核的個數必須等于輸入特征矩陣的通道數,從而使得輸出特征矩陣的通道數等于輸入特征矩陣的通道數;然后,通過兩個1×1的卷積核來調整輸出特征矩陣的通道數,再將調整后的特征輸入到高效通道注意力模塊(Efficient Channel Attention,ECA),進一步提取深層次特征;最后,為了防止模型出現過擬合現象,提高模型的泛化能力,設置了一個Dropout層和一個DropPath層。Dropout法通過隨機刪除神經元的方式來減少神經元之間的協同性,它強迫一個神經單元和隨機挑選出來的其他神經單元共同工作。DropPath層的作用與Dropout層類似,不同的是DropPath法會將模型中的主分支結構按幾率失活,即DropPath以一定的概率將主結構的輸出變為0,等價于只有捷徑分支構成輸出。

圖5 E-Block結構Fig.5 E-Block structure

圖6 ECA模塊結構Fig.6 ECA module structure
ECA模塊通過不降維的局部跨信道交互策略和自適應選擇一維卷積來實現。該模塊可在只引入少量參數的情況下獲得明顯的性能提升,如圖6所示。通過全局平均池化,將每個通道上對應的空間信息(H*W)壓縮到對應通道中變為1個具體數值,此時一個像素表示一個通道,最終變為1×1×c,形成一個向量。隨后,通過一個卷積核尺寸為k的一維卷積對該向量進行特征提取,得到權重信息。在獲得權重信息的過程中,通過參數k來控制第0~k個通道參與計算,這樣就得到了第一個通道的權值。卷積核向下滑動1格,控制第1~k+1個通道參與計算,這樣便實現了局部跨通道交互,再通過卷積核滑動依次算出所有通道的權重信息。最后,將計算出的權重信息與對應通道的特征像素相乘就完成了特征圖的重校驗。為了避免在交叉驗證時手動調整參數k,ECA模塊以自適應方式來確定k值,見式(2)~式(4),其中,交互的覆蓋范圍(卷積核尺寸為k)與通道維度成正比。
假設在k和C之間存在映射φ:

由φ(k)=γ*k-b可知,其中γ=2,b=1,線性函數是最簡單的映射方式,但是以線性函數為特征的關系非常有限。由于通道維數C通常是2的指數倍,因此通過將線性函數φ(k)=γ*k-b拓展到非線性函數來解決這個問題:

給定通道維數C后可得:


圖7 不同方法視網膜病變分級混淆矩陣Fig.7 Classification confusion matrix of retinopathy for each model
實驗在Pytorch深度學習框架下搭建,實驗環境為python 3.8,pytorch 1.10,cuda 10.2。把數據集中,80%的圖像劃分為訓練集,20%的圖像劃分為測試集。使用自定義學習率LambdaLR=6×10-4,warmup=10,在 達 到最大學 習率后采用余弦下降法動態調整學習率,優化器為AdamW,訓練epoch=200,batch_size=64。本文使用遷移學習法,將ConvNeXt網絡在ImageNet_1k上訓練好的權重作為本文網絡模型的初始權重。
本文模型利用靈敏度(Sensitivity)、特異度(Specificity)和準確率(Accuracy)這3個指標來評估性能,主要由TP(True Positive)、FP(False Negative)、FN(False Negative)和TN(True Negative)4個基礎指標計算,即:


表3 不同算法的視網膜病變分級結果Tab.3 Results of diabetic retinopathy grading by different algorithms (%)
由表3可見,使用ConvNeXt網絡訓練擴充后的數據集相比擴充前各項指標均有提高,由此證明了本文數據均衡方法的有效性。使用本文方法訓練Densenet網絡和Shufflenet網絡均取得了較好的分類結果,證明本文的訓練策略具有優秀的魯棒性。由于CBAM(Convolutional Block Attention Module)機制有助于網絡提取更深層次的特征信息,所以本文在ConvNeXt網絡中引入了CBAM注意力模塊。實驗結果表明,CBAM機制的引入與原ConvNeXt網絡的表現幾乎沒有差別,其原因是引入CBAM的同時增加了更多參數,網絡更加復雜,計算量增大,結果不如預期。本文還比較了SE(Squeezeand-Excitation)通道注意力對網絡的影響。實驗結果表明,加入ECA模塊的網絡兼具通道注意力參數少、輕量化的優點,性能更好。改進的ConvNeXt網絡的3項評價指標都在95%以上,對比其他算法,各項指標均有顯著的提高且各項指標之間的參數差較小,說明本文設計的網絡性能更穩定。
本文提出了一種結合E-block模塊的改進ConvNeXt視網膜病變自動分級模型。利用遷移學習方法在訓練時提高了模型訓練速度,加快了模型收斂;改進模型的殘差結構并設計具有高性能、低參數特性的E-block模塊,避免參數降維,有效捕捉跨通道交互信息,在只增加少量參數的情況下獲取到更多的圖像細節,提升了模型準確率。實驗結果表明,本文模型對視網膜病變的識別與分級敏感性為95.20%、特異度為98.80%,準確率為95.21%,各項指標均有顯著提高,可為臨床提供借鑒。