連先峰 劉志勇,2* 張 琳 韓雨晨 史國梅
1(東北師范大學(xué)信息科學(xué)與技術(shù)學(xué)院 吉林 長春 130117) 2(東北師范大學(xué)教育部數(shù)字化學(xué)習(xí)支撐技術(shù)工程研究中心 吉林 長春 130117) 3(吉林大學(xué)軟件學(xué)院 吉林 長春 130012)
2018年,國際糖尿病聯(lián)盟(IDF)發(fā)布的第8版糖尿病地圖數(shù)據(jù)以及《2018—2024年中國糖尿病藥物行業(yè)分析與投資決策咨詢報告》顯示:2017年,全球約有4.25億人患有糖尿病,其中我國約為1.14億,位列第一。2017年“中國糖網(wǎng)篩防工程”研究中心調(diào)研報告指出,我國糖尿病人群中糖網(wǎng)(糖尿病性視網(wǎng)膜)患病率為25%~47%,平均在30%左右,這也意味著中國有3 000萬~3 500萬人口患此疾病。研究表明,糖尿病性視網(wǎng)膜患者失明概率比正常人高25倍。由于發(fā)病初期眼底視網(wǎng)膜血管圖像特征變化不明顯,且存在人工識別病變圖像費時費力、準(zhǔn)確率不高、主觀性強等問題,以至于該疾病的篩查率不足10%,延誤了患者的最佳治療時機。針對以上問題,我們迫切需要建立一個糖尿病性視網(wǎng)膜病變圖像識別模型,高效且準(zhǔn)確地識別病變圖像,讓患者在發(fā)病初期得到有效治療。
從2012年至今,深度學(xué)習(xí)[1]在世界上獲得突破性進展,其中圖像識別成為廣大專家和學(xué)者的熱門研究點。李瓊等[2]以Alex-Net[3]網(wǎng)絡(luò)模型為基礎(chǔ),通過在每個卷積層和全連接層前引入批歸一化層得到結(jié)構(gòu)更復(fù)雜的卷積神經(jīng)網(wǎng)絡(luò)BN-Net。該模型將糖尿病性視網(wǎng)膜圖像按照病變程度分為5類,準(zhǔn)確率達到93%。但該方法在圖像預(yù)處理、特征提取和圖像分類3個階段中并未形成一個完整的系統(tǒng),且Alex-Net網(wǎng)絡(luò)結(jié)構(gòu)也有待進一步優(yōu)化。丁蓬莉等[4]通過設(shè)計緊湊的Compact-Net網(wǎng)絡(luò)模型,分類指標(biāo)達到87%。但此網(wǎng)絡(luò)結(jié)構(gòu)對病變圖像特征提取不完整,沒有融合各網(wǎng)絡(luò)層特征,且魯棒性不高。梁平等[6]綜述了基于局部病灶、全局圖像的識別方法,同時分析了常用數(shù)據(jù)集、各類方法優(yōu)缺點和識別性能,但并未涉及對神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)化。曹桂銘等[7]提出了基于棧式稀疏自編碼器的眼底圖像特征提取及圖像識別的方法,該方法采用逐層貪婪訓(xùn)練法從無標(biāo)簽的數(shù)據(jù)集中學(xué)習(xí)到數(shù)據(jù)的內(nèi)部特征,將學(xué)習(xí)到的特征作為Softmax分類器的輸入,識別精度達到89%。但文中數(shù)據(jù)集容量較小,使用機器學(xué)習(xí)訓(xùn)練出來的模型自適應(yīng)性不強。何雪英等[8]采用遷移學(xué)習(xí)優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),識別率達到91%。但遷移學(xué)習(xí)具有難于求解、容易發(fā)生過適配等問題。
針對以上問題,本文提出一種基于特征融合的深度學(xué)習(xí)圖像識別方法。主要工作有以下3個方面:
(1) 構(gòu)建了包含128 339幅眼底圖像的數(shù)據(jù)集,數(shù)據(jù)集初始來源于5個公開眼底圖像數(shù)據(jù)庫,共計30 571幅眼底圖像。初始數(shù)據(jù)集經(jīng)擴充、統(tǒng)一化處理成為新的數(shù)據(jù)集。在新數(shù)據(jù)集上訓(xùn)練模型,使模型獲得良好的魯棒性和泛化能力。
(2) 優(yōu)化了網(wǎng)絡(luò)結(jié)構(gòu),并調(diào)整網(wǎng)絡(luò)權(quán)重初始化的取值和學(xué)習(xí)率,提升模型的識別性能。
(3) 設(shè)置了對比實驗,驗證該網(wǎng)絡(luò)模型相較于Alex-Net等常規(guī)模型,能夠表現(xiàn)出更好的識別效果。
實驗所用初始數(shù)據(jù)來自一些大學(xué)以及競賽平臺,主要包含5個數(shù)據(jù)集,共計眼底圖像30 571幅,其中正常圖像13 615幅,病變圖像16 956幅,詳見表1。
表1 初始數(shù)據(jù)集
初始數(shù)據(jù)集的分辨率、顏色、格式、拍攝相機、拍攝角度等屬性信息如表2所示。
表2 初始數(shù)據(jù)集屬性表
由于初始數(shù)據(jù)分辨率大小不一,為適應(yīng)模型訓(xùn)練,使用OpenCV對眼底圖像作統(tǒng)一化和增強化處理。以下為具體操作步驟:
(1) 使用OpenCV中resize()方法將眼底圖像分辨率統(tǒng)一縮小為64×64×3。
(2) 將數(shù)據(jù)集分為兩大部分,分別記為Data1和DataFinal。其中Data1占80%,向上取整約有24 457幅眼底圖像,用于擴充數(shù)據(jù)集;DataFinal占20%,約6 114幅眼底圖像,用于模型最終測試。
(3) 將Data1使用OpenCV中的getAffineTransform函數(shù)、getPerspectiveTransform函數(shù)和warpPerspective函數(shù)進行仿射變換,使用flip函數(shù)上下左右翻轉(zhuǎn)等幾種方式將數(shù)據(jù)集擴充為原來的5倍,得到新的Data1,包含122 285幅眼底圖像。
(4) 將Data1分為兩部分,分別記為DataTrain和DataTest。其中:DataTrain占80%,向上取整有97 828幅眼底圖像,用于訓(xùn)練模型;DataTest占20%,共24 457幅眼底圖像,用于測試模型。表3是分類后的實驗數(shù)據(jù)集。
表3 實驗數(shù)據(jù)集
圖1是經(jīng)過處理后的部分圖像示例。
(a) 正常圖像 (b) 病變圖像 (c) 加噪圖像 (d) 增強亮度圖像 (e) 仿射變換圖像圖1 部分圖像數(shù)據(jù)集
反向傳播算法[9]是目前用來訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)[10](Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:(1) 將DataTrain數(shù)據(jù)輸入到ANN的輸入層,經(jīng)過隱藏層,最后到達輸出層并輸出結(jié)果;(2) 計算輸出結(jié)果與真實值之間的誤差,并將該誤差從輸出層向隱藏層反向傳播,直至輸入層;(3) 在反向傳播的過程中,根據(jù)誤差調(diào)整各種權(quán)重的值。迭代上述過程,直至收斂。
(1)
(2)
(3)
用hW,b(x)計算輸出結(jié)果:
(4)
給定一個包含m個樣本數(shù)據(jù)集M={(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},則神經(jīng)網(wǎng)絡(luò)整體損失函數(shù)可表示為:
(5)
式中:W、b分別表示權(quán)重參數(shù)和偏置項;λ為權(quán)重衰減因子。使用隨機梯度下降算法[11]更新網(wǎng)絡(luò)中的權(quán)重和偏置項,公式如下:
(6)
(7)
2.2.1模型設(shè)計
鑒于VGG-16[12]網(wǎng)絡(luò)結(jié)構(gòu)規(guī)整、參數(shù)量較少、分類性能較好等特點,實驗以VGG-16為基礎(chǔ)模型,通過融合各卷積層上提取的特征,進一步優(yōu)化模型。圖2為改進后的網(wǎng)絡(luò)模型。
圖2 優(yōu)化后的實驗?zāi)P?/p>
特征融合有concat和add兩種方式:concat方式是將圖像的通道數(shù)合并,即圖像本身的特征數(shù)(通道數(shù))增加,特征信息沒有增加;add方式是將圖像對應(yīng)的特征信息相加,通道數(shù)不變,之后進一步執(zhí)行卷積操作。由于每個輸出上的卷積核各自獨立,可只看單個通道的輸出。給定兩路通道分別記為X1,X2,…,XC和Y1,Y2,…,YC,兩種特征融合方式的計算公式為:
(8)
(9)
式中:K表示卷積核;*表示卷積。由于concat相比add方式需要更多的參數(shù),且特征融合之后生成的維度更高,計算量較大,負載重,故在二者優(yōu)勢相當(dāng)?shù)那闆r下,本實驗采用add方式的特征融合。
Softmax層的分類過程表示為:
(10)
2.2.2網(wǎng)絡(luò)參數(shù)
模型中有5個Convolution層、5個Maxpool層、1個Feature Fusion層、2個Full Connection層和1個Softmax層,輸入圖像大小為64×64×3。其中Cov1、Cov2、Cov3、Cov4、Cov5中的Filter個數(shù)分別為64、128、256、512、512。Filter尺寸為3×3×3,F(xiàn)ilter stride為1。Maxpool層中Filter尺寸為2×2×3,F(xiàn)ilter stride為2。2個Full connection層的維度分別為8 192和4 096。Softmax層的輸出分為2類,分別代表正常眼底圖像和病變眼底圖像。表4為模型中參數(shù)變化情況。
表4 實驗?zāi)P蛥?shù)
2.2.3模型優(yōu)化設(shè)計
為防止網(wǎng)絡(luò)模型訓(xùn)練過程中易出現(xiàn)過擬合的問題,實驗采用Dropout技術(shù)[13]。Dropout的工作原理是按照一定的概率隨機斷開一些網(wǎng)絡(luò)連接,保留網(wǎng)絡(luò)層的權(quán)重。由于被斷開的網(wǎng)絡(luò)連接的輸出值為0,所以該連接相當(dāng)于被舍棄,達到降低模型過擬合的目的。網(wǎng)絡(luò)計算過程如下:
Youtput=f(Xinput×Bernoulli(p)+bbias)
(11)
式中:Xinput、Youtput分別表示網(wǎng)絡(luò)層的輸入和輸出;Bernoulli(p)表示以概率p隨機生成的由0和1組成的向量;bbias表示偏置項。本實驗?zāi)P驮贔C1和FC2兩個全連接層上使用了Dropout技術(shù),根據(jù)文獻[13]中的結(jié)論,Dropout丟失率p的取值范圍為0.10至0.50,被保留下來神經(jīng)元的概率為q=1-p。實驗經(jīng)過多次嘗試,設(shè)置p=0.30時效果最佳。
ReLU是神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù),可以將網(wǎng)絡(luò)層計算的線性關(guān)系轉(zhuǎn)換為非線性,從而構(gòu)建真正意義上的神經(jīng)網(wǎng)絡(luò),且具有收斂快、泛化性好等特點。公式如下:
(12)
2.2.4模型訓(xùn)練步驟
基于VGG-16的特征融合眼底病變圖像識別模型訓(xùn)練步驟如下:
1) 輸入預(yù)處理之后分辨率為64×64×3的標(biāo)準(zhǔn)眼底圖像,并初始化網(wǎng)絡(luò)權(quán)重、偏置項和學(xué)習(xí)率值。
2) 設(shè)置1個訓(xùn)練樣本batch的值為30,最大迭代次數(shù)為3 000次,使用隨機梯度下降算法,不斷更新和的值。
3) 根據(jù)反向傳播算法,計算輸出值與真實值之間的誤差值,不斷調(diào)整和的值。當(dāng)?shù)螖?shù)達到設(shè)置的最大次數(shù)時,訓(xùn)練結(jié)束。
4) 返回步驟2),循環(huán)訓(xùn)練模型,直到參數(shù)達到最優(yōu)。
5) 將訓(xùn)練好的模型在眼底圖像測試集上做分類測試,驗證其識別效果。
實驗?zāi)P褪菍?shù)據(jù)集分為正常眼底圖像和病變眼底圖像,針對二分類問題,常用的模型評估標(biāo)準(zhǔn)是F1-score。該標(biāo)準(zhǔn)由準(zhǔn)確率precision和召回率recall通過進一步計算得到,使模型評估更加穩(wěn)定、可靠。相關(guān)計算公式如下:
(13)
(14)
(15)
式中:TP表示正確分類的正樣本的數(shù)量;FP表示負樣本中錯誤標(biāo)記為正樣本的數(shù)量;FN表示正樣本中錯誤標(biāo)記為負樣本的數(shù)量。F1-score的取值在[0,1]之間,值越大,分類效果越好。
硬件配置:Inter(R) Core(TM) i7-3770 CPU@ 3.40 GHz;8 GB內(nèi)存;NVIDIA GeForce GTX1060 3 GB顯卡。
軟件配置:Windows 10 64位操作系統(tǒng);Python 3.5.6編程語言;TensorFlow 1.0[14]深度學(xué)習(xí)框架。
根據(jù)數(shù)據(jù)預(yù)處理的結(jié)果,用于訓(xùn)練、測試、最終測試模型的DataTrain、DataTest和DataFinal分別包含97 828、24 457和6 114幅眼底圖像。
3.3.1Loss和Accuracy的變化情況
實驗過程中設(shè)置DataTrain的每個batch的值為30,最大迭代次數(shù)為3 000次。權(quán)重的初始化服從標(biāo)準(zhǔn)差為0.01、均值為0.1的截斷正態(tài)分布,避免了使用正態(tài)分布使權(quán)重出現(xiàn)過低或過高的情況。損失函數(shù)中權(quán)重衰減因子的值為0.1。本實驗由于數(shù)據(jù)量較大,迭代次數(shù)較多,為加快損失函數(shù)的收斂速度,初始學(xué)習(xí)率為0.07。根據(jù)鐘志權(quán)等[15]在左右眼圖像識別中的結(jié)論,本實驗使用Softmax分類器。隨著迭代次數(shù)的不斷增多,Loss和Accuracy的變化曲線如圖3所示。
圖3 Loss和Accuracy的變化曲線
當(dāng)訓(xùn)練次數(shù)接近1 000輪時,Loss的值從1.0降至0.18,Accuracy的值由0升至0.82,變化幅度最大,這是隨機梯度下降算法通過計算損失函數(shù)方向?qū)?shù)的值,不斷尋求最快下降點的緣故。當(dāng)訓(xùn)練次數(shù)在1 000輪和接近1 750輪之間時,Loss和Accuracy的值出現(xiàn)小幅度波動,其波動范圍分別在[0.06,0.27]和[0.73,0.94]之間,這是隨機梯度下降算法得到局部最優(yōu)解造成的。當(dāng)進行1 750輪訓(xùn)練之后,損失函數(shù)Loss的值收斂于0.06左右,Accuracy的值也穩(wěn)定在0.94。以上結(jié)果表明,實驗?zāi)P蛯D像識別的效果較為理想。
3.3.2模型對比實驗
模型在數(shù)據(jù)集DataTest和DataFinal上的識別情況如表5所示。
表5 模型在測試數(shù)據(jù)集上的識別情況
由表5可知,模型在DataTest和DataFinal上的識別準(zhǔn)確率分別為91.16%和94.41%,后者相較于前者高出3.25個百分點。原因是訓(xùn)練模型使用的是經(jīng)過5種方式擴充后的數(shù)據(jù)集DataTrain,該數(shù)據(jù)集中眼底圖像特征較多,訓(xùn)練出的模型泛化能力更強。另外,實驗通過融合各卷積層上的特征,使模型對眼底圖像的細微特征更加敏感,在特征相對較少的DataFinal上識別效果更優(yōu),魯棒性較好。
為進一步驗證本實驗算法的圖像識別效果,設(shè)置了與Alex-Net、Google-Net[16]、ResNet-101[17]等常規(guī)算法及文獻[4]中Compact-Net算法的對比實驗。實驗在數(shù)據(jù)集DataTest和DataFinal上F1-score的值及在兩數(shù)據(jù)集上的平均準(zhǔn)確率如表6所示。
表6 不同網(wǎng)絡(luò)模型的F1-score值對比結(jié)果 %
本文算法在DataTest上的F1-score值為92.34%,相較于Alex-Net、Google-Net、Compact-Net算法分別提高了9.11、6.00和4.99個百分點,在相同數(shù)據(jù)集的情況下,本文通過特征融合優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu),增強了算法對眼底圖像的特征提取能力和識別能力。在DataFinal上,本文算法的F1-score值相較于Alex-Net、Google-Net、Compact-Net、ResNet-101分別提高了12.01、9.60、7.03和3.02個百分點,表現(xiàn)效果最好,即在實際應(yīng)用中,算法達到了預(yù)期要求。本文算法的平均準(zhǔn)確率為94.23%,相較于其他4種算法,分別提高了10.56、7.80、6.01和0.02個百分點,驗證了本文算法在對眼底圖像識別上是非常有效的。
本文算法和ResNet-101的平均準(zhǔn)確率分別為94.23%和94.21%,十分接近。原因是ResNet-101使用了101層網(wǎng)絡(luò)結(jié)構(gòu),通常更深的網(wǎng)絡(luò)結(jié)構(gòu),圖像識別效果更好。本實驗是基于VGG-16的16層網(wǎng)絡(luò)結(jié)構(gòu),所以在DataTest下,ResNet-101的F1-score值比本文算法高出了2.98%。但本實驗網(wǎng)絡(luò)結(jié)構(gòu)相對簡單,參數(shù)較少,訓(xùn)練更快,同時說明了經(jīng)過特征融合的16層網(wǎng)絡(luò)結(jié)構(gòu)達到了更深網(wǎng)絡(luò)結(jié)構(gòu)的分類效果。
本文通過實驗驗證了算法的魯棒性。為保證單一變量,從DataTest中隨機選取與DataFinal相同數(shù)量的眼底圖像,記為DataTest*。算法在DataTest*和DataFinal上F1-score的差值(DataFinal_F1-score-DataTest*_F1-score)如表7所示。
表7 算法在DataTest*和DataFinal上F1-score的差值 %
差值表示算法在測試集與原始數(shù)據(jù)集上識別效果的差異,其大小在一定程度上反映了算法魯棒性的好壞。差值越大,魯棒性相對越好。由表7可知,ResNet-101、Google-Net、Alex-Net、Compact-Net和本文算法的差值分別為0.05%、0.14%、0.76%、1.65%、2.01%??梢钥闯?,本文算法的魯棒性相對較好,ResNet-101的魯棒性最差。
3.3.3特征可視化分析
卷積神經(jīng)網(wǎng)絡(luò)的圖像特征提取過程及特征融合如圖4所示。由圖可知,在Cov1_1、Cov_2、Cov1_3層提取了原始圖像的大部分特征信息,Cov2_1、Cov2_2和Cov2_3中只保留了原始圖像的邊緣輪廓。隨著網(wǎng)絡(luò)深度的不斷增加,Cov3_1、Cov3_2、Cov3_3、Cov4_1、Cov4_2、Cov4_3更多地提取了圖像的線條和輪廓,而Cov5_1只提取了原始圖像的高階特征信息。通過以上卷積過程可發(fā)現(xiàn),不同卷積核可提取到不同的特征,網(wǎng)絡(luò)層數(shù)越深,卷積核提取到的特征越抽象。特征融合作為全連接層FC1的輸入層,融合了各卷積層上的特征。通過分析卷積神經(jīng)網(wǎng)絡(luò)的工作原理,可為以后模型的優(yōu)化提供幫助。
圖4 卷積過程部分圖像特征可視化
3.3.4圖像錯分類原因分析
本文算法的錯誤識別率在5.77%左右,部分識別錯誤的圖像如圖5所示。
(a) 正常圖像(b) 病變圖像(c) 病變圖像(d) 病變圖像圖5 眼底圖像錯誤識別示例
圖5(b)作為對比圖片,是已經(jīng)標(biāo)注為含有血斑的病變眼底圖像。圖5(a)的標(biāo)注為正常眼底圖像,由于圖像色彩的原因,算法誤將圖5(a)中的黃斑識別為圖5(b)中的血斑,以致算法將圖5(a)判定為病變眼底圖像。圖5(c)和圖5(d)的標(biāo)注為病變眼底圖像,同樣算法將圖5(c)和圖5(d)中的血斑識別為黃斑,從而將其判定為正常眼底圖像。根據(jù)以上結(jié)果,圖像的色彩對算法的識別過程造成了一定的干擾,致使算法識別錯誤。
本文針對糖尿病性視網(wǎng)膜發(fā)病初期特征不明顯、人工識別病變圖像困難、準(zhǔn)確率不高等問題,提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的眼底圖像識別方法。該方法在VGG-16網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上,通過融合各卷積層上的特征,使模型對病變眼底圖像的細微特征更加敏感。為了進一步優(yōu)化模型,使用ReLU函數(shù)加快網(wǎng)絡(luò)中參數(shù)的收斂,并在兩個全連接層上使用Dropout技術(shù),使模型識別圖像的平均準(zhǔn)確率達到94.23%,與常規(guī)算法Alex-net、Google-net、Resnet-101和文獻[4]中Compact-net方法相比,分別提高了10.56%、7.80%、0.02%和6.01%,驗證了該方法的有效性。
由于實驗數(shù)據(jù)集使用的是RGB格式的圖像,以致色彩對圖像識別造成了一定的影響。下一階段的工作是對眼底圖像數(shù)據(jù)做二值灰度處理,并根據(jù)眼底圖像病變的程度劃分不同的等級,做更加細致的分類;使用基于判別區(qū)域的網(wǎng)絡(luò)結(jié)構(gòu)算法,進一步提高模型識別準(zhǔn)確率。