韩 勇,兰 杰,郭瑞瑶,邢聪颖,黄新杰,霍迎秋
(西北农林科技大学 信息工程学院,陕西杨凌 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%,因此基于深度学习的中药饮片识别方法能够快速、高效进行中药饮片识别,具有较好的实际应用价值。