基于CapsNet神经网络的树叶图像分类模型
2021-07-21张冬妍
张冬妍,韩 睿,张 瑞,曹 军
东北林业大学 机电工程学院,哈尔滨 150040
目前,世界上大约有6万多种树木,对树木研究的基础是对其进行分类处理,所以对其分类的方法进行研究具有很重要的意义.相对于树干、树形和树木等生物信息,树叶具有特定的外形轮廓和纹理等固有特征,易于区分和鉴定,常作为区分树木种类的重要标志[1].树叶的分类与识别对于区分树的种类、对树木物种种群的跟踪和保护、建立树木种类数据库、植物基础医学研究、树木分布等具有十分重要的意义[2].
传统的树叶分类识别主要基于图像处理技术,对树叶图像进行认为选定的特征来进行分类,识别效率较低且泛化能力弱.近年人工智能快速发展,基于深度学习的算法在图像分类识别方面表现出巨大的优势,可以快速而有效地提取和分析图像中复杂深层次的特征,对于图像分类识别具有很好的效果[3].
文献[4-6]研究了卷积神经网络在图像和语音中的应用,Krizhevsky[7]2012年在ILSVRC图像识别比赛中使用AlexNet模型获得冠军,首次实现了15.40%的错误率,引起了深度学习和卷积神经网络研究的兴起和爆炸性增长.在后续的ZFnet,VGG,GoogleNet,Resnet等深度学习网络模型中[8-11],图像识别的错误率逐渐下降到2.25%,展现出深度学习在图像分类识别中的优势.Grinblat等[12]利用静脉形态学的模式识别方法对植物品种进行识别,能够准确识别3种豆科植物.2016年,Sladojevic等[13]利用深层神经网络识别了13种植物病虫害,平均准确率为96.30%.同年,张帅等[14]设计了一个8层卷积神经网络学习系统,并用softmax和SVM两种分类器进行树叶分类,对单一背景下的树叶分类准确率高达91.11%和90.90%.2017年,Cruz等[15]研究了一种基于迁移学习和深度学习的可视化植物病害检测系统,采用卷积神经网络结合迁移学习的方式,对少量图像样本进行训练和验证,可以自动、定量地检测早期植物病害,降低了诊断时间和成本.2019年,Barbedo等[16]采用CNN和GoogleNet结构进行深度学习,建立了有效的病虫害检测与识别模型,并与原始图像进行了病虫害和斑点的特征提取,而原始图像在不使用手工去除背景的情况下,整体准确率提高到94%.
为了提高树叶分类的准确性,本文使用CapsNet神经网络模型对树叶进行分类识别.首先,建立了树叶图像的数据集;其次,对数据集中的树叶图像进行预处理和数据增强;最后,对CapsNet网络进行优化改进,对处理后的图像进行训练和预测.实验结果表明,改进后的CapsNet在树叶分类上的效果明显优于原CapsNet,有助于实现树叶种类的快速识别,为建立树种数据库、树木种群的跟踪和保护提供了重要的技术储备.
1 CapsNet网络模型
1.1 CapsNet神经网络
在深度学习中,卷积神经网络(CNN)在图像分类识别方面效果非常好,但CNN的内部数据表示没有考虑特征之间的重要空间层级关系.虽然CNN可以通过最大池化或者添加后续卷积层来减少通过网络的数据空间的大小,从而增加上层神经元的“视野”,即获得输入图像较大区域的高阶特征,在一定程度上提高了模型对图像的识别能力,但是,最大池化会损失有价值的特征信息,使用传统卷积网络也无法解决低级特征和高级特征空间位置关系的根本问题.Sabour等[17]在2017年提出了基于胶囊系统和动态路由机制的CapsNet神经网络,在MINST数据集上实现了极高的分类准确率.胶囊用于对图像中特征的属性和空间关系进行封装编码,例如位置、大小、方向、变形、速度、反射率、颜色和纹理等[18].在多层胶囊系统中,低层胶囊将其输出发送给对该输出结果表示“认同”的高一层胶囊,这一步是通过囊间动态路由算法实现的[19].
1.2 胶囊之间的传播过程
图1 胶囊之间的传播过程
(1)
(2)
式中,cij是由迭代动态路由过程确定的耦合系数,而且胶囊网络模型中不存在偏置项.
CapsNet中使用非线性激活函数Squashing将矢量的大小缩放到0~1之间.得到sj后,再通过这个Squashing函数将矢量sj转化成矢量vj如式(3)所示:
(3)
由于这个函数是非线性的,输出的vj保持了sj的维度,不改变矢量的方向,只改变了矢量的大小,其输出矢量的长度代表着胶囊检测的给定特征的概率,因此,每个胶囊的概率在0~1之间.
1.3 囊间动态路由算法
以下过程会被迭代r次:首先使用softmax计算所有权重cij的值,如式(4)所示:
(4)
softmax可以确保所有权重cij均为非负数,且使其总和等于1.
(5)
在更新权重之后,算法将返回并重新开始计算cij的值,重新开始这一过程,并重复r次.动态路由算法很容易收敛,但也存在着过拟合问题,虽然增加迭代次数可以提高准确率,但是会增加泛化误差,所以不宜过多迭代.
1.4 损失函数
对于图像中出现的每个类别k,胶囊使用单独的利润损失Lk如式(6)所示:
Lk=Tkmax(0,m+-‖vk‖)2+λ(1-Tk)max(0,‖vk‖-m-)2
(6)
如果存在k类图片,则设置Tk=1,并且m+=0.9,m-=0.1,将λ取值为0.5来降低某些类别没有出现时的损失,这样可以保证表示该类别的数字胶囊的向量模值尽可能大,其他类别的向量模值尽可能小,以实现准确分类.总损失就是所有数字胶囊损失的总和.
2 实验设计
2.1 数据准备和预处理
使用的树叶是实验室自行拍摄采集即建立的深度学习数据集,数据集中采集了桉树、龙眼、木荷、珊瑚树、水翁树、香樟、柚树、桃花心木、荷花木兰、深山含笑共10种树木的树叶(图2),共计3 193张图片,每一种树叶图片约300张左右.
图2 树叶图片
在使用含3 193张图像的数据集训练网络模型之前,本文将图像像素大小从原始的1 536×1 536调整为147×147.由于深度学习对数据集的数据量有一定的要求,研究中每种树叶的图片数量在300张左右,这无法满足算法在实践过程中的泛化能力,会导致模型过拟合.虽然可以通过现有的其他数据集和网络途径获取更多的图片数据,但获取的图片质量参差不齐,无法使数据集数量有效增多.为了减少树叶图像在训练时的过拟合,增强模型的泛化能力,本文尝试用数据增强来解决,数据增强主要通过对树叶图像进行图像变换处理,例如旋转、缩放、平移、尺度变换等,本文使用的图像增强方法如下:
1)将原始图像向随机方向平移10到20像素;
2)随机选择角度对图像进行旋转;
3)对图像进行轻微模糊处理;
4)向图像添加随机噪声.
经过图像增强处理后,10种树叶图像增强至15 965张,分别是桉树1 485张,深山含笑2 215张,龙眼1 530张,木荷1 310张,荷花木兰1 090张,珊瑚树2 810张,水翁树1 335张,桃花心木1 535张,香樟1 295张,柚树1 360张,用于训练的数据集数量如表1所示.其中,桉树树叶的增强示例图像如图3所示.
图3 数据增强示例
表1 数据集数量
在扩充后的数据集中随机抽取12 772张图片(占数据集的80%)作为训练集,1 597张(约占数据集的10%)作为验证集,剩余1 596张(约占数据集的10%)作为测试集.训练集用于训练CapsNet的模型参数,验证集在每一个epoch完成后测试当前模型的准确率,根据准确率对模型的超参数(学习率,迭代次数等参数)进行调整,从而得到一个更好的模型,测试集不参与模型的训练过程,用于测试已训练好的模型的性能.
2.2 动态路由算法的改进
采用两种方法对动态路由环节进行优化改进.一种是引入Adam函数,另一种是改进压缩函数.
陈立潮等[20]在动态路由环节加入了Adam算法,可以使模型收敛更加平稳.算法对胶囊间参数的误差进行移动指数平均,动态调整路由算法的Leaning Rate,对权重bij进行调整.
本文在其基础上优化了Adam算法的部分环节,对动态路由环节进行改进,迭代时用平移后的Sigmoid乘以sj/‖sj‖代替Squashing函数,在最后输出的时候使用Squashing函数,改进后的算法如下:
算法1:改进动态路由
初始化:bij←0,一阶矩mt=0,二阶矩nt=0,一阶矩指数衰减率α=0.9,二阶矩指数衰减率β=0.999,稳定数值常数ε=10-8,时间步t=0.
2:for all capsuleiin layerland capsulejin layer(l+1):bij←0,mt←0,nt←0,α←0.9,β←0.999,ε←10-8,t=0,η←0.001.
3:forriterations do
4:ci←softmax(bi)
6:vj←Sigmoid(‖sj‖-5)·sj/‖sj‖
7:mt←αmt-1+(1-α)uj|ivj
8:nt←βnt-1+(1-β)(uj|ivj)2
12:return squash(vj)
其中softmax函数的定义由公式(4)给出,Squashing函数定义由公式(3)给出,Sigmoid函数如下:
Sigmoid(‖sj‖)=1/(1+e-‖sj‖)
(7)
由于CapsNet网络最后是用向量的模的大小衡量某个结果的概率,模的大小和概率大小直接相关,模值越大,相应概率也越大.Sigmoid函数比Squashing函数收敛速度更快,因此采用平移后的Sigmoid函数乘以sj/‖sj‖在迭代环节替代Squashing函数能在结果接近0或1时起到放大作用,从而可以提高对某些特定种类图片的识别准确率,同时可以提高模型运行效率.
2.3 使用的CapsNet网络结构
由于原CapsNet仅支持28×28大小的图片输入,为了适应数据集的图片尺寸,提升模型性能,将CNN网络与改进的CapsNet相结合,得到一种新的强化胶囊网络(Enhanced-CapsNet)模型,如图4所示.
图4 胶囊网络模型
模型开始部分有一层卷积核大小为7×7,步长为2的卷积层,具有ReLU非线性激活函数.第二层也是卷积层,卷积核大小为6×6,步长为1.之后连接一个池化层,池化核大小为2×2,步长为1,采用最大池化.池化层后再连接一个6×6步长为1的卷积层,将数据重塑之后再输入PrimaryCaps层.这样可以尽可能地获得图片的主要特征信息,由于数据量较大,所以引入了池化层进行数据降维,提高模型性能和运行效率.
PrimaryCaps层:PrimaryCaps中使用9×9大小的卷积核在28×28的空间中移动,步长为2,通道数为32,设置为无填充.这一层的作用类似常规的卷积层,但最重要的作用是将每8个10×10×1×32的输出封装在一起,形成一个长度为8的矢量,为改进的Routing算法做准备.在PrimaryCaps层最后得到的输出形状为10×10×8×32,这一层共输出3 200(10×10×32)个矢量,也就是3 200个胶囊单元.
DigitCaps层:在DigitCaps中将长度为8的胶囊转换为长度16的胶囊.由于使用的树叶数据集包含有10个类别,因此DigitCaps中包含有10个长度为16的矢量,这10个矢量分别代表不同的分类.本层中使用了Routing算法并经过计算获得最终输出值向量vj,根据vj获得图像被识别为特定类别的概率.
整个模型参数设置如表2所示.
表2 E-CapsNet参数设置
2.4 实验参数设定
使实验设定批尺寸为100,epoch设为50,同时使用原始的CapsNet网络和经典网络AlexNet以及Inception V3深度学习模型进行对比.
2.5 实验环境
实验使用的计算机内存为16GB,搭载Inter(R)Core(TM)i7-7700HQ CPU处理器,使用NVIDIA Geforce GTX 1070 8G显卡,软件环境为Ubuntu18.04操作系统,终端软件为Pycharm,Python版本为3.6,使用Tensorflow+Keras框,Cuda版本为10.0.130.
2.6 模型评价指标
由于实验是一个多分类任务(共10种类别),所以采用准确率(Accuracy)评价10类图像的分类效果,准确率用ηAccuracy表示,计算公式如下:
ηAccuracy=(TP+TN)/(P+N)
(8)
其中TP为正类预测且结果为正类的个数,TN为负类预测且结果为负类的个数,P为所有正类预测个数,N为所有负类预测个数.
3 结果与分析
使用E-CapsNet网络训练和分类树叶数据集的15 965张图像,我们最终获得的结果如表3所示:经过50次epoch的训练,模型训练集准确率最高达到99.15%,损失率最低为0.015 89,验证集的准确率为98.51%,损失率为0.020 49,测试集准确率为98.63%,损失率和准确率分别由公式(6)和公式(8)得出.
表3 E-CapsNet模型的分类训练结果
图5为模型训练图,模型从epoch12左右开始趋近收敛,收敛速度较快,训练准确率和验证准确率曲线接近,训练损失率和验证损失率都较为平滑,模型拟合效果较好.
图5 模型训练曲线
本文在AlexNet和Inception V3模型上使用相同的树叶数据集进行测试,采用与原CapsNet同样的学习率和迭代次数,E-CapsNet模型的分类精度比AlexNet要高11.63%,比Inception V3模型高7.63%,比原CapsNet网络高2.51%.对比实验结果如表4所示.
表4 测试集准确率对比
为了测试动态路由算法的改进对模型精度的影响,本文分别在保证其他参数相同的情况下,使用E-CapsNet模型,将原Rounting算法、使用Adam算法但不改动压缩函数和本文方法进行对比.测试结果如表5所示.
表5 在动态路由环节使用不同优化方法的准确率对比
由表5可见,原动态路由算法训练集准确率为96.32%,测试集准确率为95.86%.仅使用Adam算法进行优化时,训练集准确率为98.65%,测试集准确率为97.47%.使用Adam进行优化,并且改进压缩函数部分后,训练集准确率为99.15%,测试集准确率为98.63%.由图6可见,使用了Adam优化算法后,训练准确率曲线收敛相对平滑,拟合度更好,收敛速度也略微增加;同时,在优化了动态路由环节的压缩函数后,训练准确率和验证准确率更高.可以看出,本文的优化可以取得更好的分类效果.
图6 不同优化方法的训练准确率曲线
4 结 论
在本文中,我们采用改进的CapsNet神经网络对树叶进行分类实验,将CNN结构与CapsNet网络结合,更好地适应了数据集图像尺寸,同时提高了模型性能,克服了传统人工卷积神经网络分类器的某些局限性,并使用数据增强来减少模型的过拟合,提高了模型的泛化能力.在优化了Rounting算法和Squashing函数环节后,模型收敛更加平滑,收敛速度更快,分类识别准确率也有提升,实现了比原结构更好的性能.同时,我们还设计了对比实验,实验结果表明,本文训练出的用于树叶分类的E-CapsNet网络模型的测试准确率达到98.63%,明显高于AlexNet和InceptionV3模型和原CapsNet.
CapsNet目前仍处在起步阶段,在以后的研究工作中,把重点放在优化内部结构或者与已有的成熟网络模型相结合上,可能会在优化模型性能上更有发展.