杜霞
(四川大學計算機學院,成都 610065)
糖尿病性視網膜病變(Diabetic Retinopathy,DR)是一種嚴重的糖尿病眼底微血管并發(fā)癥,DR在導致20-74歲成人失明的因素中排列首位[1]。據WHO發(fā)布的2016年《全球糖尿病報告》數(shù)據,全球截止2014年成人中糖尿病患者已經達到4.22億,患病率顯著上升。在已有15年以上糖尿病史的患者中,80%以上患有DR。DR的病情發(fā)展是漸進變化的,及時檢查和治療是預防失明的有效手段。在醫(yī)學上,根據視網膜眼底圖像的特征對DR病情階段進行了準確的分類,也是醫(yī)生臨床診斷的重要標準。在實際診斷中,主要存在的問題包括:分類準確性極度依賴醫(yī)生的臨床經驗;眼底照相的質量受到操作技術、設備、光線等影響較大;圖像中存在的細微特征依靠肉眼難以辨別等[2]。
基于DR在人工診斷存在的困難,大量研究嘗試用計算機技術進行DR的自動診斷,研究方法主要分為傳統(tǒng)機器學習和深度神經網絡算法。在傳統(tǒng)機器學習方向,Roychowdhury[3]等人綜合利用高斯混合模型、k緊鄰分類器、支持向量機以及AdaBoost四種算法來訓練分類器,最終在小型數(shù)據集的二分類問題上得到了較好的效果。Jelinek[4]等人采用Gabor小波變換,對27張血管被熒光標記的視網膜圖像進行分割,并根據面積、邊界等五個傳統(tǒng)特征進行病變分類,在多特征判別下,對是否存在DR增殖性病變分類任務上取得了90%的AUC值。Nayak[5]等人通過提取滲出物面積、血管面積和紋理特征,使用這些特征訓練神經網絡,將彩色眼底圖像分為非DR、增值性DR和非增值性DR三類,并在140張圖片的小型數(shù)據集上取得了93%的準確率。傳統(tǒng)機器學習在小數(shù)據集上可以取得良好的效果,但面對大量數(shù)據時則難以突破,研究者開始嘗試深度神經網絡方法。Gulshan[6]等人采用卷積神經網絡方法,在擁有128175張眼底圖像的大規(guī)模數(shù)據集上訓練,最終在DR的三分類任務上獲得了最高97.5%的靈敏度。Ghosh[7]等人在Kaggle提供的超過30000張圖像的數(shù)據集上,分別在二分類和五分類問題上獲得了95%和85%的準確率。Li等人[8]采用遷移學習的方法,對預訓練好的卷積網絡進行微調,在1000張左右的小數(shù)據集上實現(xiàn)了92.01%的準確率,證明了遷移學習對提升神經網絡在小數(shù)據上的表現(xiàn)有所幫助。Li等人[9]基于CNN網絡,在超過70000張圖片的中國人眼底數(shù)據集上達到了95.5%的診斷率。
本文通過深度卷積網絡模型,實現(xiàn)了對DR眼底彩照的自動分類。通過數(shù)據清洗、標定等完成了DR_data私有數(shù)據集的建立;并采用翻轉、旋轉、平移等方法進行數(shù)據增廣,克服了數(shù)據量不足以及數(shù)據類別分布不均衡問題。本文采用了遷移學習的方法和Inception-V4網絡模型,在DR的四分類任務上獲得了較好的準確率和魯棒性。
卷積神經網絡(Convolutional Neural Networks,CNNs)是一種常用的深度神經網絡模型,在圖像處理問題上具有突出表現(xiàn)。最早于1962年,Hubel和Wiesel等人受到貓的啟發(fā),提出了感受野的概念[10];由Yann LeCun等人于1989年正式提出了卷積神經網絡模型[11];2012年Hinton等人[12]提出加入權重衰減的CNN模型,將ImageNet[13]數(shù)據集上的圖像分類錯誤率大幅降低至16%,后續(xù)許多基于該架構的網絡模型取得了驚人的成果[14-16]。
CNN主要由輸入層、卷積層、池化層、全連接層以及輸出層等五種結構組成,其中卷積層(convolutional layer)和池化層(pooling layer)是CNN中非常關鍵的結構。卷積層的每個節(jié)點與前一層網絡的部分區(qū)域相連,通過卷積操作提取輸入層的特征,深層的卷積網絡可以提取抽象程度更高的特征[17]。其中池化層的操作與卷積類似,但并不計算神經元的加權和,只影響一個深度上的神經元。常用的池化操作有最大池化和平均池化兩種,池化層可以快速地減少矩陣的大小,加快計算速度并防止過擬合。卷積運算中的三個關鍵思想,包括稀疏連接、權值共享和等值變化,對減少網絡參數(shù)、提升計算效率起到了重要作用。
傳統(tǒng)CNN在發(fā)展過程中,由于不斷加深網絡深度和寬度,導致網絡參數(shù)增加,更容易出現(xiàn)過擬合現(xiàn)象。Szegedy等人[18]于2014年提出了GoogleNet網絡結構,該網絡在ImageNet競賽上取得了非常好的效果。該網絡中設計的Inception-V1模塊包含了多維度的卷積結構疊加和最大池化操作來減少參數(shù)數(shù)目,具有不同感受野的卷積可以實現(xiàn)不同級別的特征提取。在Inception-V2模塊中,增加了對中間特征的歸一化操作,可以使用較大的學習率以加快收斂速度,同時也具有正則化效應。Inception-V3中引入了“因子化”(Factorization)的概念,將一些尺寸較大的卷積分解為更小的卷積,在保證網絡效果等價的前提下減少了參數(shù)量。Inception-V4網絡主要對前幾個版本做了規(guī)范和簡化并將網絡遷移到TensorFlow平臺執(zhí)行,可以更好地利用計算資源。在殘差網絡(ResNet)[19]的基礎上,Szegedy等人提出的Inception與ResNet集成的網絡結構,在ILSVRC 2012上達到了3.08%的top5錯誤率。
圖1 Inception模塊
通常CNN模型例如LeNet、AlexNet、VGG等通過使用卷積、池化、標準化和激活函數(shù)的疊加來增加網絡深度以期達到更好的效果。Inception-V4更是增加了殘差連接這一設計理念,Christian[20]發(fā)現(xiàn)利用殘差連接設計更深更寬的Inception網絡可以顯著提高網絡表現(xiàn)。因此Inecption-V4有著更多Inception模塊其中包括4個Inception-A和7個Inception-B和3個Inception C模塊。本文在實驗中使用了Inception-V4網絡結構。
表1 Inception-V4網絡模型
對于醫(yī)學圖像數(shù)據集來說,獲取數(shù)據的成本十分高昂,因此缺乏大量訓練數(shù)據是一個主要問題。神經網絡參數(shù)較多,如果訓練樣本不足,模型容易出現(xiàn)過擬合現(xiàn)象,所以數(shù)據增強和遷移學習方法[21]是必要的。類似于人腦的神經系統(tǒng),卷積神經網絡對模型的學習是一種層級結構,從圖形的邊緣、角點到局部特征,再到全局特征,預訓練模型在提取圖像深度特征的過程被廣泛使用。深度神經網絡通常具有大量參數(shù)使得訓練一個深度網絡需要大量時間和計算資源,遷移學習方法可以使能我們把在大數(shù)據的模型(源領域)遷移到小數(shù)據(目標域)上僅僅做參數(shù)的調優(yōu)而不用從頭訓練。本文使用基于ImageNet的預訓練模型,其中包含120萬副圖像和1000種分類類別,最后在DR_data數(shù)據集調優(yōu)以達到減少訓練時間和對樣本量的需求。
本文采用的DR_data數(shù)據集為私有數(shù)據集,與四川省人民醫(yī)院合作建立,由該院眼科、內分泌科和體檢中心采集的部分眼底檢查彩照組成。一位患者單次眼底檢查會分別對左眼和右眼進行拍照,診斷時左右眼的結果相互獨立,因此將一位患者的檢查結果整理為左眼和右眼兩例數(shù)據,每例數(shù)據對應一位患者的一只眼睛,包含若干張眼底彩照。DR_data數(shù)據集共有1333例數(shù)據,2409張眼底彩照。
數(shù)據收集完成后,由三名專業(yè)眼科醫(yī)師(包括一位眼科主任醫(yī)師)進行病變程度人工標定。根據DR在病變發(fā)展階段的特征,國際上主要將DR分為非增生性(PDR)和增生性(NPDR)兩期[23]。在數(shù)據標記階段中,參與醫(yī)生根據眼底彩照所表現(xiàn)的病變特征和臨床對應的治療措施,將病變劃分為四個類別:正常、輕度(非增生性)、中度(非增生性到增生性之間)、重度(增生性)。
標定后的數(shù)據集中包含正常56例、輕度367例、中度700例、重度210例。為了在網絡訓練時進行交叉驗證,將數(shù)據集隨機劃分為兩部分:80%的訓練集和20%的測試集。
圖2 數(shù)據集示例
表2 數(shù)據集分布
數(shù)據集原始圖像的分辨率為2464×1632,較高的分辨率可以保留圖像更多細節(jié)特征,但也會增加模型參數(shù)量、需要大量計算資源。通過已有研究和多次嘗試結果比較,本文將輸入圖像的尺寸減小到512×512分辨率,可以在模型效率與分類準確率之間取得較好的平衡。
樣本間差異導致的數(shù)據分布的偏移經過多層卷積網絡的疊加,會影響梯度變化的方向。本文使用了歸一化方法將不同數(shù)據的亮度、顏色等數(shù)值都歸一化到同一個范圍,該操作一定程度消除了數(shù)據差異帶來的噪聲。
相較于其他圖像分類問題的數(shù)據集規(guī)模,本文數(shù)據集規(guī)模較小,并且各類別的數(shù)據量不平衡。因此,為了讓模型有更好的泛化能力以及避免學習結果偏向某個類別,本文采用了一些數(shù)據增強的方法如:隨機翻轉、旋轉 45°/90°/180°等角度、從圖像上下左右四個方向剪裁等。
本文模型使用隨機梯度下降優(yōu)化器(SGD),SGD算法可以收斂到局部最小值,如果學習速率小則學習速度過慢,學習速率過大又容易造成模型震蕩。為了抑制誤差更新中存在震蕩過大的問題,本文使用了RMSProp算法,該算法計算了微分平方加權函數(shù),有利于消除震蕩,使網絡收斂速度變快,本文將模型的學習速率設為1e-3,梯度衰減設為1e-4。
由于數(shù)據樣本偏少,本文采用了k-折疊交叉驗證來調整超參數(shù)并驗證模型泛化能力。交叉驗證的基本思想:是把原始數(shù)據分為k組,其中(k-1)組作為訓練集,1組作為驗證集。首先對模型進行訓練,然后在驗證集中驗證誤差,最后選擇誤差最小的模型。
混淆矩陣是對分類模型性能評價的重要工具,通過樣本真實類別與模型預測類別的組合,衍生出真陽性、假陽性、準確率、精確率等各種評價指標,可以更為準確地度量不同任務場景下的分類模型。
表3 混淆矩陣
準確率(Accuracy)是最為直觀的評價指標,即正確分類的樣本占所有樣本的比例。但在正負樣本不平衡的情況下,準確率無法很好地觀察到負類的預測情況。
召回率(Recall)是預測正確的正例占所有樣本的比例,表示了模型對正例的預測能力。該指標在醫(yī)學問題中非常重要,因為在臨床診斷中必須極力降低漏診率,本文在實驗中引入了召回率來評價模型。
受試者工作特征曲線(ROC)以假陽率為橫坐標、真陽率為縱坐標,反映每個位置對同一型號刺激的感受。在實際問題中,常常存在樣本不均衡的情況,但ROC曲線不因樣本分布而變化,是評價模型泛化能力的有效指標。
本實驗基于PyTorch深度學習框架,在GPU平臺上運行,處理器為Intel Xeon E5-2620@2.4GHz,GPU為NVIDIA Tesla K40m,運行內存64GB。
圖3 訓練集結果
圖3(a)為實驗在測試集上的準確率,可以看到隨著訓練迭代次數(shù)逐漸升高,同時模型誤差逐漸降低,在25次左右迭代的時候模型很好的學習到了誤差下降的方向。在迭代250次之后模型逐漸收斂,最終模型的準確率達到88.25%。
模型對測試集進行預測,預測結果在圖4中所示。
圖4 測試集結果
在樣本容量足夠的前提下ROC曲線可以直觀的評價分類器的好壞,視網膜病變檢測是個4分類問題,針對每一個分類將它視為2分類(是或否),以假陽率為橫軸、真陽率為縱軸,并畫出ROC曲線。
除了ROC曲線外,本文還從精確率、召回率和F1-分數(shù)等方面,針對每一類的分類結果來評價模型效果。從表4看到,模型的精確率和召回率較高,模型預測結果對臨床診斷有一定參考價值。
表4 各分類評價
圖5 各類別ROC曲線
本文基于深度卷積網絡,實現(xiàn)了對糖尿病患者眼底彩照的病變程度自動分類。通過歸一化操作克服了數(shù)據質量差異較大的問題,利用數(shù)據增強的方法解決了原始數(shù)據集規(guī)模較小的問題,通過加載預訓練模型克服了數(shù)據量較少造成的過擬合問題,同時縮短了訓練時間。在訓練過程中較為精確地提取了圖像的深層病變特征,在四分類任務上獲得了較高的準確率,該分類模型有助于醫(yī)生在臨床診斷中提高效率和準確率。在實驗的網絡結構上,我們僅采用了Inception-V4結構用于訓練,在未來的工作中考慮融合多個網絡模型,嘗試進一步提高分類準確率。