杜霞
(四川大學計算機學院,成都 610065)
糖尿病性視網膜病變(Diabetic Retinopathy,DR)是一種嚴重的糖尿病眼底微血管并發癥,DR在導致20-74歲成人失明的因素中排列首位[1]。據WHO發布的2016年《全球糖尿病報告》數據,全球截止2014年成人中糖尿病患者已經達到4.22億,患病率顯著上升。在已有15年以上糖尿病史的患者中,80%以上患有DR。DR的病情發展是漸進變化的,及時檢查和治療是預防失明的有效手段。在醫學上,根據視網膜眼底圖像的特征對DR病情階段進行了準確的分類,也是醫生臨床診斷的重要標準。在實際診斷中,主要存在的問題包括:分類準確性極度依賴醫生的臨床經驗;眼底照相的質量受到操作技術、設備、光線等影響較大;圖像中存在的細微特征依靠肉眼難以辨別等[2]。
基于DR在人工診斷存在的困難,大量研究嘗試用計算機技術進行DR的自動診斷,研究方法主要分為傳統機器學習和深度神經網絡算法。在傳統機器學習方向,Roychowdhury[3]等人綜合利用高斯混合模型、k緊鄰分類器、支持向量機以及AdaBoost四種算法來訓練分類器,最終在小型數據集的二分類問題上得到了較好的效果。Jelinek[4]等人采用Gabor小波變換,對27張血管被熒光標記的視網膜圖像進行分割,并根據面積、邊界等五個傳統特征進行病變分類,在多特征判別下,對是否存在DR增殖性病變分類任務上取得了90%的AUC值。Nayak[5]等人通過提取滲出物面積、血管面積和紋理特征,使用這些特征訓練神經網絡,將彩色眼底圖像分為非DR、增值性DR和非增值性DR三類,并在140張圖片的小型數據集上取得了93%的準確率。傳統機器學習在小數據集上可以取得良好的效果,但面對大量數據時則難以突破,研究者開始嘗試深度神經網絡方法。Gulshan[6]等人采用卷積神經網絡方法,在擁有128175張眼底圖像的大規模數據集上訓練,最終在DR的三分類任務上獲得了最高97.5%的靈敏度。Ghosh[7]等人在Kaggle提供的超過30000張圖像的數據集上,分別在二分類和五分類問題上獲得了95%和85%的準確率。Li等人[8]采用遷移學習的方法,對預訓練好的卷積網絡進行微調,在1000張左右的小數據集上實現了92.01%的準確率,證明了遷移學習對提升神經網絡在小數據上的表現有所幫助。Li等人[9]基于CNN網絡,在超過70000張圖片的中國人眼底數據集上達到了95.5%的診斷率。
本文通過深度卷積網絡模型,實現了對DR眼底彩照的自動分類。通過數據清洗、標定等完成了DR_data私有數據集的建立;并采用翻轉、旋轉、平移等方法進行數據增廣,克服了數據量不足以及數據類別分布不均衡問題。本文采用了遷移學習的方法和Inception-V4網絡模型,在DR的四分類任務上獲得了較好的準確率和魯棒性。
卷積神經網絡(Convolutional Neural Networks,CNNs)是一種常用的深度神經網絡模型,在圖像處理問題上具有突出表現。最早于1962年,Hubel和Wiesel等人受到貓的啟發,提出了感受野的概念[10];由Yann LeCun等人于1989年正式提出了卷積神經網絡模型[11];2012年Hinton等人[12]提出加入權重衰減的CNN模型,將ImageNet[13]數據集上的圖像分類錯誤率大幅降低至16%,后續許多基于該架構的網絡模型取得了驚人的成果[14-16]。
CNN主要由輸入層、卷積層、池化層、全連接層以及輸出層等五種結構組成,其中卷積層(convolutional layer)和池化層(pooling layer)是CNN中非常關鍵的結構。卷積層的每個節點與前一層網絡的部分區域相連,通過卷積操作提取輸入層的特征,深層的卷積網絡可以提取抽象程度更高的特征[17]。其中池化層的操作與卷積類似,但并不計算神經元的加權和,只影響一個深度上的神經元。常用的池化操作有最大池化和平均池化兩種,池化層可以快速地減少矩陣的大小,加快計算速度并防止過擬合。卷積運算中的三個關鍵思想,包括稀疏連接、權值共享和等值變化,對減少網絡參數、提升計算效率起到了重要作用。
傳統CNN在發展過程中,由于不斷加深網絡深度和寬度,導致網絡參數增加,更容易出現過擬合現象。Szegedy等人[18]于2014年提出了GoogleNet網絡結構,該網絡在ImageNet競賽上取得了非常好的效果。該網絡中設計的Inception-V1模塊包含了多維度的卷積結構疊加和最大池化操作來減少參數數目,具有不同感受野的卷積可以實現不同級別的特征提取。在Inception-V2模塊中,增加了對中間特征的歸一化操作,可以使用較大的學習率以加快收斂速度,同時也具有正則化效應。Inception-V3中引入了“因子化”(Factorization)的概念,將一些尺寸較大的卷積分解為更小的卷積,在保證網絡效果等價的前提下減少了參數量。Inception-V4網絡主要對前幾個版本做了規范和簡化并將網絡遷移到TensorFlow平臺執行,可以更好地利用計算資源。在殘差網絡(ResNet)[19]的基礎上,Szegedy等人提出的Inception與ResNet集成的網絡結構,在ILSVRC 2012上達到了3.08%的top5錯誤率。

圖1 Inception模塊
通常CNN模型例如LeNet、AlexNet、VGG等通過使用卷積、池化、標準化和激活函數的疊加來增加網絡深度以期達到更好的效果。Inception-V4更是增加了殘差連接這一設計理念,Christian[20]發現利用殘差連接設計更深更寬的Inception網絡可以顯著提高網絡表現。因此Inecption-V4有著更多Inception模塊其中包括4個Inception-A和7個Inception-B和3個Inception C模塊。本文在實驗中使用了Inception-V4網絡結構。

表1 Inception-V4網絡模型
對于醫學圖像數據集來說,獲取數據的成本十分高昂,因此缺乏大量訓練數據是一個主要問題。神經網絡參數較多,如果訓練樣本不足,模型容易出現過擬合現象,所以數據增強和遷移學習方法[21]是必要的。類似于人腦的神經系統,卷積神經網絡對模型的學習是一種層級結構,從圖形的邊緣、角點到局部特征,再到全局特征,預訓練模型在提取圖像深度特征的過程被廣泛使用。深度神經網絡通常具有大量參數使得訓練一個深度網絡需要大量時間和計算資源,遷移學習方法可以使能我們把在大數據的模型(源領域)遷移到小數據(目標域)上僅僅做參數的調優而不用從頭訓練。本文使用基于ImageNet的預訓練模型,其中包含120萬副圖像和1000種分類類別,最后在DR_data數據集調優以達到減少訓練時間和對樣本量的需求。
本文采用的DR_data數據集為私有數據集,與四川省人民醫院合作建立,由該院眼科、內分泌科和體檢中心采集的部分眼底檢查彩照組成。一位患者單次眼底檢查會分別對左眼和右眼進行拍照,診斷時左右眼的結果相互獨立,因此將一位患者的檢查結果整理為左眼和右眼兩例數據,每例數據對應一位患者的一只眼睛,包含若干張眼底彩照。DR_data數據集共有1333例數據,2409張眼底彩照。
數據收集完成后,由三名專業眼科醫師(包括一位眼科主任醫師)進行病變程度人工標定。根據DR在病變發展階段的特征,國際上主要將DR分為非增生性(PDR)和增生性(NPDR)兩期[23]。在數據標記階段中,參與醫生根據眼底彩照所表現的病變特征和臨床對應的治療措施,將病變劃分為四個類別:正常、輕度(非增生性)、中度(非增生性到增生性之間)、重度(增生性)。
標定后的數據集中包含正常56例、輕度367例、中度700例、重度210例。為了在網絡訓練時進行交叉驗證,將數據集隨機劃分為兩部分:80%的訓練集和20%的測試集。

圖2 數據集示例

表2 數據集分布
數據集原始圖像的分辨率為2464×1632,較高的分辨率可以保留圖像更多細節特征,但也會增加模型參數量、需要大量計算資源。通過已有研究和多次嘗試結果比較,本文將輸入圖像的尺寸減小到512×512分辨率,可以在模型效率與分類準確率之間取得較好的平衡。
樣本間差異導致的數據分布的偏移經過多層卷積網絡的疊加,會影響梯度變化的方向。本文使用了歸一化方法將不同數據的亮度、顏色等數值都歸一化到同一個范圍,該操作一定程度消除了數據差異帶來的噪聲。
相較于其他圖像分類問題的數據集規模,本文數據集規模較小,并且各類別的數據量不平衡。因此,為了讓模型有更好的泛化能力以及避免學習結果偏向某個類別,本文采用了一些數據增強的方法如:隨機翻轉、旋轉 45°/90°/180°等角度、從圖像上下左右四個方向剪裁等。
本文模型使用隨機梯度下降優化器(SGD),SGD算法可以收斂到局部最小值,如果學習速率小則學習速度過慢,學習速率過大又容易造成模型震蕩。為了抑制誤差更新中存在震蕩過大的問題,本文使用了RMSProp算法,該算法計算了微分平方加權函數,有利于消除震蕩,使網絡收斂速度變快,本文將模型的學習速率設為1e-3,梯度衰減設為1e-4。
由于數據樣本偏少,本文采用了k-折疊交叉驗證來調整超參數并驗證模型泛化能力。交叉驗證的基本思想:是把原始數據分為k組,其中(k-1)組作為訓練集,1組作為驗證集。首先對模型進行訓練,然后在驗證集中驗證誤差,最后選擇誤差最小的模型。
混淆矩陣是對分類模型性能評價的重要工具,通過樣本真實類別與模型預測類別的組合,衍生出真陽性、假陽性、準確率、精確率等各種評價指標,可以更為準確地度量不同任務場景下的分類模型。

表3 混淆矩陣
準確率(Accuracy)是最為直觀的評價指標,即正確分類的樣本占所有樣本的比例。但在正負樣本不平衡的情況下,準確率無法很好地觀察到負類的預測情況。

召回率(Recall)是預測正確的正例占所有樣本的比例,表示了模型對正例的預測能力。該指標在醫學問題中非常重要,因為在臨床診斷中必須極力降低漏診率,本文在實驗中引入了召回率來評價模型。

受試者工作特征曲線(ROC)以假陽率為橫坐標、真陽率為縱坐標,反映每個位置對同一型號刺激的感受。在實際問題中,常常存在樣本不均衡的情況,但ROC曲線不因樣本分布而變化,是評價模型泛化能力的有效指標。
本實驗基于PyTorch深度學習框架,在GPU平臺上運行,處理器為Intel Xeon E5-2620@2.4GHz,GPU為NVIDIA Tesla K40m,運行內存64GB。

圖3 訓練集結果
圖3(a)為實驗在測試集上的準確率,可以看到隨著訓練迭代次數逐漸升高,同時模型誤差逐漸降低,在25次左右迭代的時候模型很好的學習到了誤差下降的方向。在迭代250次之后模型逐漸收斂,最終模型的準確率達到88.25%。
模型對測試集進行預測,預測結果在圖4中所示。

圖4 測試集結果
在樣本容量足夠的前提下ROC曲線可以直觀的評價分類器的好壞,視網膜病變檢測是個4分類問題,針對每一個分類將它視為2分類(是或否),以假陽率為橫軸、真陽率為縱軸,并畫出ROC曲線。
除了ROC曲線外,本文還從精確率、召回率和F1-分數等方面,針對每一類的分類結果來評價模型效果。從表4看到,模型的精確率和召回率較高,模型預測結果對臨床診斷有一定參考價值。

表4 各分類評價

圖5 各類別ROC曲線
本文基于深度卷積網絡,實現了對糖尿病患者眼底彩照的病變程度自動分類。通過歸一化操作克服了數據質量差異較大的問題,利用數據增強的方法解決了原始數據集規模較小的問題,通過加載預訓練模型克服了數據量較少造成的過擬合問題,同時縮短了訓練時間。在訓練過程中較為精確地提取了圖像的深層病變特征,在四分類任務上獲得了較高的準確率,該分類模型有助于醫生在臨床診斷中提高效率和準確率。在實驗的網絡結構上,我們僅采用了Inception-V4結構用于訓練,在未來的工作中考慮融合多個網絡模型,嘗試進一步提高分類準確率。