溫坤哲,韋玉科
(廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,廣州510006)
舌診是中醫(yī)診斷中不可或缺的一部分,醫(yī)生通過(guò)對(duì)舌體的觀察,對(duì)患者的病情進(jìn)行鑒別。舌體圖片一直在計(jì)算機(jī)舌診系統(tǒng)中扮演著重要的角色,其體現(xiàn)的舌體胖瘦客觀反映了身體的狀態(tài)。
許家佗等人[1]提出了通過(guò)對(duì)舌體的正面與側(cè)面進(jìn)行圖像采集及對(duì)其長(zhǎng)度、寬度、厚度測(cè)量,并利用結(jié)果參數(shù)與舌體表面積的比值關(guān)系建立不同的參數(shù)計(jì)算方法,最后通過(guò)對(duì)大量測(cè)試樣本的測(cè)試分析,建立最好的參數(shù)計(jì)算方法進(jìn)行舌體胖瘦分類。衛(wèi)保國(guó)等人[2]提出了通過(guò)研究曲線擬合參數(shù)與曲線形狀胖瘦的關(guān)系,結(jié)合舌體的長(zhǎng)寬比,求得舌體的胖瘦指數(shù),從而實(shí)現(xiàn)了對(duì)舌體胖瘦的自動(dòng)定量分析,最后并給出結(jié)合中醫(yī)診療習(xí)慣,得出合理的舌體胖瘦的描述。張康等人[3]提出利用計(jì)算機(jī)技術(shù)對(duì)舌診圖像進(jìn)行自動(dòng)分割,然后對(duì)分割后的舌體進(jìn)行補(bǔ)貼曲線擬合函數(shù)的擬合,從而分析舌體胖瘦。張康等人[4]還提出了利用計(jì)算機(jī)技術(shù)將在臉部區(qū)域提取舌體圖像,將雙峰高斯函數(shù)作為擬合函數(shù)用以擬合舌體邊緣曲線,用BP神經(jīng)網(wǎng)絡(luò)對(duì)舌圖像進(jìn)行舌體正常、舌體瘦小、舌體胖大的分類。
目前,基于舌體圖片對(duì)舌體胖瘦分類的研究正大力發(fā)展,其成果十分顯著,但是以上研究工作主要是針對(duì)舌體正常、舌體瘦小、舌體胖大三者之間的分類展開(kāi)的,并未考慮舌體胖大有齒印這一特殊類別。盡管對(duì)比傳統(tǒng)舌體識(shí)別,本文僅增加了對(duì)舌體胖大有齒印的分類,但從中醫(yī)學(xué)臨床意義上,能為舌診過(guò)程提供更精確的依據(jù),使醫(yī)生能更準(zhǔn)確甄別患者的病情,提高舌診的準(zhǔn)確率,實(shí)現(xiàn)精準(zhǔn)醫(yī)療?;贒enseNet[6]和基于DenseNet修改的模型[7]的研究,本文搭建了一種能勝任舌體胖瘦精細(xì)分類任務(wù)的深度卷積神經(jīng)網(wǎng)絡(luò)模型,其能對(duì)舌體圖片進(jìn)行舌體正常、舌體胖大、舌體胖大有齒印、舌體瘦小的分類,進(jìn)一步實(shí)現(xiàn)計(jì)算機(jī)舌診系統(tǒng)的完善。
本節(jié)提出了新的模塊K Block。K Block分為多個(gè)cell子層,cell1層處理輸入層數(shù)據(jù),輸入數(shù)據(jù)先后經(jīng)BN(Batch Normalization[8])層,relu層,尺寸為1×1、步長(zhǎng)為1的卷積層,和BN層,relu層,尺寸為3×3、步長(zhǎng)為1的卷積層后得到結(jié)果,之后將輸入層數(shù)據(jù)與cell1層的結(jié)果作連接后作為輸出;cell2層將cell1層的輸出作為輸入,先后經(jīng)過(guò)BN層,relu層,尺寸為1×1、步長(zhǎng)為1的卷積層,和BN層、relu層,尺寸為3×3、步長(zhǎng)為1的卷積層后得到結(jié)果,之后將cell1層的輸出與結(jié)果作連接后作為輸出;cell3層將cell2層的輸出作為輸入,先后經(jīng)過(guò)BN層,relu層,尺寸為1×1、步長(zhǎng)為1的卷積層,和BN層,relu層,尺寸為5×5、步長(zhǎng)為1的卷積層后得到結(jié)果,之后將cell2層的輸出與結(jié)果作連接后作為輸出,并以cell3層的輸出作為模塊輸出。
在K Block的每層中,第1個(gè)卷積層的尺寸為1×1,步長(zhǎng)為1,使用該類卷積層可以在提取的特征映射圖大小不變的情況下對(duì)其輸出通道進(jìn)行增大,從而對(duì)輸入特征進(jìn)行升維,起增大輸入特征維度的作用;在cell1層、cell2層中,第2個(gè)卷積層的尺寸為3×3,步長(zhǎng)為1,該類卷積層在各個(gè)cell層中第1個(gè)卷積層的基礎(chǔ)上擴(kuò)大了感受野,提取圖中較大的物體的特征和感受野內(nèi)特征之間的關(guān)聯(lián)性,使提取的特征更豐富;cell3層第2個(gè)卷積層的尺寸為5×5,步長(zhǎng)為1,該類卷積層進(jìn)一步擴(kuò)大了感受野,在cell1層、cell2層的提取的特征的基礎(chǔ)上提取圖中更大的物體的特征和感受野內(nèi)特征之間的關(guān)聯(lián)性,并可進(jìn)一步提取更高級(jí)的特征,對(duì)無(wú)噪的圖片能取得較高的分類精度。
本節(jié)的K Block以cell3層的輸出作為模塊輸出,由于cell3層的輸出為cell2層的輸出和cell3層的處理結(jié)果作向量連接之后的結(jié)果,該做法保留了模塊的高級(jí)圖像特征,使某些特征不會(huì)因表現(xiàn)不佳被誤丟棄,模型也不會(huì)保存太多冗余特征而影響訓(xùn)練效率,該方法可以讓模型取得較高的分類精度。
Dense Block作為DenseNet-121結(jié)構(gòu)中的重要組成部分,第2層以輸入層和第1層的輸出連接之后作為輸入,第3層以輸入層、第1層的輸出和第2層的輸出連接之后作為輸入……第i層以輸入層和第1層的輸出……第i-1層的輸出連接之后作為輸入。Dense Block采用殘差連接,加快收斂,并防止梯度彌散。而在K Block中除cell1層外每個(gè)celli層均以第i-1層的輸出數(shù)據(jù)作為輸入,改進(jìn)了Dense Block中以前面所有層的輸出作為輸入數(shù)據(jù)的做法,只保留所需要的輸入數(shù)據(jù),該做法減小了模型的輸入大小,提高了模型的訓(xùn)練效率。
圖1 K-CNN結(jié)構(gòu)
注:圖中的K代表K Block,并在圖中省略了模型的所有BN層和relu層。
由于每次經(jīng)過(guò)K Block的處理之后輸出的維度過(guò)大,K-CNN在K Block之后分別添加了尺寸為1×1、步長(zhǎng)為1的卷積層和尺寸為2×2、步長(zhǎng)為2的最大池化層,實(shí)現(xiàn)特征的降維,減少模型的計(jì)算量,提高模型的收斂效率。
基于K Block搭建的K-CNN的結(jié)構(gòu)如表1和圖1所示,包括:輸入層,尺寸為3×3、步長(zhǎng)為2的卷積層,尺寸為3×3、步長(zhǎng)為2的平均池化層和relu層,K Block,BN層,尺寸為1×1、步長(zhǎng)為1的卷積層,尺寸為2×2、步長(zhǎng)為2的最大池化層,K Block,BN層,尺寸為1×1、步長(zhǎng)為1的卷積層,尺寸為2×2、步長(zhǎng)為2的最大池化層,K Block,尺寸為7×7、步長(zhǎng)為7的平均池化層,由128個(gè)神經(jīng)元組成的全連接層和relu層,由4個(gè)神經(jīng)元和relu層組成的softmax分類層。同時(shí),該模型的損失函數(shù)為交叉熵與L2正則化相加,該函數(shù)如式(1)所示。
其中,p(x)表示標(biāo)簽值,q(x)表示預(yù)測(cè)值。λ表示L2范數(shù)的系數(shù),參考文獻(xiàn)[7]中L2正則化項(xiàng)系數(shù)的取值,在本節(jié)中L2正則化項(xiàng)系數(shù)取值為0.0001。
表1 K-CNN結(jié)構(gòu)
本文的實(shí)驗(yàn)環(huán)境如下:處理器型號(hào)為Intel i7-7700HQ,主頻2.8GHz,內(nèi)存16G,計(jì)算機(jī)采用Windows 10,64位系統(tǒng),TensorFlow采用1.4版本,Python采用3.6版本。訓(xùn)練過(guò)程中采用梯度下降算法作為模型訓(xùn)練算法。學(xué)習(xí)率為0.001,在訓(xùn)練過(guò)程中會(huì)發(fā)生減少。在訓(xùn)練過(guò)程中,各模型對(duì)舌體圖片進(jìn)行10個(gè)批次,每個(gè)批次600輪,共6000輪的訓(xùn)練,并進(jìn)行1000輪測(cè)試。
在實(shí)驗(yàn)數(shù)據(jù)方面,為了保證實(shí)驗(yàn)的客觀性和準(zhǔn)確性,本文所采用的數(shù)據(jù)圖片均從廣州中醫(yī)藥大學(xué)第一附屬醫(yī)院拍攝,均被縮放為224×224的JPG格式彩色圖片。本文選取了拍攝質(zhì)量較高的128張各類舌體圖片作為實(shí)驗(yàn)的樣本數(shù)據(jù),每類圖片32張,每張圖片來(lái)自每位患者。圖2為實(shí)驗(yàn)數(shù)據(jù)圖片,(a)為舌體正常圖片,(b)為舌體胖大圖片,(c)為舌體胖大有齒印圖片,(d)為舌體瘦小圖片。
圖2 實(shí)驗(yàn)數(shù)據(jù)圖片。
本文首先對(duì)數(shù)據(jù)集以3:1劃分訓(xùn)練集和測(cè)試集,由于訓(xùn)練樣本和測(cè)試樣本不足,本文在不影響實(shí)際舌診臨床結(jié)果的前提下,分別對(duì)訓(xùn)練樣本和測(cè)試樣本進(jìn)行圖片旋轉(zhuǎn)等多種數(shù)據(jù)增強(qiáng)方式擴(kuò)大樣本的數(shù)據(jù)集,樣本數(shù)量達(dá)到3456張,其中訓(xùn)練集為2592張圖片,每類均648張;測(cè)試集為864張圖片,每類均216張。由于本文只在理論上進(jìn)行模型的可能性分析,本文只在測(cè)試集上進(jìn)行驗(yàn)證,在訓(xùn)練過(guò)程中通過(guò)打亂訓(xùn)練集圖片順序的方式提高模型魯棒性。
為了加快預(yù)測(cè)模型的收斂速度,并減少卷積神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過(guò)程中梯度消失和梯度爆炸等不良現(xiàn)象的發(fā)生,在各個(gè)深度卷積神經(jīng)網(wǎng)絡(luò)模型對(duì)輸入圖像進(jìn)行特征提取之前,加入BN層對(duì)輸入層數(shù)據(jù)進(jìn)行預(yù)處理。
表2 各模型作四折交叉驗(yàn)證的總體分類準(zhǔn)確率
為了驗(yàn)證模型K-CNN的分類性能,本章設(shè)置了兩個(gè)對(duì)比模型K-CNN(a)、K-CNN(b)。它們只改變K Block內(nèi)部cell層第2個(gè)卷積層尺寸,K-CNN(a)的K Block的cell1層、cell2層、cell3層的第2個(gè)卷積層的尺寸分別為1×1、3×3、3×3,K-CNN(b)的K Block的cell1層、cell2層、cell3層的第2個(gè)卷積層的尺寸分別為3×3、3×3、3×3。
表3 各模型作四折交叉驗(yàn)證的各類平均分類精確率
由于本文數(shù)據(jù)集太少,沒(méi)有設(shè)置驗(yàn)證集,但為了能更充分地利用數(shù)據(jù)集來(lái)有效地驗(yàn)證網(wǎng)絡(luò)模型的性能,本文分別構(gòu)建了四組K-CNN(a)、K-CNN(b)、AlexNet[9]、VGG16[10]、K-CNN模型,將數(shù)據(jù)集以四折交叉驗(yàn)證的需求分為訓(xùn)練集和測(cè)試集,分別對(duì)四組模型分別進(jìn)行訓(xùn)練和測(cè)試,并將四組K-CNN(a)、K-CNN(b)、AlexNet、VGG16、K-CNN模型的各項(xiàng)測(cè)試指標(biāo)取平均作為相應(yīng)模型的最終指標(biāo)結(jié)果,以此實(shí)現(xiàn)了對(duì)K-CNN(a)、K-CNN(b)、AlexNet、VGG16、K-CNN的四折交叉驗(yàn)證。其測(cè)試后的總體分類準(zhǔn)確率如表2所示,在表2中,序號(hào)①表示以第1份數(shù)據(jù)作為測(cè)試集,其他作為訓(xùn)練集,序號(hào)②表示以第2份數(shù)據(jù)作為測(cè)試集,其他作為訓(xùn)練集,序號(hào)③表示以第3份數(shù)據(jù)作為測(cè)試集,其他作為訓(xùn)練集,序號(hào)④表示以第4份數(shù)據(jù)作為測(cè)試集,其他作為訓(xùn)練集。K-CNN四折交叉驗(yàn)證平均總體分類準(zhǔn)確率(accuracy)為32.45%,較K-CNN(a)、K-CNN(b)、AlexNet和VGG16分別提高了1.53%、0.61%、7.56%和7.36%。表3為各模型作四折交叉驗(yàn)證的各類平均分類精確率,表4為各模型作四折交叉驗(yàn)證的各類平均召回率,表5為各模型作四折交叉驗(yàn)證的各類平均F1分?jǐn)?shù)。
表4 各模型作四折交叉驗(yàn)證的各類平均召回率
表5 各模型作四折交叉驗(yàn)證的各類平均F1分?jǐn)?shù)
相較于K-CNN(a)、K-CNN(b),K-CNN的K Block采用了變化適宜的cell層的結(jié)構(gòu)對(duì)舌體特征進(jìn)行提取,即K-CNN的cell1層和cell2層均先后采用尺寸為1×1、步長(zhǎng)為1的卷積層進(jìn)行特征升維和尺寸為3×3、步長(zhǎng)為1的卷積層進(jìn)行特征提取,cell3層采用尺寸為5×5的卷積層進(jìn)行特征提取。K-CNN(a)主要采用了兩個(gè)尺寸為1×1的卷積層組成cell1層,這導(dǎo)致了K-CNN(a)提取了冗余無(wú)效的特征,影響了K-CNN(a)的分類精度;K-CNN(b)的cell1層、cell2層、cell3層均采用了尺寸為1×1、尺寸3×3的卷積層,較K-CNN使用了更加固定的卷積層,這導(dǎo)致了前者提取的特征不如后者豐富,在圖片無(wú)噪聲干擾的情況下,分類準(zhǔn)確率不如后者。
相較于AlexNet、VGG16等經(jīng)典模型,K-CNN的K Block采用了以cell3層的輸出即cell2層的輸出和cell3層的處理結(jié)果作為模塊輸出,該做法保留了適量的模塊的高級(jí)特征,不會(huì)因某些高級(jí)特征在訓(xùn)練時(shí)表現(xiàn)不佳被誤丟棄,也不會(huì)因保存太多特征導(dǎo)致特征冗余,影響模型的訓(xùn)練效率。
對(duì)舌體圖片進(jìn)行舌體胖瘦分類一直是計(jì)算機(jī)舌診系統(tǒng)的重要研究課題,本文提出了一種新的深度卷積神經(jīng)網(wǎng)絡(luò)模型,成功地將舌體圖片分類為舌體正常、舌體胖大、舌體胖大有齒印、舌體瘦小等四類,通過(guò)實(shí)驗(yàn),與AlexNet等經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)相比,說(shuō)明本文提出的模型是能夠勝任對(duì)舌體圖片進(jìn)行舌體胖瘦精細(xì)分類任務(wù)的。綜上,基于深度卷積神經(jīng)網(wǎng)絡(luò)的舌體胖瘦精細(xì)分類具有較大的研究?jī)r(jià)值和豐富的應(yīng)用前景,并存在巨大的發(fā)展空間。