劉振宇,宋建聰,2
(1.沈陽工業大學信息科學與工程學院,沈陽110870;2.遼寧何氏醫學院生物醫學工程系,沈陽110163)
白內障是全球首要的致盲原因,白內障患者在低視力人群中占比達到47.8%[1]。傳統的白內障篩查方法需要患者在大型醫院由專業的眼科醫生通過裂隙燈設備采集眼部晶體圖像進行檢查,但在一些貧窮國家及地區,眼科醫生及檢查設備資源匱乏,加上當地眼病患者的醫療意識較弱,經常出現由于發現或治療不及時延誤最佳治療時機最終導致失明的情況,因此,亟需一種方便快捷的白內障自動診斷方法,為臨床的綜合治療提供依據和參考。
多年以來,國內外專家學者提出過許多方法。美國威斯康星白內障分級系統[2]利用了4 張標準的晶體裂隙燈圖像,并將圖像按照從1 到4 四個遞增的數字來表示白內障的嚴重程度,其中,數字越大,表示白內障病情越嚴重,在臨床診斷過程中,醫生將患者的晶體裂隙燈圖像與已分級的標準圖像作比較,從而識別出白內障嚴重程度的等級;許言午等人[3]采用ACHIKO-NC 數據庫,以威斯康星白內障分級系統為依據,利用群稀疏回歸算法將核性白內障圖像自動劃分等級;文獻[4]將白內障分級問題看作一個排序問題來處理,通過離散排序效果衡量標準連續化和最優化方法達到了學習排序函數的目的。美國約翰霍普金斯大學的Fan S 等人[5]將核性白內障的分級任務視為一個分類問題,他們分析視軸上的強度分布并提取了兩個特征:核平均灰度、晶狀體后部曲線斜率,并通過最小二乘擬合方法得出疾病程度預測值。中山大學附屬醫院[6-7]的學者們于2017年提出了一個用于檢查先天性白內障的人工智能平臺CC-Cruiser,該平臺利用了476 個健康人的晶體圖像和410 個患者的晶體圖像,通過對晶體不透明區域的面積、密度及位置三個方面進行測試,準確率均可達到90%以上,但該系統數據庫樣本數量少,且只針對先天性白內障這種稀有病進行有效篩查,不能解決大部分白內障的診療問題。
根據以上研究,目前對于白內障的自動篩查方法雖然已有很大進展,但仍存在一些問題。一方面基于傳統方法的白內障分類研究主要使用人工提取預先定義的特征集,但這些預定義特征可能存在定義特征不夠完整且主觀性強的問題;另一方面,當前已公開且標注的白內障數據集所對應的白內障類型還不夠全面,僅供研究部分類型的白內障,如核性白內障或先天性白內障,導致訓練的模型不能達到全面篩查的效果。
為了解決上述問題,構建一組白內障數據集并設計了一個基于卷積神經網絡的白內障特征自動學習模型,具體流程如圖1所示。首先,為了解決當前白內障數據集缺乏的問題,收集了臨床中由裂隙燈采集的眼部晶體圖像,并由眼科醫生將其分為正常、早期白內障及白內障三類,構建MSLPP 數據集;然后對圖像進行預處理,主要操作為光照增強和數據量的擴增;最后,為了解決自動提取深度特征的問題,利用ImageNet 預訓練過的Inception-V3模型及參數,并采用遷移學習的思想進行訓練,從而得到分類模型。該系統完成后可實現通過手機APP 即能實時進行白內障篩查。

圖1 白內障特征自動學習模型流程圖
數據庫是實現深度學習系統的重要組成部分,高質量的數據庫可以增強系統篩查的準確性。但由于目前缺乏大型公開已標記的裂隙燈眼部晶體圖像數據集,因此需要構建用于白內障分類的數據集。實驗中采用的數據集為與沈陽艾洛博智能科技有限公司和沈陽何氏眼科集團合作開發,并將其命名為MSLPP(Marked Slit Lamp Picture Project)數據集。
MSLPP 數據集共包含16239 張圖片,其中白內障患者眼部樣本圖像5302 張,早期白內障患者眼部樣本圖像5400 張,正常人的眼部樣本圖像5537 張,圖像采集于2015年到2018年,來自于2864 個健康人和5532 個白內障患者。
該數據集中所收集的圖像均為裂隙燈拍攝的眼部樣本圖像,所使用的裂隙燈主要為臺式裂隙燈和手機裂隙燈,該數據庫部分樣本圖像如圖2所示。由圖可以看出,將裂隙光聚焦到瞳孔區,內部呈透明或淺黃底色即是正常的晶體,如圖2(a)所示;內部呈透明見黃底,光斑略暗即為早期白內障,如圖2(b)所示;若內部有明顯渾濁,病灶位置可見即為白內障,如圖2(c)所示。
亮度是圖像處理過程中重點關注的部分。該數據集在采集時,由于實際篩查環境復雜多樣,所拍攝樣本圖像亮度差異大,會影響深度學習準確率,因此,需要對樣本圖像進行光照調節,突出樣本特征,減小由圖像亮度差異帶來的影響,具體做法如下:
輸入圖像被壓縮為299×299 像素,任意一點A(x,y)的三通道像素則圖像的平均像素值aˉ可表示為:

為了避免模型訓練時發生過擬合情況,在進行圖像預處理時,需要對樣本進行數量擴增處理,有利于改善模型的性能,提高圖像分類準確率。實驗所采用的數據擴增方式有以下三種:
1) 平移:將圖像分別向上下左右平移12 個像素點;
2) 旋轉:將圖像分別沿順/逆時針方向旋轉15°;
3) 鏡像:將圖像上下/左右方向各做鏡像一次。

圖2 MSLPP 數據集部分樣本圖像
在實驗中,所采用的方法是卷積神經網絡(Convolutional Neural Networks,CNNs)。卷積神經網絡是一種帶有卷積結構的深度神經網絡[8],其結構如圖3所示,主要包含卷積層、池化層和全連接層三個部分[9]。
在整個網絡中,利用卷積層和池化層提取圖像中的有效特征,在網絡中引入非線性激活函數,減少有效特征所占維度,輸出能夠表示輸入圖像的高級特征,最后,由全連接層將這些特征用于對所要篩查的輸入圖像的分類。除了上述所提到的基本網絡結構,在最后的全連接層中還增加了Dropout 策略,能夠有效避免過擬合,提高網絡泛化能力,加快網絡的訓練過程。
通過比較 AlexNet[10]、VGG16[11]、GoogLeNet[12]等深度卷積模型,最終選用的卷積神經網絡結構是谷歌基于GoogLeNet 提出的Inception-V3 模型。該模型共有42 層網絡結構,在GoogLeNet 的基礎上,對模型的結構進行進一步的分解,將7×7、3×3 結構分解成兩個一維的卷積以加速計算,而節省下來的算力可用來加深網絡,將卷積層由原來的一個拆分為二,可以更進一步地加深網絡,進而提高網絡的非線性。
在醫學圖像領域,缺乏大量公開已標注的數據集是將深度學習應用于醫療圖像處理中的難題之一。在樣本不足的情況下,易導致模型訓練過程中出現不收斂或者所訓練出來的模型泛化能力差等一系列問題。因此,實驗采用遷移學習的方法來解決以上問題。
基于卷積神經網絡模型遷移學習的白內障分類方法流程圖如圖3所示。

圖3 遷移學習策略訓練示意圖
首先,對基于ImageNet 圖像標注的數據集,在Inception-V3 模型上進行預訓練,提取一個2048 維的特征向量。這一階段充分利用知識遷移,使用預訓練權重進行特征提取,不對Inception-V3 的權重參數進行訓練,與傳統方法相比,提取特征更加高效。然后,將特征向量輸入一個單層的全連接神經網絡。因為訓練好的Inception-V3 模型已經將原始的圖像抽象成更加容易分類的特征向量,因此使用一個包含Softmax 分類器的單層全連接神經網絡,再經過已分類的白內障晶體圖像訓練后即得到最終分類結果。這一階段,輸入的特征向量主要承擔對分類器的訓練任務,使得分類器能夠更好地基于已提取的特征完成場景分類。
MSLPP 數據集共包含5302 張白內障晶體圖像、5400 張早期白內障晶體圖像和5537 張正常晶體圖像。實驗將該數據集劃分為訓練集、驗證集和測試集,在三個類別中分別隨機取出500 張作為測試集,其余樣本按6:1 的比例隨機分為訓練集和驗證集。其中,訓練集共12630 張,包含白內障4083張、早期白內障4241 張、正常4306 張;驗證集共2109 張,包含白內障 719 張、早期白內障 659 張、正常731 張。各類別下圖片具體數量如表1所示。

表1 各分類下圖片數量對比
將訓練集和驗證集數據進行擴增,測試集保持不變。擴增后,訓練集和驗證集的總數量由原來的14739 張增加到了132651 張,其中白內障患者晶體裂隙燈圖像變為43218 張,早期白內障患者晶體裂隙燈圖像變為44100 張,正常人的晶體裂隙燈圖像變為45333 張。
采用四種常用的指標來評估系統的性能:準確率(Accuracy)、召回率(Recall)、精確率(Precision)和F1 指標(F1_meature)。準確率是分類性能的總體度量,它是分類正確的樣本數與總樣本數之比;召回率是所有正例樣本中被分對的比例;精確率是被分為正例的樣本中實際為正例的比例;F1 指標是精確率和召回率的調和均值。它們的計算方法如下:其中,TP、TN、FP、FN 分別代表真陽性(True Positive)、

真陰性(True Negative),假陽性(False Positive)和假陰性(False Negative)的數量。以白內障樣本為例,“真陽性”意味著白內障樣本被正確分類為白內障。如果白內障樣本被錯誤地歸為其他分類,我們將其稱為“假陰性”。“真陰性”和“假陽性”的含義類似,“真陰性”意味著其他分類樣本未被錯誤地歸為白內障,而“假陽性”意味著其他分類樣本被錯誤地歸為白內障。
4.3.1 訓練過程
實驗中的所有代碼都是以Keras 為前端、以TensorFlow 為后端完成的,該框架基于Ubuntu16.04(64 位)+CUDA9.1+CUDNN9.0 系統。采用的編程語言為Python。訓練過程如下:
1、加載去掉全連接層的Inception-V3 模型以及用ImageNet 數據集預訓練得出的權重參數;
2、在初始化后的Inception-V3 網絡上添加全連接層結構,并在全連接層中加入Dropout 策略,比率設置為0.75;
3、將除了全連接層以外的所有特征提取層凍結,然后將學習率設為0.001,利用預處理后的訓練集訓練1 個epoch,迭代550 次;
4、將所有層解凍,利用微調(fine-tune)遷移學習,繼續用MSLPP 數據集進行訓練,采用隨機梯度下降的方法,初始學習率設為0.01,訓練100 個epoch,每個 epoch 迭代 550 次,每結束一個 epoch,利用驗證集測試模型準確率,若準確率較上次提高,保存此次訓練參數,若準確率降低,則利用之前保存的參數繼續訓練。批樣本數batch_size 設置為32,動量momentum 設置為0.9。
4.3.2 實驗結果分析
模型訓練完成后,利用驗證集對模型進行驗證,其中白內障的召回率為88.24%,早期白內障的召回率為86.63%,正常的召回率為97.51%。隨后,又用訓練時模型未接觸過的測試集進行測試,測試集包含圖像共1500 張,其中醫生判定為白內障的有500 張,早期白內障500 張,正常500 張,經系統分類后的樣本分布情況如表2所示。

表2 測試集樣本分布情況
按照4.2 節的評價方法,系統的性能如表3。

表3 模型可靠性判定
由表中可知,識別正常晶體時的準確率最高,這是因為正常晶體通透性強,特征更明顯,而早期白內障的特征則較為多變,且在有些情況下與白內障和正常晶體兩個類別的區分界限不夠明確,更不容易進行區分,從而影響模型篩查的準確性。由于測試集中三個分類的圖像數量均為500 張,因此模型準確率為各類別準確率的平均值,由此可計算出,該模型的準確率為94.85%,召回率為92.27%,根據臨床使用標準,該系統具有實用性。同時,根據表3 還可以看出,白內障圖像錯分為正常圖像或正常圖像錯分為白內障圖像的概率為0,以最高的準確度保證了系統的實用性。
提出了基于卷積神經網絡的白內障篩查方法,利用特征遷移學習和微調遷移學習,訓練后的模型可將被檢測晶體圖像分為正常、早期白內障及白內障三類。所采用的MSLPP 數據集包含核性白內障、皮質性白內障以及后囊性白內障,并涉及多種不同光照情況,樣本具有多樣性。實驗測試表明,該模型準確率達94.84%,優于其他現有的白內障篩查方法,實用性強,為臨床診斷起到了更好的輔助作用。