(北京工業大學 信號與信息處理研究室,北京 100124)
中醫舌診是中醫學中望診的重要組成部分,指通過觀察舌象的變化,了解人體生理功能和病理變化。舌苔顏色作為舌象最基本的特征之一,其顏色變化可反映臟腑的寒、熱、虛、實、病邪的性質和病位的深淺[1]。從人眼視覺的角度,舌苔顏色一般有白苔、黃苔和灰黑苔三類,然而,在中醫臨床舌診中,這種苔色分類方法對于中醫辨證論治的指導意義并不明顯,中醫大夫常常將舌苔的厚度與舌苔的顏色相結合,通過觀測舌苔顏色和厚度的變化,得出身體真實的病理情況。因此,根據中醫專家對舌苔顏色的劃分,舌苔顏色主要分為薄白苔、白厚苔、薄黃苔、黃厚苔和灰黑苔5類。在實際舌診中,舌象特征的診斷通常取決于醫生的主觀判斷,不同的光源和亮度等外界因素會對醫生產生干擾,不可避免地影響了舌診的可靠性和可重復性。因此,利用計算機對舌苔顏色進行精準化分析,對促進中醫舌診客觀化研究具有重要的實際意義[2]。
在利用計算機對舌象特征進行分析時,常常結合中醫醫師的先驗知識,提取舌圖像的語義特征,從舌圖像中得到與機體的生理功能和病理變化相關的舌象特征[2-3]。舌苔顏色作為舌象最基本的特征之一,其分類的準確程度決定了后續舌象自動分析的有效性,因此對舌苔顏色進行分類研究,對促進中醫舌診客觀化研究具有重要的實際意義。
以計算機圖像分析技術為主要手段進行舌象特征自動分析,是20世紀80年代發展起來的一種舌診客觀化研究方法,此后,香港理工大學[4]、臺灣蓬甲大學[5]和北京工業大學[6]等各大機構紛紛開展相關工作,在舌象顏色校正、舌象分割和舌象特征分析等方面取得了一定的研究成果。筆者所在的北京工業大學信號與信息處理研究室早在20世紀90年代末期,就在國內率先開展了中醫舌象數字化、客觀化和定量化的研究工作,在中醫舌面象信息的數字化采集與自動分析方面取得了豐厚的研究積累[2-3,6-11]。
目前,關于中醫舌苔顏色的研究工作有很多,總的來說,這些工作的基本思路是將中醫舌苔顏色的自動分析看作是分類問題,在分類時,通過提取舌苔的顏色特征和紋理特征等手工特征,然后通過“特征+分類器”或“特征+相似性度量”的分類模式進行舌苔顏色分析。其中較為常用的舌苔顏色分析方法有:基于支撐向量機(Support Vector Machine,SVM)的分析方法[8-9]、基于人工神經網絡的分析方法[10]和基于稀疏表示分類器的分析方法[11]等。文獻[8]提出了一種基于聚類樹算法的舌苔顏色分類方法,對舌苔顏色和厚度進行了定量化描述。文獻[9]將Universum SVM應用于舌象樣本的分類中,在舌苔顏色分類中取得了84.44%的分類準確率。文獻[10]采用學習矢量量化神經網絡分類器進行舌苔顏色自動分析,能夠獲得85%的識別效果。文獻[11]采用稀疏表示分類器的中醫舌苔顏色自動分析方法,通過重建最小殘差的方式實現舌苔顏色分類,識別準確率達到90.51%。在這些分析方法中,SVM與ANNs是兩個常用的分類器,SVM比較適合解決小樣本、非線性等模式識別問題[12],但其最終性能依賴于核函數的選擇,需要投入大量的理論分析工作。而人工神經網絡特有的非線性適應性信息處理能力,能夠較好地適用于苔色分析方面,具有較強的泛化能力,但其訓練易陷入局部最小值。稀疏表示分類器雖然對數據的缺損并不敏感,但字典的質量對稀疏編碼的性能具有非常重要的影響。
雖然基于傳統手工特征的舌苔顏色分析方法已經取得了一定的研究成果,但是總的來說,以手工特征建立的分析模型對光照比較敏感,分析性能的好壞常常依賴于手工特征的選擇。若光照條件發生變化,以手工特征建立的分析模型將失去作用,使得這些研究成果的識別性能尚不能達到中醫舌診實際應用的要求,所以需要引入新的信息處理技術來解決這些問題。
近幾年來,深度學習在圖像分類等計算機領域取得了巨大成功[13-14]。其中,卷積神經網絡(Convolutional Neural Networks,CNN)憑借其強大的特征學習與表達能力被廣泛應用于圖像分類。雖然目前CNN網絡模型多種多樣,但其網絡結構主要由卷積層、池化層和全連接層3種類型的層級成,如圖1所示。CNN通過交替進行卷積、池化等操作,逐層提取特征,底層學習到局部特征,高層學習到全局特征,隨著網絡層數的增加,學習到的特征越來越抽象,特征經全連接層與分類器相連,輸出分類類別。

圖1 CNN分類網絡模型結構
卷積神經網絡的出現,為更智能化的舌象特征分析提供了可能。利用卷積神經網絡訓練出來的分類模型,具有更高的泛化能力,能更好地適應復雜多樣的數據情況。目前已有研究將卷積神經網絡應用于舌象特征分析中,文獻[15]利用PCANet提取深度特征,在正常舌和異常舌的二分類問題上取得91.14%的效果,但尚未對舌象特征進行后續分析。最近,筆者所在研究室也將深度學習的理論知識引用到舌象特征分析中,采用一層卷積加3層全連接的神經網絡架構,對舌苔顏色進行分類研究,相比于傳統方法,分類性能平均提升4.48%,但采用的網絡結構相對簡單,分類性能尚有待提高[16]。
舌圖像雖是在自然條件下拍攝得到,但其與普通自然圖像相比卻具有顯著不同。首先,舌圖像的獲取條件較為苛刻,通常要求在具有良好外界條件下拍攝,這樣才能避免引入過多的外界干擾;其次,樣本的標注需要依賴權威醫生的標注,經驗不足的醫生或非專業人士標注的數據往往會導致雜亂的注釋,引起歧義,同時舌圖像的獲取代價較為昂貴,造成實際可以用來實驗的樣本數量較少;最后,采集的樣本來源以健康或亞健康人群居多,而常見病比例不均衡,造成采集到的樣本類別之間存在樣本數量不均衡的狀況,以此數據建立的分類模型在對舌象特征進行識別時容易產生小樣本偏向大樣本類別的情況。盡管將深度學習的理論應用于苔色分析中已取得初步發展,但是樣本數量有限以及類別不平衡的客觀因素仍是制約客觀化研究的重要因素。因此,本文針對舌苔樣本數量有限且類別不平衡的特點,對舌象樣本中不平衡的舌苔顏色類別進行數據擴充處理,然后通過設計輕型卷積神經網絡,將特征提取和分類結合到一個框架中,通過數據驅動學習圖像與其屬性的映射關系,實現舌苔顏色的精確分類。
本文提出的基于輕型CNN網絡的舌苔顏色分類方法的基本思想是:首先,對已標注的舌苔訓練樣本通過幾何變換等數據擴充方式平衡數據集;然后,設計輕型卷積神經網絡,將特征提取和分類納入到一個框架結構中,利用平衡后的數據集進行網絡模型訓練,通過設置網絡參數和迭代次數,選擇具有最優分類性能的模型作為最終的舌苔顏色分類模型;最后,利用訓練好的舌苔顏色分類模型對預測舌圖像進行識別,通過提取圖像中的舌苔圖像塊進行識別,得出苔色分類結果。該方法的整體框圖如圖2所示。

圖2 基于輕型CNN模型的舌苔顏色分類整體框圖
如前所述,由于實際采集到的舌苔顏色多以薄白苔為主,其他顏色相對來說數量較少,特別是灰黑苔樣本很少見,所以舌苔顏色數據集各類別數量之間存在不平衡狀況。因此在訓練舌苔顏色分類模型之前需要進行平衡數據集操作,通過數據擴充手段,如鏡像、翻轉、平移和尺寸變換等,對舌苔數據集進行平衡處理。
根據中醫理論,中醫專家往往將舌苔顏色分為5類:薄白苔、白厚苔、薄黃苔、黃厚苔和灰黑苔。為了使訓練樣本盡可能標準且典型,實驗中所使用的訓練樣本為若干由中醫專家逐塊確定類別的一系列圖像子塊,圖像子塊的大小必須兼顧統計特性和精確度。由于舌苔是舌質上附著的苔狀物,透過舌苔能隱隱見到舌質的為薄苔,不能見到舌質的為厚苔[1],因此圖像子塊的選擇必須有效區分薄苔和厚苔,以確保實驗結果的精確度。舌苔實驗樣本塊的示例如表1所示。

表1 舌苔顏色訓練樣本塊示例
實驗樣本集共1158例,實驗樣本按照4∶1的比例隨機劃分為訓練數據和測試數據,其中訓練數據用于網絡模型訓練,測試數據用于計算最終的模型分類精確度。在分類模型訓練之前需要平衡樣本以保證訓練不會偏向較大樣本類別。因此,對訓練數據采用鏡像、旋轉方式進行了數據平衡,測試數據保持不變,平衡前與平衡后的樣本分布如表2所示。

表2 平衡前與平衡后的各類樣本分布 單位:例
平衡策略可如下表示。
① 保持最大類的樣本數目不變,在本實驗中薄白苔樣本有404例,為數量最大類別,因此其數量保持不變。
② 根據少數類與最大類的數量之間的差異,對少數類進行樣本擴充,擴充方式首先選擇鏡像操作,如果擴充后樣本類別差別很大,則再選擇旋轉操作,直到樣本類別數目不大。例如表2中灰黑苔具有75例,首先進行鏡像操作擴充數據一倍變為150例,由于鏡像操作后樣本數量和最大類數量相差很多,所以再進行旋轉操作,分別旋轉90°、180°和270°,共擴充3倍。其中,旋轉的角度可以根據實際樣本的數量進行選擇,即在對原始樣本進行旋轉操作時,根據需要擴充的樣本數目,選擇擴充1倍或多倍,旋轉角度選擇90°或其他度數的組合。
③ 將擴充的樣本與原有樣本一起作為數據集,并保證每類樣本的最終數量相同或相差不大。
在大規模數據支持的基礎上,CNN 可以實現較高的識別準確率。但是在一些應用中,數據很難收集,標定過程費時費力,訓練樣本數據的不足將導致過擬合的發生,產生較低的識別準確率。在本文中,選擇AlexNet[17]作為基礎網絡,這是因為AlexNet相比于其他網絡模型,如VggNet[18]、GoogleNet[19]和ResNet[20]等,具有較淺的網絡結構,在小樣本下不容易出現過擬合的問題。對于舌苔顏色分類問題來說,因為樣本數量的限制,選取的深度學習網絡模型層次不宜過深。因此,對AlexNet網絡結構進行修改,通過減少網絡參數來設計輕型網絡結構的舌苔顏色分類模型,以此來克服過擬合現象,提高識別準確率和模型的魯棒性。
對網絡結構的修改如圖3所示,首先為了減少網絡參數以避免過擬合,摒棄了11×11或7×7大小的卷積核,網絡結構中的卷積核大小皆為5×5或3×3,并減少了全連接層的輸出數目,將第一個全連接層原始輸出數目從4096減少到1024,將第二個全連接層的原始輸出數目從1024減少到512;然后為了提高網絡的泛化能力,保留了原網絡中的LRN層與Dropout層;同時為了減少特征圖尺寸和參數數目,在每次卷積操作結束后均進行池化操作,池化操作可以從一個區域中通過某種方式得出一個值作為特征,從而降低卷積層輸出的特征圖的維度,同時非常有效地縮小參數矩陣的尺寸,從而減少最后全連層中的參數數量。

圖3 舌苔顏色分類模型架構
網絡采用以下幾種網絡優化策略和訓練技巧,以提高網絡模型分類性能。
2.2.1 修正線性單元
修正線性單元(Rectified Linear Unit,ReLU)函數是目前在網絡結構中應用較為廣泛的一種激活函數,常用于卷積操作之后和池化操作之前,可以使網絡具有非線性,增加網絡對于復雜函數的擬合能力,對于輸入x,其輸出F(x)的數學形式為
F(x)=max(0,x)
(1)
傳統的激活函數sigmoid或者tanh函數都是飽和非線性函數,即函數值達到一定程度之后,變化會非常小,幾乎為零,容易出現梯度消失問題。ReLU激活函數能夠保留結果中的正數,不僅可以解決梯度消失問題,還可以加快收斂。
2.2.2 局部響應歸一化層

(2)
式中,(x,y)為卷積操作的位置;N為該層中的核總數;i為第i個卷積核;k,n,α和β都是超參數,在網絡中需要根據實際情況進行賦值。
2.2.3 Dropout策略
Dropout是一種重要的防止模型過擬合方法,指在模型訓練時隨機讓網絡某些隱含層節點的權重不工作,不工作的那些節點可以暫時認為不是網絡結構的一部分,但是它的權重被保留下來,在下次樣本輸入時它可能又得以工作。Dropout過程就是一個非常有效的結合多模型決策的方法,通過訓練大量的不同的網絡,來平均預測概率。不同的模型在不同的訓練集上訓練,其中每個批次的訓練數據都是隨機選擇,最后每個模型用相同的權重來“融合”,以此來使網絡學習到更加魯棒的特征,提高模型的泛化能力。
在分類器選擇方面,選擇Softmax分類器作為模型的最終分類器,通過計算當前樣本屬于每一類別的概率,選擇具有最高概率的那一類作為當前樣本的類別。Softmax回歸模型是Logistic回歸模型在多分類問題上的擴展。相比訓練多個Logistic回歸來做多分類問題,Softmax回歸更適合類別間是互斥的情況。設m個訓練集樣本為{(x(1),y(1)),…,(x(m),y(m))},向量x(i)的維度為n+1,類標y可以取c個不同的值,則回歸模型的代價函數J(θ)為
(3)

所使用的舌象樣本是在首都醫科大學宣武醫院中醫科采集得到,共采集了249張,并按照苔色分布情況由中醫專家選取標準塊,共獲得1158例實驗樣本。在經過樣本平衡處理后,共得到2257例實驗樣本。本實驗提出的網絡架構使用Tensorflow架構進行實現。系統配置為Intel?CoreTMi7-6700 CPU 3.40 GHz,16 GB內存,TITAN X Pascal顯卡。具體實驗中,首先對所提出的網絡模型的識別性能進行測試;然后對樣本平衡前與平衡后的網絡模型準確率進行對比分析;最后通過不同模型分類準確性之間進行對比,驗證網絡模型的有效性。
基于上述的舌苔樣本庫,進行舌苔顏色分類模型訓練。分類模型訓練采用Adam梯度下降算法,其相比于SGD隨機下降算法具有更好的收斂速度。網絡輸入統一歸一化為100像素×100像素大小,訓練參數設置如表3所示。

表3 網絡訓練參數設置
在實際模型訓練中將訓練數據集全部訓練一遍稱為一個epoch,在實際模型訓練中,訓練樣本共進行了1000個epoch的訓練,每100個epoch保存一個模型,并用訓練模型在測試集上進行了分類性能測試,如果分類器對測試樣本的分類結果與舌象樣本標注相同,則認為分類正確,否則則認為分類結果錯誤。不同epoch下的分類準確性如圖4所示。

圖4 不同epoch下的分類準確率
從圖4中可以看出,不同epoch下的分類準確率存在一定的差異,在實際模型選擇時,應設定適當的迭代次數來獲得最優的識別準確率。因此,選擇在epoch為900時訓練出的模型作為苔色分類的最終模型,此模型在測試數據集下能取得約94.85%的分類準確率,所得到苔色分類結果的混淆矩陣如表4所示。
表4中,矩陣中對角線上的數值為每類分類正確的樣本數量,其他為誤分類的樣本數量。如混淆矩陣的第一行中被正確分類的薄白苔有98例,有2例被誤分為白厚苔,有1例被誤分為薄黃苔。

表4 舌苔顏色分類的混淆矩陣
除此之外,在同一模型上對數據不進行平衡處理和進行平衡處理兩種情況下訓練的模型準確率進行了比較,實驗結果如圖5所示。

圖5 樣本平衡前與平衡后的分類準確率對比
從圖5中可以看出,未進行數據平衡處理的數據集訓練的分類模型各類別的分類準確率之間相差較大,且在多數類上的分類準確率明顯高于少數類;但在經數據平衡處理的數據集訓練的分類模型上的各類別的分類準確率之間相差較小。如在未進行樣本平衡之前,薄白苔樣本因為數量最多,其分類準確率達到99.01%,但在薄黃苔、白厚苔類別上的分類準確率則比較低,分別為78.38%、84.62%,而樣本經過平衡處理后,雖然薄白苔的準確率下降到96.04%,但在薄黃苔、黃厚苔類別上的分類準確率則分別提高到94.59%、92.31%。因此樣本平衡后與樣本平衡前的分類結果相比,雖然由于樣本擴充改變了數據的分布,使得樣本各類的訓練更加均衡,在多數類上的分類準確率有所下降,但在少數類上的分類準確率得到提升,且整體平均準確率由93.13%提高到94.85%。
為了驗證所采用的網絡的有效性,將所設計的網絡架構與目前主流的網絡架構LeNet、AlexNet、VggNet16、ResNet18以及文獻[16]的分類模型采用相同訓練方式在相同的數據集下的模型分類準確率進行了對比。對比結果如圖6所示。

圖6 不同分類模型的分類準確率對比
從圖6中可以看出,上述幾種網絡模型在相同數據集下分別取得94.42%、93.13%、93.99%、93.56%和92.71%的分類準確率。因此,所設計的網絡架構能夠取得更好的94.85%分類性能,相比其中最高的網絡模型準確率可以提升0.43%。
本文結合中醫醫師的診療經驗,提出一種基于輕型卷積神經網絡架構的舌苔顏色分類方法。首先,對樣本中不平衡的舌苔顏色類別進行數據擴充;然后,根據舌象樣本的特點,設計了一種輕型卷積神經網絡,將特征提取和分類納入到一個框架中統一進行處理;最后,通過數據驅動學習圖像與其屬性的映射關系,得到苔色分類模型,從而實現舌苔顏色的分類。實驗證明,所提出的方法在舌苔顏色分類方面能取得更好的分類性能。未來,將通過完善數據集和優化網絡結構的方式,進一步提高舌苔顏色分類的準確率。希望通過進行這一研究,能夠促進中醫舌診智能化分析的發展,同時對輔助中醫臨床診療及臨床研究具有現實意義。