基于卷积神经网络和Tensorflow的昆虫图像识别研究
2022-07-29刘姝珺吴晟宇
刘姝珺,吴晟宇
南京工程学院,江苏 南京 211167
0 引言
中国是农业大国,在传统的农业生产中,经常会受到病虫害问题的困扰。在解决病虫害问题时,第一步是识别昆虫。在传统的昆虫识别方法中,昆虫专家根据专业知识观察昆虫的外部特征,并对照相关的昆虫图鉴进行识别,费时费力。如今,传统的昆虫识别方法逐渐被昆虫图像识别技术代替。目前常用的昆虫识别技术有图像识别法、微波雷达检测法[1]、生物光子检测法[2]、取样检测法、近红外及高光谱法[3]、声测法[4]等。近年来,随着人工智能的迅速发展,深度学习技术在处理自然语言、机器视觉等方面取得了很多成果,随着深度学习的发展,已经有研究人员开始将深度学习技术应用于昆虫的图像识别[5-6]。文章旨在利用基于深度学习的图像识别技术解决昆虫识别问题,希望能给现实生活中的病虫害识别问题提供新的解决问题的思路。
1 深度学习方法
深度学习方法是一种多层次抽象学习的方法,在机器学习的基础上发展而来。深度学习通过对底层数据的相关学习,抽取出相关特征,再通过非线性的映射函数进行从底层到高层的传递与转换,最终形成机器模型。深度学习方法识别的对象都比较复杂,通常训练获得的特征远大于传统的人工识别获取的特征,并且分布式特征提取能够很好地处理非线性关系,也更符合生活中的实际情景。深度学习方法发展至今,通过对基本模型的优化和训练得到了很多性能良好的模型,如受限玻尔兹曼机RBM、自动编码器AC和卷积神经网络CNN等较基础的深度学习模型。
2 Tensorflow与卷积神经网络
2.1 Tensorflow
Tensorflow是谷歌发布的第二代人工智能系统[7],它是一个开源软件库,用于机器学习与神经网络研究。Tensorflow支持短期记忆网络LSTMN、循环神经网络RNN和卷积神经网络CNN等神经网络模型[8]。
2.2 卷积神经网络
2.2.1 卷积
神经网络由大量神经元相互连接而成[9],神经元可以在线性组合输入后加上非线性激活函数进行非线性变换,然后输出,神经网络公式如下:
式中:ai1、ai1-1分别为神经网络中的一个神经元,分别位于第l层和第l-1层第j个;Wij1为权重;bi1为偏置项;函数f为激活函数。
卷积神经网络通过局部连接和共享权值方法降低了网络复杂度,缓解了过拟合问题。其中,层与层的神经元不再是全连接,通过卷积运算相邻层之间只有部分神经元连接,使用相同卷积核进行卷积操作构成特征图。输入输出特征图的关系公式如下:
式中:Ai1、Ai1-1分别为第l层和第l-1层第i个特征图,符号“*”表示卷积运算;Kij1为第l层第i个特征图与第l-1层第j个特征图之间进行卷积映射的卷积核。
图像卷积运算的过程如图1所示。特征图像与卷积核都以矩阵形式存在,卷积核中的权值与输入特征图上对应的数值进行对应元素相乘,并对所得元素值进行累加,最终得到输出特征图的值。卷积操作通常以设定步长滑动的方式在特征图上进行,图1的滑动步长为1。
图1 卷积运算过程
2.2.2 池化
池化又称为子采样或下采样,因为图像相邻区域的特征极可能重合,所以卷积层输出中包含的大部分信息是多余的。池化是将图像全局的特征进行聚合统计,简化卷积网络计算复杂度,有效防止过拟合。池化运算常用的方法有均值池化[10]和最大值池化[11],池化运算过程如图2所示,图2的池化操作滑动步长为2。
图2 池化运算过程
2.2.3 激活函数
激活函数将非线性因素引入网络[12],可以提升网络处理复杂模式的能力。卷积网络中常用的激活函数有tanh、Sigmoid、ReLu等。对比ReLu激活函数,Sigmoid激活函数和tanh激活函数均为饱和函数,存在梯度消失问题,采用了幂运算,计算量相对较大。因此,ReLu激活函数是目前在卷积网络中最常用的激活函数。
ReLu激活函数的优点如下:(1)Relu激活函数是非饱和函数,导数为1,能有效防止梯度消失;(2)小于0的部分返回值为0,只有大于0的部分才有效,可以适当减少计算量;(3)小于0的部分输出值为0,带来网络稀疏性,减少了参数间相互依赖的关系,可以缓解网络的过拟合问题。
ReLu也存在一定的缺点。由于ReLu函数在x<0时梯度为0,可能导致该神经元后的梯度永远为0,造成神经元坏死,无论进行任何训练神经元的参数,都无法再更新。为了解决上述问题,研究学者提出了改进的ReLu激活函数,如LReLu(Leaky ReLu)、PReLu(Parametric ReLu)和 RReLu(Randomized Leaky ReLu)。其中,LReLu采用固定的a值;PRelu通过学习得到a值;RReLu的a值采用服从高斯分布的随机值。
2.2.4 分类器
逻辑回归分类器只能解决二分类问题,为了构建神经网络的多分类模型,通常使用Softmax分类器。对于给定的输入x,计算每一种分类结果的出现概率p= (y=j|x)。假设训练样本集为 { (x(1),y(1)), … , (xm,ym)},y(i)∈ {1 , 2,...,k},模型参数为W,Softmax函数要输出一个k维向量来估计k分类概率值,公式如下:
式中:为输出值;k为输出神经元个数;为归一项,即确保函数所有输出值总和为1,且每个值分布在(0, 1)范围内。
损失
函数L(W)是衡量模型输出和真实值的标准,需要通过不断优化使损失函数降低,公式如下:
式中:l{y(i)=j}为真函数时,值为1,反之,值为0;m为训练样本;λ为权重衰减参数。
3 昆虫图像模型的建立
3.1 昆虫图像数据采集
在模型训练之前,选取10个昆虫种类作为训练数据集的内容,然后通过网络爬虫,针对每个种类的昆虫各爬取200份数据,经过人工筛选,过滤掉错误和不合适的图片后,留下143份训练数据,最后按照近似7∶3的比例划分数据集。得到每个昆虫种类含有100张图片的训练集和含有43张图片的测试集。
3.2 昆虫图像数据预处理:独热编码
独热编码(one-hot encoding)又称为一位有效编码,主要采用N位状态寄存器对N个状态进行编码,每个状态都有独立的寄存器位,并且在任意时候只有一位有效。在实验中,将图片数据集转换成数组形式,并将其乱序,对变迁数据集进行独热编码,为后续模型训练做准备。
3.3 Tensorflow卷积神经网络的搭建
搭建卷积神经网络时选取的是经典的LeNet-5模型[13],定义了2层卷积池化层和3层全连接层。为了防止模型参数过拟合,设置dropout随机失活器,dropout值设置为0.5。
文章的研究重点是讨论不同优化器的使用和学习率的设置对模型最终测试结果的影响,在对各个优化器进行测试时,将采用已被广泛采用的参数值作为参考,在参考值的小幅度区间内进行试验,由此确定模型预测准确性的变化。
3.3.1 Adam优化器(Adam optimizer)
Adam是指自适应矩估计(adaptive moment estimation),是梯度下降法的一种变形[14],其每次迭代参数的学习率都有一定的范围,不会因为梯度过大而导致学习率过大,参数值相对稳定。
Adam优化器的预测准确率如图3所示,昆虫识别效果如图4所示。虽然训练数据有限,但在0.01~0.001的学习率下,Adam优化器的预测准确率可以达90%左右,效果较好。当学习率大于0.01以后,预测的准确率开始下降。
图3 Adam优化器的预测准确率
图4 昆虫识别效果示意图
3.3.2 GD优化器(gradient descent optimizer)
标准梯度下降法(gradient descent, GD)常用于求解机器学习算法模型参数,通过梯度下降,一步步迭代求解,从而得到最小化的损失函数。
GD优化器的训练结果如图5所示,昆虫识别效果如图6所示。在使用GD优化器时,效果并不理想。学习率初始设置为0.05时,预测的准确率极低;当学习率大幅度调大时,情况稍有好转,但预测准确率仍不能令人满意;当学习率大幅度调小时,情况未发生好转。由此看出,在文章的实验条件下,GD优化器不适合作为实验的优化器。
图5 GD优化器训练结果
图6 昆虫识别效果示意图
3.3.3 Adagrad优化器(Adagrad optimizer)
Adagrad是一种基于SGD的算法[15],其核心思想是对不同的数据集用不同的学习率去调整参数,用较小的学习率调整常见数据集的参数,用较大的学习率调整罕见数据集的参数。Adagrad算法比较适合用于数据稀疏的数据集。
Adagrad优化器的训练结果如表1所示,昆虫识别效果如图7所示。Adagrad优化器学习率的初始值设置为0.005,当将其调小时预测准确率出现较大的下降;当将学习率按一定梯度调大时,预测的准确率出现好转,最好的情况是学习率为0.01时,测试准确率接近90%,但总体的准确率基本维持在80%左右。
图7 昆虫识别效果示意图
表1 Adagrad优化器的训练结果
4 结论
文章基于Tensorflow搭建了卷积神经网络进行昆虫识别,并重点讨论了不同优化器的使用和学习率的设置对模型最终测试结果的影响。文章主要对三种优化器进行了实验,分别是Adam优化器、GD优化器和Adagrad优化器,并分别设置了不同的学习率。最终发现Adam优化器在学习率为0.009时表现最好,预测准确率达91%。本次实验的数据集较小,且选择的卷积神经网络的深度较浅,在预测准确度方面仍存在很大的提升空间。