基于舌图像多特征融合与机器学习的裂纹舌识别算法
2023-01-07李玉双武小荣
赵 颖,李玉双,*,武小荣
(1.燕山大学 理学院,河北 秦皇岛 066004;2.北京贝叶斯健康科技有限公司,北京 100080)
0 引言
“舌诊”是中医“望、闻、问、切”四诊中“望诊”的重要形式之一。通过观察舌象,专家可以鉴别患者中医证型,进而确定合适的治疗方法。裂纹舌是舌诊中的重点关注症状,舌裂纹形态不一,位置不定、深浅不同、数量不等,多因内热、素体阴虚、脾肾阳虚、肝气升发、气血失和等因素导致[1-2],常见于温热病后期、2型糖尿病气阴两虚夹瘀证、慢性湿疹以及甲状腺炎患者[3-6]。可见,裂纹舌能够客观、准确地反映某些典型疾病和中医证候的变化,为医生提供有价值的诊断信息。然而,传统的裂纹舌诊断主要基于医生的主观观察,易受个人经验、环境变化的影响。将数字图像处理和模式识别等技术应用于裂纹舌智能诊断,提高传统诊断的客观化、定量化、标准化已成为中医舌诊的迫切需要,具有重要的现实意义和应用价值。
裂纹舌智能识别模型是当前裂纹舌研究的主要内容之一,迄今为止依然存在很多困难。首先,在舌图像获取的过程中不可能完全避免嘴唇和下颚周边区域的干扰,舌图像预处理恰当与否直接影响后续研究。其次,相较于正常舌图片,裂纹舌图片的收集会更困难,这样会出现实验样本中裂纹舌图片与正常舌图片数量比例不均衡的现象,或者实验样本量小,这些因素影响了识别模型的预测效果和泛化性能。最后,由于舌裂纹周围组织的颜色分布比较复杂,导致舌裂纹与周围组织的颜色对比度不明显,致使真、假舌裂纹可能产生相似的识别模型,造成假阳性或假阴性。为了克服上述困难,研究者提出了多种行之有效的解决方案。一类是基于人工特征的机器学习模型,如王鹏等人提出了欧式聚类舌体分割算法,以及基于法线区域分割的舌裂纹提取算法,能够有效地完成舌体分割和舌裂纹提取[7];Wan Chao等人利用中值滤波、直方图均衡化、数学形态学进行舌体分割预处理,提取舌图像的局部二值模式特征、定向梯度直方图特征和类haar特征,应用支持向量机实现了258张裂纹舌像与254张无裂纹舌像的高效分类[8]。Li Xiaoqiang等人提出了一种基于宽线检测器的统计形状特征(Wide Line Detector based statistical shape Feature, WLDF)来识别舌裂纹,将196张裂纹舌和245张无裂纹舌的WLDF特征输入到SVM中训练,达到0.95的准确率[9]。另一类是基于卷积神经网络的深度学习模型,如Li Mengyi等人在U-Net的编码器中引入全局卷积网络模块,解决了编码部分相对简单,不能提取相对抽象的高层语义特征的问题,对舌裂纹具有更好的分割效果和更高的分割精度[10]。Song Chao等人使用深度迁移学习进行舌像分析,通过预训练网络提取舌像特征,用全局平均池化和全连接层重写原始网络的输出层,对391张裂纹舌和250张无裂纹舌的分类准确率达到了0.94[11]。除了以上两类方法,Li Xiaoqiang等人充分利用机器学习和深度学习的优势,聚焦舌裂纹区域和非裂纹区域,利用AlexNet提取裂纹区域的深度特征,并将裂纹舌识别问题视为多实例学习问题,借助多实例支持向量机训练700多张舌像实现裂纹舌的有效识别[12]。
上述工作在一定程度上推动了裂纹舌智能识别的研究进程,但相对于中医舌诊在其他领域(如舌苔、舌质、舌色等)的研究进展,裂纹舌研究成果积累较少,发展缓慢,存在很大的提升和拓展空间。例如,由于劣质舌象均影响舌象颜色、形状、质地的分析[13],智能舌诊模型往往对舌像采集提出了较高要求,包括设备、照明等条件的限制。然而中医临床诊断中可能不具备这些设施条件,医生需在不同的环境下通过眼睛观察患者舌像,确定患者的证候。因此,普适性裂纹舌识别模型更具临床适用性。此外,舌裂纹的形状、位置、数量、深浅的多样性会让舌裂纹的分割变得更加复杂而困难,基于舌裂纹提取人工特征的裂纹舌识别模型易出现不稳定性[12]。如果从舌像本身出发,则需要充分挖掘能够反映裂纹舌全面信息的图像特征,以及不同特征在不同分类器中的适用性。基于舌像或舌裂纹的深度学习模型虽然能够取得理想的识别效果,但其通常要求大样本量,且其黑盒属性不利于临床解释。
鉴于以上分析,本文采集了手机拍摄的2 033张舌像,从舌像的纹理、颜色、形状三个层面提取特征,借助四个经典的机器学习模型阐释三类特征识别裂纹舌的适用性和泛化性,并进一步通过两类深度学习模型验证基于三类特征的机器学习模型识别裂纹舌的有效性。
1 材料和方法
为方便理解文章流程,图1描述了具体的研究框架。先是对原始舌像进行舌体分割形成了文章所需的数据集。采用机器学习和深度学习两分支对裂纹舌进行分类预测:左边分支是机器学习模型,先是对图像进行特征提取,然后用四类机器学习模型逻辑回归(Logistic Regression, LR)、随机森林(Random Forest, RF)、分布式梯度提升库(eXtreme Gradient Boosting, XGBoost)和自适应提升树(Adaptive Boosting, AdaBoost)对裂纹舌进行识别;右边分支展示了基于残差神经网络(Residual Network, ResNet) 和密集连接的卷积网络(Densely Connected Convolutional Networks,DenseNet)的深度学习模型进行裂纹舌识别。
图1 流程图Fig.1 The workflow
舌图像数据来源于北京贝叶斯健康科技有限公司,包含1 127张裂纹舌图像(记为正样本)和906张无裂纹舌图像(记为负样本),采集设备为智能手机。原始图像均包含嘴唇、下颚等噪声区域(如图2(a)所示),为消除这些部位对后续研究的影响,采用Grabcut方法[14]对图像进行舌体分割(如图2(b)所示)。为了减少模型训练时的内存消耗,将分割后的舌图像统一缩小到256×256像素。
图2 舌体分割Fig.2 Tongue segmentation
1.1 舌图像特征
舌图像的纹理和颜色能够反映患者身体状况的变化[15],裂纹与非裂纹区域存在较为明显的纹理差异和颜色差异,并且舌裂纹的形状多样化(如横裂纹,竖裂纹,网状裂纹)。鉴于此,本文提取舌图像的纹理、颜色和形状特征,全面刻画舌图像信息。
1.1.1 基于GLCM的纹理特征
灰度共生矩阵(Gray Level Co-occurrence Matrix,GLCM)能够反映图象灰度关于方向、相邻间隔、变化幅度的综合信息,是分析图象的局部模式及其排列规则的基础[16]。通过统计计算舌图像上具有特定灰度和一定距离的两个像素的状态确定GLCM,像素对的“偏移”取自4个不同的方向(0°,45°,90°,135°),进而计算基于GLCM的6个统计量,即角二阶矩、对比度、相关性、相异度、熵、同质性。这6个统计量在4个方向上的均值和方差构成了舌图像的12维纹理特征,记为Texture。
1.1.2 基于颜色矩的颜色特征
RGB颜色模型中的低阶颜色矩蕴含了图像的大部分颜色信息。取三个通道分量的前三阶颜色矩,即均值、方差、偏斜度(见式(1)~(3)),构成舌图像的9维颜色特征,记为COLOR。
(1)
(2)
(3)
其中,pi,j表示在第i颜色通道分量中具有j灰度级的像素的概率,N为像素个数。
1.1.3 基于HOG的形状特征
向梯度直方图(Histogram of Oriented Gradient,HOG)是描述局部图像梯度方向变化的算子,对图像几何和光学变形保持良好的不变性,能够很好地描述局部目标的表象和形状[17]。HOG特征提取涉及以下几个步骤:计算图像梯度;为每个细胞单元构建梯度方向直方图;把细胞单元组合成更大的块,块内归一化梯度直方图;最后对所有直方图进行归一化并连接生成3 780 (2×2×9×15×7) 维特征。为了降低计算成本,进一步采用主成分分析降维,得到10维形状特征,记为HOG。
1.2 机器学习模型
LR、RF、XGBoost和AdaBoost是常用的分类模型。LR是一个广义线性回归模型,它可以清楚地解释输入特征如何通过最终生成的方程来证明输出的合理性。RF、XGBoost和AdaBoost都属于集成模型。RF是一种通过构建和合并多个决策树来获得更准确和稳定预测的简单方法,它可以为不平衡分类提供平衡的数据集误差。XGBoost是梯度提升决策树的高效实现,具有准确率高、运行效率高、泛化能力强等优点。AdaBoost具有较高的检测效率,且不易出现过拟合现象。本文将借助这四个机器学习模型验证三类人工特征在识别裂纹舌方面的适用性和泛化性。
1.3 深度学习模型
卷积神经网络(CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,具有表征学习能力,在图像分类任务中表现良好。本文使用两类深度卷积神经网络(DCNN)模型,即ResNet (如图3所示)和DenseNet(如图4所示),作为评价机器学习模型识别裂纹舌能力的参照对象。ResNet易优化,其内部残差块使用了跳跃连接,缓解了由深度增加引发的梯度消失问题[18]。DenseNet致力于从特征重用的角度来提升信息和梯度在网络中的传输效率,减少参数计算,缓解梯度消失,具有一定的正则效果[19]。
图3 ResNet-18示意图Fig.3 The schematic diagram of ResNet-18
图4 DenseNet示意图Fig.4 The schematic diagram of DenseNet
2 实验
2.1 性能评估指标
为全面评估分类模型的裂纹舌识别性能,引入五个统计指标,即ROC曲线下的面积(AUC)、准确率Eaccuracy、精确率Eprecision、召回率Erecall和F1得分Ef1_score,计算公式为
(4)
(5)
(6)
(7)
其中,TP(True Positive)表示被模型正确预测为裂纹舌的数量,TN(True Negative)表示被模型正确预测为无裂纹舌的数量,FP(False Positive)表示被模型错误预测为裂纹舌的数量,FN(False Negative)表示被模型错误预测为无裂纹舌的数量。
2.2 模型参数
为避免过拟合,采用交叉验证方法训练模型及评估模型性能。使用ShuffleSplit随机分割训练集和测试集,比例为9∶1。重复这个随机排列、分割的过程10次,取10次测试结果的平均值为最终的预测结果。
为了考察不同特征组合对机器学习模型预测性能的影响,特规定:对于给定模型,在不同的输入特征下其参数保持不变。上述实验均在Sklearn库中完成。四种模型的最优参数分别如下:
1) LR:惩罚项为L1,停止迭代的标准为0.001,正则化系数的倒数为200。
2) RF:决策树数量为600,决策树最大深度为20,分割内部节点所需最小样本数量为10。
3) XGBoost:基分类器为gbtree,学习率为0.1,决策树数量为600,γ=1。
4) AdaBoost:基分类器为DecisionTree-Classifier,决策树最大深度为7,分割内部节点所需最小样本数量为20,叶节点上所需最小样本数为7;算法为SAMME,决策树数量为300,学习率为0.5。
对于深度学习模型ResNet和DenseNet,在Windows系统上使用PyTorch(1.6版本)和Python(3.7版本)进行实验。将数据集按照8∶2的比例随机分为训练集和测试集。两种模型的最优参数如下:
1) ResNet:epoch=100,batch_size=4,优化器使用Adam,学习率为0.000 1。
2) DenseNet:epoch=100,batch_size=4,优化器使用梯度下降法,动量为0.9,学习率为0.001,使用LambdaLR更新学习率。
2.3 机器学习模型识别结果
将7种不同组合形式的特征分别输入四种机器学习模型,得到的AUC如图5所示。
图5 4个模型在7种特征下的AUCsFig.5 AUCs of four models with seven types of features
1) 从特征的角度可以看到:对于单一特征,HOG在三个集成学习模型中表现非常突出,远高于其他两个单一特征,但在LR中却很不理想;Texture在四个模型中均优于COLOR,并且这两个单一特征在4个模型中的预测表现差别不大,尤其是Texture;对于两两特征组合,HOG+Texture表现最佳,4个模型的AUC均优于单一特征Texture,在3个模型(LR、XGBoost、AdaBoost)中均优于单一特征HOG,尤其是LR的AUC有大幅提升,但RF的AUC有轻微下降;HOG+COLOR在4个模型中的表现均优于单一特征COLOR,但仅在LR中优于单一特征HOG,在XGBoost和AdaBoost中几乎无变化,而RF的AUC却明显下降;Texture+COLOR虽然在四个模型中的表现均优于单一特征Texture和COLOR,但整体不太理想;对于三类特征组合,在LR和AdaBoost中展示出其多特征融合的优势,其AUC均高于其他6种特征(组合),但在RF和XGBoost中差强人意。
2) 从模型的角度可以看到:3个集成模型具有非常相似的AUC分布,而XGBoost和AdaBoost则更为接近,这种现象与3个模型的算法构成密切相关。3个集成模型在6种特征(组合)下的AUC明显高于LR,充分展示出它们在分类问题中的集成优势。最令人满意的是AdaBoost,其在4种特征(组合)下的AUC均高于0.95。
从以上分析中不难发现,不同特征(组合)在不同机器学习模型下的识别效果不尽相同。表1汇总了4个模型在最优特征(组合)下的裂纹舌识别结果:显然,3个集成模型在5个指标下的预测结果均优于LR;RF 和XGBoost分别在HOG特征和HOG+Texture特征组合下取得较为理想且非常接近的预测结果;AdaBoost在三类特征共同作用下取得了最令人满意的结果,5个指标均高于0.9,AUC高达0.970 1,与LR相比较,AUC、准确率、精确率、召回率和F1得分分别提高了13%、14%、12%、12%和12%,说明AdaBoost在三类特征融合下具有很好的鲁棒性和泛化能力。
表1 四种机器学习模型在最优特征(组合)下的裂纹舌识别结果Tab.1 The cracked tongue recognition results of four machine learning models with the optimal feature (combination)
2.4 深度学习模型识别结果
为进一步验证基于多特征融合的机器学习模型在识别裂纹舌方面的适用性和有效性,计算了5个深度学习模型的识别结果,如表2所示,ResNet以微弱优势略胜于DenseNet。显然,深度学习模型优于机器学习模型。为反应两类模型之间预测能力的差距,这里给出ResNet18~AdaBoost和DenseNet169~AdaBoost在5个指标下的比较结果:ResNet18的AUC、准确率、精确率、召回率和F1得分分别高于AdaBoost 2%、7%、6%、6%和6%;DenseNet169的AUC、准确率、精确率、召回率和F1得分分别高于AdaBoost 2%、5%、7%、1%和4%。
表2 五种深度学习模型的裂纹舌识别结果Tab.2 The cracked tongue recognition results of five deep learning models
以上数据表明:本文提出的最优机器学习模型的裂纹舌识别能力略低于常用的深度学习模型,再次证明本文所提方法可应用于裂纹舌识别。
3 结论
本研究的主要目的是寻找裂纹舌识别的普适性算法,重点挖掘舌图像的纹理、颜色和形状三类特征在不同机器学习模型中的适用性。所提算法应用于智能手机拍摄的2 033张舌图像,验证了多特征融合往往有助于提高机器学习模型的预测性能,确定了集成学习模型相较于基础分类器具有更高的鲁棒性和泛化性,尤其是融合三类特征的自适应提升树(AdaBoost)取得了几乎能与深度学习相媲美的识别效果,为辅助传统中医裂纹舌诊断提供了可选择方案。提出的算法可进一步应用于其他领域,如与疾病相关联的智能舌诊。