劉振宇,宋建聰,2
(1.沈陽工業(yè)大學(xué)信息科學(xué)與工程學(xué)院,沈陽110870;2.遼寧何氏醫(yī)學(xué)院生物醫(yī)學(xué)工程系,沈陽110163)
白內(nèi)障是全球首要的致盲原因,白內(nèi)障患者在低視力人群中占比達(dá)到47.8%[1]。傳統(tǒng)的白內(nèi)障篩查方法需要患者在大型醫(yī)院由專業(yè)的眼科醫(yī)生通過裂隙燈設(shè)備采集眼部晶體圖像進行檢查,但在一些貧窮國家及地區(qū),眼科醫(yī)生及檢查設(shè)備資源匱乏,加上當(dāng)?shù)匮鄄』颊叩尼t(yī)療意識較弱,經(jīng)常出現(xiàn)由于發(fā)現(xiàn)或治療不及時延誤最佳治療時機最終導(dǎo)致失明的情況,因此,亟需一種方便快捷的白內(nèi)障自動診斷方法,為臨床的綜合治療提供依據(jù)和參考。
多年以來,國內(nèi)外專家學(xué)者提出過許多方法。美國威斯康星白內(nèi)障分級系統(tǒng)[2]利用了4 張標(biāo)準(zhǔn)的晶體裂隙燈圖像,并將圖像按照從1 到4 四個遞增的數(shù)字來表示白內(nèi)障的嚴(yán)重程度,其中,數(shù)字越大,表示白內(nèi)障病情越嚴(yán)重,在臨床診斷過程中,醫(yī)生將患者的晶體裂隙燈圖像與已分級的標(biāo)準(zhǔn)圖像作比較,從而識別出白內(nèi)障嚴(yán)重程度的等級;許言午等人[3]采用ACHIKO-NC 數(shù)據(jù)庫,以威斯康星白內(nèi)障分級系統(tǒng)為依據(jù),利用群稀疏回歸算法將核性白內(nèi)障圖像自動劃分等級;文獻[4]將白內(nèi)障分級問題看作一個排序問題來處理,通過離散排序效果衡量標(biāo)準(zhǔn)連續(xù)化和最優(yōu)化方法達(dá)到了學(xué)習(xí)排序函數(shù)的目的。美國約翰霍普金斯大學(xué)的Fan S 等人[5]將核性白內(nèi)障的分級任務(wù)視為一個分類問題,他們分析視軸上的強度分布并提取了兩個特征:核平均灰度、晶狀體后部曲線斜率,并通過最小二乘擬合方法得出疾病程度預(yù)測值。中山大學(xué)附屬醫(yī)院[6-7]的學(xué)者們于2017年提出了一個用于檢查先天性白內(nèi)障的人工智能平臺CC-Cruiser,該平臺利用了476 個健康人的晶體圖像和410 個患者的晶體圖像,通過對晶體不透明區(qū)域的面積、密度及位置三個方面進行測試,準(zhǔn)確率均可達(dá)到90%以上,但該系統(tǒng)數(shù)據(jù)庫樣本數(shù)量少,且只針對先天性白內(nèi)障這種稀有病進行有效篩查,不能解決大部分白內(nèi)障的診療問題。
根據(jù)以上研究,目前對于白內(nèi)障的自動篩查方法雖然已有很大進展,但仍存在一些問題。一方面基于傳統(tǒng)方法的白內(nèi)障分類研究主要使用人工提取預(yù)先定義的特征集,但這些預(yù)定義特征可能存在定義特征不夠完整且主觀性強的問題;另一方面,當(dāng)前已公開且標(biāo)注的白內(nèi)障數(shù)據(jù)集所對應(yīng)的白內(nèi)障類型還不夠全面,僅供研究部分類型的白內(nèi)障,如核性白內(nèi)障或先天性白內(nèi)障,導(dǎo)致訓(xùn)練的模型不能達(dá)到全面篩查的效果。
為了解決上述問題,構(gòu)建一組白內(nèi)障數(shù)據(jù)集并設(shè)計了一個基于卷積神經(jīng)網(wǎng)絡(luò)的白內(nèi)障特征自動學(xué)習(xí)模型,具體流程如圖1所示。首先,為了解決當(dāng)前白內(nèi)障數(shù)據(jù)集缺乏的問題,收集了臨床中由裂隙燈采集的眼部晶體圖像,并由眼科醫(yī)生將其分為正常、早期白內(nèi)障及白內(nèi)障三類,構(gòu)建MSLPP 數(shù)據(jù)集;然后對圖像進行預(yù)處理,主要操作為光照增強和數(shù)據(jù)量的擴增;最后,為了解決自動提取深度特征的問題,利用ImageNet 預(yù)訓(xùn)練過的Inception-V3模型及參數(shù),并采用遷移學(xué)習(xí)的思想進行訓(xùn)練,從而得到分類模型。該系統(tǒng)完成后可實現(xiàn)通過手機APP 即能實時進行白內(nèi)障篩查。
圖1 白內(nèi)障特征自動學(xué)習(xí)模型流程圖
數(shù)據(jù)庫是實現(xiàn)深度學(xué)習(xí)系統(tǒng)的重要組成部分,高質(zhì)量的數(shù)據(jù)庫可以增強系統(tǒng)篩查的準(zhǔn)確性。但由于目前缺乏大型公開已標(biāo)記的裂隙燈眼部晶體圖像數(shù)據(jù)集,因此需要構(gòu)建用于白內(nèi)障分類的數(shù)據(jù)集。實驗中采用的數(shù)據(jù)集為與沈陽艾洛博智能科技有限公司和沈陽何氏眼科集團合作開發(fā),并將其命名為MSLPP(Marked Slit Lamp Picture Project)數(shù)據(jù)集。
MSLPP 數(shù)據(jù)集共包含16239 張圖片,其中白內(nèi)障患者眼部樣本圖像5302 張,早期白內(nèi)障患者眼部樣本圖像5400 張,正常人的眼部樣本圖像5537 張,圖像采集于2015年到2018年,來自于2864 個健康人和5532 個白內(nèi)障患者。
該數(shù)據(jù)集中所收集的圖像均為裂隙燈拍攝的眼部樣本圖像,所使用的裂隙燈主要為臺式裂隙燈和手機裂隙燈,該數(shù)據(jù)庫部分樣本圖像如圖2所示。由圖可以看出,將裂隙光聚焦到瞳孔區(qū),內(nèi)部呈透明或淺黃底色即是正常的晶體,如圖2(a)所示;內(nèi)部呈透明見黃底,光斑略暗即為早期白內(nèi)障,如圖2(b)所示;若內(nèi)部有明顯渾濁,病灶位置可見即為白內(nèi)障,如圖2(c)所示。
亮度是圖像處理過程中重點關(guān)注的部分。該數(shù)據(jù)集在采集時,由于實際篩查環(huán)境復(fù)雜多樣,所拍攝樣本圖像亮度差異大,會影響深度學(xué)習(xí)準(zhǔn)確率,因此,需要對樣本圖像進行光照調(diào)節(jié),突出樣本特征,減小由圖像亮度差異帶來的影響,具體做法如下:
輸入圖像被壓縮為299×299 像素,任意一點A(x,y)的三通道像素則圖像的平均像素值aˉ可表示為:
為了避免模型訓(xùn)練時發(fā)生過擬合情況,在進行圖像預(yù)處理時,需要對樣本進行數(shù)量擴增處理,有利于改善模型的性能,提高圖像分類準(zhǔn)確率。實驗所采用的數(shù)據(jù)擴增方式有以下三種:
1) 平移:將圖像分別向上下左右平移12 個像素點;
2) 旋轉(zhuǎn):將圖像分別沿順/逆時針方向旋轉(zhuǎn)15°;
3) 鏡像:將圖像上下/左右方向各做鏡像一次。
圖2 MSLPP 數(shù)據(jù)集部分樣本圖像
在實驗中,所采用的方法是卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNNs)。卷積神經(jīng)網(wǎng)絡(luò)是一種帶有卷積結(jié)構(gòu)的深度神經(jīng)網(wǎng)絡(luò)[8],其結(jié)構(gòu)如圖3所示,主要包含卷積層、池化層和全連接層三個部分[9]。
在整個網(wǎng)絡(luò)中,利用卷積層和池化層提取圖像中的有效特征,在網(wǎng)絡(luò)中引入非線性激活函數(shù),減少有效特征所占維度,輸出能夠表示輸入圖像的高級特征,最后,由全連接層將這些特征用于對所要篩查的輸入圖像的分類。除了上述所提到的基本網(wǎng)絡(luò)結(jié)構(gòu),在最后的全連接層中還增加了Dropout 策略,能夠有效避免過擬合,提高網(wǎng)絡(luò)泛化能力,加快網(wǎng)絡(luò)的訓(xùn)練過程。
通過比較 AlexNet[10]、VGG16[11]、GoogLeNet[12]等深度卷積模型,最終選用的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)是谷歌基于GoogLeNet 提出的Inception-V3 模型。該模型共有42 層網(wǎng)絡(luò)結(jié)構(gòu),在GoogLeNet 的基礎(chǔ)上,對模型的結(jié)構(gòu)進行進一步的分解,將7×7、3×3 結(jié)構(gòu)分解成兩個一維的卷積以加速計算,而節(jié)省下來的算力可用來加深網(wǎng)絡(luò),將卷積層由原來的一個拆分為二,可以更進一步地加深網(wǎng)絡(luò),進而提高網(wǎng)絡(luò)的非線性。
在醫(yī)學(xué)圖像領(lǐng)域,缺乏大量公開已標(biāo)注的數(shù)據(jù)集是將深度學(xué)習(xí)應(yīng)用于醫(yī)療圖像處理中的難題之一。在樣本不足的情況下,易導(dǎo)致模型訓(xùn)練過程中出現(xiàn)不收斂或者所訓(xùn)練出來的模型泛化能力差等一系列問題。因此,實驗采用遷移學(xué)習(xí)的方法來解決以上問題。
基于卷積神經(jīng)網(wǎng)絡(luò)模型遷移學(xué)習(xí)的白內(nèi)障分類方法流程圖如圖3所示。
圖3 遷移學(xué)習(xí)策略訓(xùn)練示意圖
首先,對基于ImageNet 圖像標(biāo)注的數(shù)據(jù)集,在Inception-V3 模型上進行預(yù)訓(xùn)練,提取一個2048 維的特征向量。這一階段充分利用知識遷移,使用預(yù)訓(xùn)練權(quán)重進行特征提取,不對Inception-V3 的權(quán)重參數(shù)進行訓(xùn)練,與傳統(tǒng)方法相比,提取特征更加高效。然后,將特征向量輸入一個單層的全連接神經(jīng)網(wǎng)絡(luò)。因為訓(xùn)練好的Inception-V3 模型已經(jīng)將原始的圖像抽象成更加容易分類的特征向量,因此使用一個包含Softmax 分類器的單層全連接神經(jīng)網(wǎng)絡(luò),再經(jīng)過已分類的白內(nèi)障晶體圖像訓(xùn)練后即得到最終分類結(jié)果。這一階段,輸入的特征向量主要承擔(dān)對分類器的訓(xùn)練任務(wù),使得分類器能夠更好地基于已提取的特征完成場景分類。
MSLPP 數(shù)據(jù)集共包含5302 張白內(nèi)障晶體圖像、5400 張早期白內(nèi)障晶體圖像和5537 張正常晶體圖像。實驗將該數(shù)據(jù)集劃分為訓(xùn)練集、驗證集和測試集,在三個類別中分別隨機取出500 張作為測試集,其余樣本按6:1 的比例隨機分為訓(xùn)練集和驗證集。其中,訓(xùn)練集共12630 張,包含白內(nèi)障4083張、早期白內(nèi)障4241 張、正常4306 張;驗證集共2109 張,包含白內(nèi)障 719 張、早期白內(nèi)障 659 張、正常731 張。各類別下圖片具體數(shù)量如表1所示。
表1 各分類下圖片數(shù)量對比
將訓(xùn)練集和驗證集數(shù)據(jù)進行擴增,測試集保持不變。擴增后,訓(xùn)練集和驗證集的總數(shù)量由原來的14739 張增加到了132651 張,其中白內(nèi)障患者晶體裂隙燈圖像變?yōu)?3218 張,早期白內(nèi)障患者晶體裂隙燈圖像變?yōu)?4100 張,正常人的晶體裂隙燈圖像變?yōu)?5333 張。
采用四種常用的指標(biāo)來評估系統(tǒng)的性能:準(zhǔn)確率(Accuracy)、召回率(Recall)、精確率(Precision)和F1 指標(biāo)(F1_meature)。準(zhǔn)確率是分類性能的總體度量,它是分類正確的樣本數(shù)與總樣本數(shù)之比;召回率是所有正例樣本中被分對的比例;精確率是被分為正例的樣本中實際為正例的比例;F1 指標(biāo)是精確率和召回率的調(diào)和均值。它們的計算方法如下:其中,TP、TN、FP、FN 分別代表真陽性(True Positive)、
真陰性(True Negative),假陽性(False Positive)和假陰性(False Negative)的數(shù)量。以白內(nèi)障樣本為例,“真陽性”意味著白內(nèi)障樣本被正確分類為白內(nèi)障。如果白內(nèi)障樣本被錯誤地歸為其他分類,我們將其稱為“假陰性”?!罢骊幮浴焙汀凹訇栃浴钡暮x類似,“真陰性”意味著其他分類樣本未被錯誤地歸為白內(nèi)障,而“假陽性”意味著其他分類樣本被錯誤地歸為白內(nèi)障。
4.3.1 訓(xùn)練過程
實驗中的所有代碼都是以Keras 為前端、以TensorFlow 為后端完成的,該框架基于Ubuntu16.04(64 位)+CUDA9.1+CUDNN9.0 系統(tǒng)。采用的編程語言為Python。訓(xùn)練過程如下:
1、加載去掉全連接層的Inception-V3 模型以及用ImageNet 數(shù)據(jù)集預(yù)訓(xùn)練得出的權(quán)重參數(shù);
2、在初始化后的Inception-V3 網(wǎng)絡(luò)上添加全連接層結(jié)構(gòu),并在全連接層中加入Dropout 策略,比率設(shè)置為0.75;
3、將除了全連接層以外的所有特征提取層凍結(jié),然后將學(xué)習(xí)率設(shè)為0.001,利用預(yù)處理后的訓(xùn)練集訓(xùn)練1 個epoch,迭代550 次;
4、將所有層解凍,利用微調(diào)(fine-tune)遷移學(xué)習(xí),繼續(xù)用MSLPP 數(shù)據(jù)集進行訓(xùn)練,采用隨機梯度下降的方法,初始學(xué)習(xí)率設(shè)為0.01,訓(xùn)練100 個epoch,每個 epoch 迭代 550 次,每結(jié)束一個 epoch,利用驗證集測試模型準(zhǔn)確率,若準(zhǔn)確率較上次提高,保存此次訓(xùn)練參數(shù),若準(zhǔn)確率降低,則利用之前保存的參數(shù)繼續(xù)訓(xùn)練。批樣本數(shù)batch_size 設(shè)置為32,動量momentum 設(shè)置為0.9。
4.3.2 實驗結(jié)果分析
模型訓(xùn)練完成后,利用驗證集對模型進行驗證,其中白內(nèi)障的召回率為88.24%,早期白內(nèi)障的召回率為86.63%,正常的召回率為97.51%。隨后,又用訓(xùn)練時模型未接觸過的測試集進行測試,測試集包含圖像共1500 張,其中醫(yī)生判定為白內(nèi)障的有500 張,早期白內(nèi)障500 張,正常500 張,經(jīng)系統(tǒng)分類后的樣本分布情況如表2所示。
表2 測試集樣本分布情況
按照4.2 節(jié)的評價方法,系統(tǒng)的性能如表3。
表3 模型可靠性判定
由表中可知,識別正常晶體時的準(zhǔn)確率最高,這是因為正常晶體通透性強,特征更明顯,而早期白內(nèi)障的特征則較為多變,且在有些情況下與白內(nèi)障和正常晶體兩個類別的區(qū)分界限不夠明確,更不容易進行區(qū)分,從而影響模型篩查的準(zhǔn)確性。由于測試集中三個分類的圖像數(shù)量均為500 張,因此模型準(zhǔn)確率為各類別準(zhǔn)確率的平均值,由此可計算出,該模型的準(zhǔn)確率為94.85%,召回率為92.27%,根據(jù)臨床使用標(biāo)準(zhǔn),該系統(tǒng)具有實用性。同時,根據(jù)表3 還可以看出,白內(nèi)障圖像錯分為正常圖像或正常圖像錯分為白內(nèi)障圖像的概率為0,以最高的準(zhǔn)確度保證了系統(tǒng)的實用性。
提出了基于卷積神經(jīng)網(wǎng)絡(luò)的白內(nèi)障篩查方法,利用特征遷移學(xué)習(xí)和微調(diào)遷移學(xué)習(xí),訓(xùn)練后的模型可將被檢測晶體圖像分為正常、早期白內(nèi)障及白內(nèi)障三類。所采用的MSLPP 數(shù)據(jù)集包含核性白內(nèi)障、皮質(zhì)性白內(nèi)障以及后囊性白內(nèi)障,并涉及多種不同光照情況,樣本具有多樣性。實驗測試表明,該模型準(zhǔn)確率達(dá)94.84%,優(yōu)于其他現(xiàn)有的白內(nèi)障篩查方法,實用性強,為臨床診斷起到了更好的輔助作用。