韓 勇,蘭 杰,郭瑞瑤,邢聰穎,黃新杰,霍迎秋
(西北農林科技大學 信息工程學院,陜西楊凌 712100)
中藥飲片是中藥材經過切制、炮制后可直接用于臨床的中藥。中國中藥資源豐富、品種繁多。藥材識別是中藥配方及飲片研究的關鍵技術之一,可用于中藥鑒定、分類識別、質量品質統計等領域,對臨床應用研究起重要作用,也能夠加快推動智能醫療建設,具有重要社會意義。很多中藥形態相似,導致鑒定和研究很困難。傳統的中草藥分類與質量評估涉及到性狀鑒別和顯微鑒別,鑒別方式過于主觀,且鑒別效率偏低,無法滿足中醫中藥產業化發展的客觀需求[1-3]。
目前基于圖像處理與模式識別技術在中藥檢測中的應用主要是從形狀、顏色和紋理中提取底層圖像特征[4-6]等分類方法進行識別鑒定,陶歐等[5]采用了樸素貝葉斯和十折交叉驗證方法,在中藥飲片的紋理特征基礎上進行飲片辨識模型的構建,具有一定的參考價值,但要先對每張圖像提取角二階矩、對比度、相關等紋理參數;也有學者構建綜合顏色特征向量用以進行圖像識別[6-10],獲得了較好的識別結果,但是淺層特征易受環境因素影響,準確度不高且存在偶然性。為了解決上述問題,可基于深度學習進行圖像識別[11-14],以深度學習為手段,研究建立深度卷積神經網絡模型來實現定位檢測、品種識別等功能;孫鑫等[15]利用卷積神經網絡CNN對50種中藥共計2554張圖進行訓練和測試,達到了70%的平均識別精度,但是識別精度過低,無法投入實際使用。綜上所述,目前利用深度學習對中藥材飲片進行識別的工作還仍在初級階段,僅有的研究中存在著識別精度不高、中藥種類數過少等問題,而對大量中藥飲片的精準識別鮮有實現;另外,圖像的識別環境過于簡單,與現實場景中多個飲片相互重疊的圖像不符,因此缺乏實際應用意義。
為了彌補上述不足,本試驗建立對多種中藥直接進行圖像識別的深度學習模型,提高識別率和實際可用性,可供藥檢部門、藥材公司和個人方便快捷地鑒別中藥,具有潛在的社會意義和經濟意義。試驗采集50種中藥飲片,共計15622張,構建圖像數據集,以稠密網絡模型為基礎建立深度學習識別模型,以期實現中藥飲片圖像的有效識別。
在中醫飲片圖像識別的研究領域中,目前還尚未見到相關用于試驗的數據集,因此很難在同一個標準下評估不同方法,為了解決上述問題,本次試驗的數據集均由筆者所在團隊在陜西省楊凌大寨衛生院的中藥部進行拍攝得到,共采集中藥類別50種。
拍攝均在白天正常日光下進行,每一種的數目達到300 張以上,一共獲得圖像15 622張。圖像均在白色背景板下用2 400萬像素的手機相機拍攝,每張圖片包含的飲片數量、分辨率、大小、復雜程度、色彩不限。50種常見中藥材名稱及其圖像數量如表1所示。
其中,將數據集按照7∶1.5∶1.5的比例劃分成訓練集、驗證集和測試集,其中2 340張用來測試,其余圖像用來訓練。在性能評估中使用所有的類別。對于飲片圖像的識別問題,將給出每一類的識別精度和所有類別的平均識別精度。圖1為部分數據集的展示。

圖1 部分中藥圖像Fig.1 Some slices of traditional Chinese herbal medicine
1.2.1 DenseNet-BC模型 選取傳統稠密神經網絡DenseNet為試驗模型。DenseNet由密集連接塊、過渡層、池化層、卷積層以及全連接層組成,具有網絡窄,參數少的特點,從而使得特征和梯度的傳遞更加有效。
DenseNet根據是否包含瓶頸層和壓縮層又分為以下三類:DenseNet-B(包含瓶頸層)、DenseNet-C(包含壓縮層)以及DenseNet-BC(既包含瓶頸層又包含壓縮層)。表2是DenseNet和DenseNet-BC在3 個數據集(C10,C100,SVHN)上的對比結果,由表中數據可知DenseNet-BC的網絡參數和相同深度的DenseNet相比減少很多,既可節省內存,還能減少過擬合。

表2 在CIFAR和SVHN數據集上的錯誤率Table 2 Error rate on CIFAR and SVHN datasets %
利用Keras框架選擇其中的DenseNet-201網絡進行復現。數據經過預處理后進入卷積網絡,網絡中包括1個初始卷積層,卷積核寬度為7,步長為2;初始卷積層后是一個最大池化層,連接4個密集連接塊,塊與塊之間使用過渡層連接,共3層;數據在經過最后一個密集連接塊后通過一個全局平均池化層將特征向量化,連接一個線性分類層完成分類。
表3為網絡模型結構。網絡中的卷積層定義為3個連續操作的復合函數:批量規范化處理,修正線性單元和核大小為1×1的卷積操作。稠密模塊是數個核大小1×1卷積層的卷積核組,這樣的卷積核組在4個稠密模塊中的數目分別為6,12,48和32,并且設置特征映射網絡的增長速率k為32。每個稠密模塊中特征映射網絡的大小是不變的,只有數量上的變化,因此需要用過渡層來連接不同的塊。過渡層是由一個核大小為1×1的卷積層連接一個步長為2×2的平均池化層組 成的。

表3 模型結構Table 3 Model structure
1.2.2 丟棄法 由于全連接層參數過多會產生過擬合,為避免網絡的過擬合,結合本文數據集,在傳統網絡模型基礎上引入丟棄法,隨機將50%的元素置零,這樣每次被學習的特征有所不同,每個特征都可以對模型的預測有所貢獻,同時也在訓練時起到正則化的作用。在多層感知機中,假設其輸入層節點數為n,那么隱藏層節點數為n+1,故而隱藏層節點hi(i=1,2,……,n)的輸出值計算方法為:
hi=φ(x1w1i+…+xnwni+bi)
(1)

(2)
由于期望值E(εi)=1-p,因此:
(3)
即丟棄法不改變其輸入的期望值。
根據Keras框架建立卷積快、稠密塊和過渡層等模塊,在卷積模塊中主要進行批量標準化層、利用ReLu()激活函數將一個節點的輸入信號轉換成一個輸出信號和卷積等操作;稠密模塊是卷積層的疊加,每一個卷積層都與其之上的同一個稠密模塊中的卷積層有相互鏈接;過渡層連接每個稠密模塊,并使用平均池化層進行降維、特征壓縮和減少網絡復雜度。利用構建的DenseNet-201模型分別在中藥材圖像測試數據集上進行測試,并統計分析試驗結果。模型的訓練和測試流程如圖2所示。

圖2 模型訓練和測試流程Fig.2 Model training and testing process
其中對數據集的預處理操作如下:首先把像素點的值除以255,使之為0~1,將圖片進行歸一化處理,接著進行水平或垂直投影變換,同時在長寬兩個方向進行50%的放縮操作,并在[0,30]度范圍內進行隨機角度旋轉,隨機對圖片執行水平翻轉操作,擴充訓練集。對測試集只進行歸一化操作。
采用批量訓練的方法將訓練集與測試集分為多個批次,初始學習率設為0.000 5,采用Adam優化器,當驗證集上的準確率停止提升3個迭代次數時,降低學習速率,其中Adam方法能夠在訓練過程中自適應調整學習率,很適合高維度和大數據集得到非凸優化,一共迭代50個周期。由于GPU的特性,批量大小(batch size)最好選用8、16、32、64等,batch size太小會導致網絡收斂不穩定,收斂慢,過大會增加花費的時間,對參數的修正也就顯得更加緩慢,同時后期訓練效果不顯著。綜上,本試驗將batch size分別設為8、16、32,依次進行試驗,找出與本數據集適宜的批量 大小。
不同批量大小的模型在驗證集上的準確率與迭代次數的關系如圖3所示。雖然穩定后的模型準確率均在97%左右,但收斂時間大有差別。可以看到batch size為16時,模型在第20個迭代之后就達到收斂,模型穩定性最好,準確率穩定在在90%以上;其次是batch size為8時,模型迭代30次之后達到穩定;而當batch size為32時,模型驗證率起伏較大,收斂相對比較慢,迭代40個周期才逐步收斂。

圖3 不同批量大小下的識別率與迭代次數Fig.3 Accurate rate and iteration times under different batch sizes
采用交叉驗證算法驗證魯棒性,模型在驗證集上的損失函數變化如圖4所示。從3個曲線可以看出,在迭代的前20次內損失值都處于振蕩狀態,但當批量為16時,損失值在第20次迭代后開始迅速下降,并維持在很低水平,在0.1左右震蕩,而其余兩個模型先后在第25次迭代和第30次迭代后逐步到達穩定狀態。從這里也可得出批量設為16時,模型擁有較強的魯棒性。

圖4 不同批量下損失值和迭代次數Fig.4 Loss and iteration times under different batch sizes
利用這3 種模型分別對50種中藥測試集進行測試分類,測試結果如圖5所示,可見只改變批量時,模型的分類性能很接近,只是在某些中藥材上的識別率略有差別。對于每一種模型,識別率在85%以上的藥材均占到45種,占到類別總數的90%,最高識別率可達100%。

圖5 不同批量大小下50種中藥的測試結果Fig.5 Test results of 50 kinds of Chinese herbal medicine slices under different batch sizes
由表4可見,批量大小對試驗結果有一定的影響。對于數據集數目龐大的試驗,一次性加載所有數據是不可行的,但如果批量大小設置的太小,模型又很難達到收斂。在合理的范圍內,增加批量大小既可以增加內存利用率又可以加快數據處理速度,但增大到一定程度時,其確定的下降方向已經基本不再變化,且對參數的修正也就顯得更加緩慢。batch size為16時的平均識別準確率達到95.21%,表現出最優秀的識別效果,而增大到32時,識別率與之相差無幾,但卻占用大量的內存空間。

表4 不同批量下的識別率Table 4 Recognition rate under different batch sizes
為了進一步探索試驗結果,在識別率最高的試驗2的基礎上進行深入研究,以最佳模型(即批量大小設置為16,初始學習率為0.001,迭代次數為50)對50種中藥進行識別分類,每個類別上的識別率如表5所示,結果表明此模型在23種藥材上的識別精度均達到100%,其中識別率在90%以上的種類達到43種,占總類數的86%;平均識別率達到95.21%,表現出優異的性能,可以精準識別絕大多數的中藥飲片。因此,手動搭建的稠密神經網絡在加入丟棄法防止過擬合的情況下,不僅在識別精度上保持著較好的準確性,而且在多個藥片環境下也具有良好的魯棒性。

表5 每種藥材的識別率Table 5 Recognition rate of eachmedicinal material
盡管模型取得不錯的效果,但是試驗中也出現一些低質量的識別結果。其中在類別21雞血藤上和類別36的識別率很低,只有44.4%和70%,如圖6、圖7所示。具體原因可能是該類中藥片拍攝問題,導致圖像模糊,紋理細節不清晰,另外選擇的白色背景板在陽光下呈透明狀態,板上的劃痕增加了背景復雜度,影響了識別率。另一個重要原因是類別中同類型的樣本紋理特征差異較大,紋理特征和顏色不同。

圖7 檳榔片Fig.7 Pictures of betel nut
為了驗證該模型和次數據集的擬合度,將同樣的數據集置于ResNet網絡、Wide_resnet101_2網絡和Densenet121網絡上分別進行對比試驗,試驗條件完全相同的情況下,試驗結果如表6 所示。

表6 模型驗證結果Table 6 Validation results of model
由表6可知,該數據集在殘差網絡模型下的擬合度并不優秀,識別準確率也比稠密網絡低 3.81%至10.05%。同時從該模型在驗證集上的識別率和損失值皆在20個迭代左右就穩定在97%和0.1左右,綜上可得出該模型與預測值更加接近,有較好的泛化能力。
為解決中藥飲片識別困難、效率低的問題,本試驗組織研究人員經過多次、長時間的工作,構建了包含常見的50種中藥片的數據集,每種藥材均包含300張以上圖像,其中既有單個飲片圖像也有多個飲片重疊圖像,模擬了真實的實際應用環境。基于深度學習技術建立DenseNet-201中藥飲片識別模型,并引入“丟棄法”、“控制變量法”優化模型,防止模型過擬合,提高模型識別效果。試驗結果表明該模型能夠對常見的50種中藥材進行有效分類和識別,其中有43種中藥識別率90%以上,最高識別率為95.21%,因此基于深度學習的中藥飲片識別方法能夠快速、高效進行中藥飲片識別,具有較好的實際應用價值。