連先峰 劉志勇,2* 張 琳 韓雨晨 史國梅
1(東北師范大學信息科學與技術學院 吉林 長春 130117) 2(東北師范大學教育部數字化學習支撐技術工程研究中心 吉林 長春 130117) 3(吉林大學軟件學院 吉林 長春 130012)
2018年,國際糖尿病聯盟(IDF)發布的第8版糖尿病地圖數據以及《2018—2024年中國糖尿病藥物行業分析與投資決策咨詢報告》顯示:2017年,全球約有4.25億人患有糖尿病,其中我國約為1.14億,位列第一。2017年“中國糖網篩防工程”研究中心調研報告指出,我國糖尿病人群中糖網(糖尿病性視網膜)患病率為25%~47%,平均在30%左右,這也意味著中國有3 000萬~3 500萬人口患此疾病。研究表明,糖尿病性視網膜患者失明概率比正常人高25倍。由于發病初期眼底視網膜血管圖像特征變化不明顯,且存在人工識別病變圖像費時費力、準確率不高、主觀性強等問題,以至于該疾病的篩查率不足10%,延誤了患者的最佳治療時機。針對以上問題,我們迫切需要建立一個糖尿病性視網膜病變圖像識別模型,高效且準確地識別病變圖像,讓患者在發病初期得到有效治療。
從2012年至今,深度學習[1]在世界上獲得突破性進展,其中圖像識別成為廣大專家和學者的熱門研究點。李瓊等[2]以Alex-Net[3]網絡模型為基礎,通過在每個卷積層和全連接層前引入批歸一化層得到結構更復雜的卷積神經網絡BN-Net。該模型將糖尿病性視網膜圖像按照病變程度分為5類,準確率達到93%。但該方法在圖像預處理、特征提取和圖像分類3個階段中并未形成一個完整的系統,且Alex-Net網絡結構也有待進一步優化。丁蓬莉等[4]通過設計緊湊的Compact-Net網絡模型,分類指標達到87%。但此網絡結構對病變圖像特征提取不完整,沒有融合各網絡層特征,且魯棒性不高。梁平等[6]綜述了基于局部病灶、全局圖像的識別方法,同時分析了常用數據集、各類方法優缺點和識別性能,但并未涉及對神經網絡結構的優化。曹桂銘等[7]提出了基于棧式稀疏自編碼器的眼底圖像特征提取及圖像識別的方法,該方法采用逐層貪婪訓練法從無標簽的數據集中學習到數據的內部特征,將學習到的特征作為Softmax分類器的輸入,識別精度達到89%。但文中數據集容量較小,使用機器學習訓練出來的模型自適應性不強。何雪英等[8]采用遷移學習優化卷積神經網絡結構,識別率達到91%。但遷移學習具有難于求解、容易發生過適配等問題。
針對以上問題,本文提出一種基于特征融合的深度學習圖像識別方法。主要工作有以下3個方面:
(1) 構建了包含128 339幅眼底圖像的數據集,數據集初始來源于5個公開眼底圖像數據庫,共計30 571幅眼底圖像。初始數據集經擴充、統一化處理成為新的數據集。在新數據集上訓練模型,使模型獲得良好的魯棒性和泛化能力。
(2) 優化了網絡結構,并調整網絡權重初始化的取值和學習率,提升模型的識別性能。
(3) 設置了對比實驗,驗證該網絡模型相較于Alex-Net等常規模型,能夠表現出更好的識別效果。
實驗所用初始數據來自一些大學以及競賽平臺,主要包含5個數據集,共計眼底圖像30 571幅,其中正常圖像13 615幅,病變圖像16 956幅,詳見表1。

表1 初始數據集
初始數據集的分辨率、顏色、格式、拍攝相機、拍攝角度等屬性信息如表2所示。

表2 初始數據集屬性表
由于初始數據分辨率大小不一,為適應模型訓練,使用OpenCV對眼底圖像作統一化和增強化處理。以下為具體操作步驟:
(1) 使用OpenCV中resize()方法將眼底圖像分辨率統一縮小為64×64×3。
(2) 將數據集分為兩大部分,分別記為Data1和DataFinal。其中Data1占80%,向上取整約有24 457幅眼底圖像,用于擴充數據集;DataFinal占20%,約6 114幅眼底圖像,用于模型最終測試。
(3) 將Data1使用OpenCV中的getAffineTransform函數、getPerspectiveTransform函數和warpPerspective函數進行仿射變換,使用flip函數上下左右翻轉等幾種方式將數據集擴充為原來的5倍,得到新的Data1,包含122 285幅眼底圖像。
(4) 將Data1分為兩部分,分別記為DataTrain和DataTest。其中:DataTrain占80%,向上取整有97 828幅眼底圖像,用于訓練模型;DataTest占20%,共24 457幅眼底圖像,用于測試模型。表3是分類后的實驗數據集。

表3 實驗數據集
圖1是經過處理后的部分圖像示例。

(a) 正常圖像 (b) 病變圖像 (c) 加噪圖像 (d) 增強亮度圖像 (e) 仿射變換圖像圖1 部分圖像數據集
反向傳播算法[9]是目前用來訓練人工神經網絡[10](Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:(1) 將DataTrain數據輸入到ANN的輸入層,經過隱藏層,最后到達輸出層并輸出結果;(2) 計算輸出結果與真實值之間的誤差,并將該誤差從輸出層向隱藏層反向傳播,直至輸入層;(3) 在反向傳播的過程中,根據誤差調整各種權重的值。迭代上述過程,直至收斂。

(1)
(2)
(3)
用hW,b(x)計算輸出結果:
(4)
給定一個包含m個樣本數據集M={(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},則神經網絡整體損失函數可表示為:
(5)
式中:W、b分別表示權重參數和偏置項;λ為權重衰減因子。使用隨機梯度下降算法[11]更新網絡中的權重和偏置項,公式如下:
(6)
(7)

2.2.1模型設計
鑒于VGG-16[12]網絡結構規整、參數量較少、分類性能較好等特點,實驗以VGG-16為基礎模型,通過融合各卷積層上提取的特征,進一步優化模型。圖2為改進后的網絡模型。

圖2 優化后的實驗模型
特征融合有concat和add兩種方式:concat方式是將圖像的通道數合并,即圖像本身的特征數(通道數)增加,特征信息沒有增加;add方式是將圖像對應的特征信息相加,通道數不變,之后進一步執行卷積操作。由于每個輸出上的卷積核各自獨立,可只看單個通道的輸出。給定兩路通道分別記為X1,X2,…,XC和Y1,Y2,…,YC,兩種特征融合方式的計算公式為:
(8)
(9)
式中:K表示卷積核;*表示卷積。由于concat相比add方式需要更多的參數,且特征融合之后生成的維度更高,計算量較大,負載重,故在二者優勢相當的情況下,本實驗采用add方式的特征融合。
Softmax層的分類過程表示為:
(10)

2.2.2網絡參數
模型中有5個Convolution層、5個Maxpool層、1個Feature Fusion層、2個Full Connection層和1個Softmax層,輸入圖像大小為64×64×3。其中Cov1、Cov2、Cov3、Cov4、Cov5中的Filter個數分別為64、128、256、512、512。Filter尺寸為3×3×3,Filter stride為1。Maxpool層中Filter尺寸為2×2×3,Filter stride為2。2個Full connection層的維度分別為8 192和4 096。Softmax層的輸出分為2類,分別代表正常眼底圖像和病變眼底圖像。表4為模型中參數變化情況。

表4 實驗模型參數
2.2.3模型優化設計
為防止網絡模型訓練過程中易出現過擬合的問題,實驗采用Dropout技術[13]。Dropout的工作原理是按照一定的概率隨機斷開一些網絡連接,保留網絡層的權重。由于被斷開的網絡連接的輸出值為0,所以該連接相當于被舍棄,達到降低模型過擬合的目的。網絡計算過程如下:
Youtput=f(Xinput×Bernoulli(p)+bbias)
(11)
式中:Xinput、Youtput分別表示網絡層的輸入和輸出;Bernoulli(p)表示以概率p隨機生成的由0和1組成的向量;bbias表示偏置項。本實驗模型在FC1和FC2兩個全連接層上使用了Dropout技術,根據文獻[13]中的結論,Dropout丟失率p的取值范圍為0.10至0.50,被保留下來神經元的概率為q=1-p。實驗經過多次嘗試,設置p=0.30時效果最佳。
ReLU是神經網絡中常用的激活函數,可以將網絡層計算的線性關系轉換為非線性,從而構建真正意義上的神經網絡,且具有收斂快、泛化性好等特點。公式如下:

(12)
2.2.4模型訓練步驟
基于VGG-16的特征融合眼底病變圖像識別模型訓練步驟如下:
1) 輸入預處理之后分辨率為64×64×3的標準眼底圖像,并初始化網絡權重、偏置項和學習率值。
2) 設置1個訓練樣本batch的值為30,最大迭代次數為3 000次,使用隨機梯度下降算法,不斷更新和的值。
3) 根據反向傳播算法,計算輸出值與真實值之間的誤差值,不斷調整和的值。當迭代次數達到設置的最大次數時,訓練結束。
4) 返回步驟2),循環訓練模型,直到參數達到最優。
5) 將訓練好的模型在眼底圖像測試集上做分類測試,驗證其識別效果。
實驗模型是將數據集分為正常眼底圖像和病變眼底圖像,針對二分類問題,常用的模型評估標準是F1-score。該標準由準確率precision和召回率recall通過進一步計算得到,使模型評估更加穩定、可靠。相關計算公式如下:
(13)
(14)
(15)
式中:TP表示正確分類的正樣本的數量;FP表示負樣本中錯誤標記為正樣本的數量;FN表示正樣本中錯誤標記為負樣本的數量。F1-score的取值在[0,1]之間,值越大,分類效果越好。
硬件配置:Inter(R) Core(TM) i7-3770 CPU@ 3.40 GHz;8 GB內存;NVIDIA GeForce GTX1060 3 GB顯卡。
軟件配置:Windows 10 64位操作系統;Python 3.5.6編程語言;TensorFlow 1.0[14]深度學習框架。
根據數據預處理的結果,用于訓練、測試、最終測試模型的DataTrain、DataTest和DataFinal分別包含97 828、24 457和6 114幅眼底圖像。
3.3.1Loss和Accuracy的變化情況
實驗過程中設置DataTrain的每個batch的值為30,最大迭代次數為3 000次。權重的初始化服從標準差為0.01、均值為0.1的截斷正態分布,避免了使用正態分布使權重出現過低或過高的情況。損失函數中權重衰減因子的值為0.1。本實驗由于數據量較大,迭代次數較多,為加快損失函數的收斂速度,初始學習率為0.07。根據鐘志權等[15]在左右眼圖像識別中的結論,本實驗使用Softmax分類器。隨著迭代次數的不斷增多,Loss和Accuracy的變化曲線如圖3所示。

圖3 Loss和Accuracy的變化曲線
當訓練次數接近1 000輪時,Loss的值從1.0降至0.18,Accuracy的值由0升至0.82,變化幅度最大,這是隨機梯度下降算法通過計算損失函數方向導數的值,不斷尋求最快下降點的緣故。當訓練次數在1 000輪和接近1 750輪之間時,Loss和Accuracy的值出現小幅度波動,其波動范圍分別在[0.06,0.27]和[0.73,0.94]之間,這是隨機梯度下降算法得到局部最優解造成的。當進行1 750輪訓練之后,損失函數Loss的值收斂于0.06左右,Accuracy的值也穩定在0.94。以上結果表明,實驗模型對圖像識別的效果較為理想。
3.3.2模型對比實驗
模型在數據集DataTest和DataFinal上的識別情況如表5所示。

表5 模型在測試數據集上的識別情況
由表5可知,模型在DataTest和DataFinal上的識別準確率分別為91.16%和94.41%,后者相較于前者高出3.25個百分點。原因是訓練模型使用的是經過5種方式擴充后的數據集DataTrain,該數據集中眼底圖像特征較多,訓練出的模型泛化能力更強。另外,實驗通過融合各卷積層上的特征,使模型對眼底圖像的細微特征更加敏感,在特征相對較少的DataFinal上識別效果更優,魯棒性較好。
為進一步驗證本實驗算法的圖像識別效果,設置了與Alex-Net、Google-Net[16]、ResNet-101[17]等常規算法及文獻[4]中Compact-Net算法的對比實驗。實驗在數據集DataTest和DataFinal上F1-score的值及在兩數據集上的平均準確率如表6所示。

表6 不同網絡模型的F1-score值對比結果 %
本文算法在DataTest上的F1-score值為92.34%,相較于Alex-Net、Google-Net、Compact-Net算法分別提高了9.11、6.00和4.99個百分點,在相同數據集的情況下,本文通過特征融合優化網絡結構,增強了算法對眼底圖像的特征提取能力和識別能力。在DataFinal上,本文算法的F1-score值相較于Alex-Net、Google-Net、Compact-Net、ResNet-101分別提高了12.01、9.60、7.03和3.02個百分點,表現效果最好,即在實際應用中,算法達到了預期要求。本文算法的平均準確率為94.23%,相較于其他4種算法,分別提高了10.56、7.80、6.01和0.02個百分點,驗證了本文算法在對眼底圖像識別上是非常有效的。
本文算法和ResNet-101的平均準確率分別為94.23%和94.21%,十分接近。原因是ResNet-101使用了101層網絡結構,通常更深的網絡結構,圖像識別效果更好。本實驗是基于VGG-16的16層網絡結構,所以在DataTest下,ResNet-101的F1-score值比本文算法高出了2.98%。但本實驗網絡結構相對簡單,參數較少,訓練更快,同時說明了經過特征融合的16層網絡結構達到了更深網絡結構的分類效果。
本文通過實驗驗證了算法的魯棒性。為保證單一變量,從DataTest中隨機選取與DataFinal相同數量的眼底圖像,記為DataTest*。算法在DataTest*和DataFinal上F1-score的差值(DataFinal_F1-score-DataTest*_F1-score)如表7所示。

表7 算法在DataTest*和DataFinal上F1-score的差值 %
差值表示算法在測試集與原始數據集上識別效果的差異,其大小在一定程度上反映了算法魯棒性的好壞。差值越大,魯棒性相對越好。由表7可知,ResNet-101、Google-Net、Alex-Net、Compact-Net和本文算法的差值分別為0.05%、0.14%、0.76%、1.65%、2.01%。可以看出,本文算法的魯棒性相對較好,ResNet-101的魯棒性最差。
3.3.3特征可視化分析
卷積神經網絡的圖像特征提取過程及特征融合如圖4所示。由圖可知,在Cov1_1、Cov_2、Cov1_3層提取了原始圖像的大部分特征信息,Cov2_1、Cov2_2和Cov2_3中只保留了原始圖像的邊緣輪廓。隨著網絡深度的不斷增加,Cov3_1、Cov3_2、Cov3_3、Cov4_1、Cov4_2、Cov4_3更多地提取了圖像的線條和輪廓,而Cov5_1只提取了原始圖像的高階特征信息。通過以上卷積過程可發現,不同卷積核可提取到不同的特征,網絡層數越深,卷積核提取到的特征越抽象。特征融合作為全連接層FC1的輸入層,融合了各卷積層上的特征。通過分析卷積神經網絡的工作原理,可為以后模型的優化提供幫助。

圖4 卷積過程部分圖像特征可視化
3.3.4圖像錯分類原因分析
本文算法的錯誤識別率在5.77%左右,部分識別錯誤的圖像如圖5所示。

(a) 正常圖像(b) 病變圖像(c) 病變圖像(d) 病變圖像圖5 眼底圖像錯誤識別示例
圖5(b)作為對比圖片,是已經標注為含有血斑的病變眼底圖像。圖5(a)的標注為正常眼底圖像,由于圖像色彩的原因,算法誤將圖5(a)中的黃斑識別為圖5(b)中的血斑,以致算法將圖5(a)判定為病變眼底圖像。圖5(c)和圖5(d)的標注為病變眼底圖像,同樣算法將圖5(c)和圖5(d)中的血斑識別為黃斑,從而將其判定為正常眼底圖像。根據以上結果,圖像的色彩對算法的識別過程造成了一定的干擾,致使算法識別錯誤。
本文針對糖尿病性視網膜發病初期特征不明顯、人工識別病變圖像困難、準確率不高等問題,提出了一種基于卷積神經網絡的眼底圖像識別方法。該方法在VGG-16網絡結構的基礎上,通過融合各卷積層上的特征,使模型對病變眼底圖像的細微特征更加敏感。為了進一步優化模型,使用ReLU函數加快網絡中參數的收斂,并在兩個全連接層上使用Dropout技術,使模型識別圖像的平均準確率達到94.23%,與常規算法Alex-net、Google-net、Resnet-101和文獻[4]中Compact-net方法相比,分別提高了10.56%、7.80%、0.02%和6.01%,驗證了該方法的有效性。
由于實驗數據集使用的是RGB格式的圖像,以致色彩對圖像識別造成了一定的影響。下一階段的工作是對眼底圖像數據做二值灰度處理,并根據眼底圖像病變的程度劃分不同的等級,做更加細致的分類;使用基于判別區域的網絡結構算法,進一步提高模型識別準確率。