郑 铖, 董 伟, 高海涛*
(1.安徽科技学院 电气与电子工程学院,安徽 蚌埠 233030;2.安徽省农业科学院,安徽 合肥 230001)
玉米是一种高产量粮食作物,是食品、医疗卫生、化工业等重要领域必不可少的原料之一[1]。玉米病害可以直接导致其产量急剧减少,常见的病害有大斑病、小斑病、锈病等。传统的农作物病害诊断通常依赖专家判断为主[2],其检测方法效率低、主观性强、耗时耗力,不适合大区域场景。因此,研究一种识别准确率高,并且适用于大区域场景的玉米病害识别方法就显得尤为重要[3-5]。
近年来,卷积神经网络(Convolutional Neural Networks,CNN)被广泛应用于各种领域,在农业病害识别领域也成效显著[6-9]。许景辉等[10]对田间复杂的玉米病害图像进行识别,提出了一种基于迁移学习的VGG16网络模型,设计了全新的全连接模块,其准确率达到95.33%。赵玉霞等[11]分别利用粗糙集理论、遗传算法、局部判别映射和局部线性嵌入算法对提取的病害特征进行识别,准确率依次为83.00%、90.00%、94.40%和99.50%。Qiu等[12]基于迁移学习的VGG16网络模型对水稻的10种病害进行识别,对VGG16网络模型进行了参数微调和线性判别,准确率达到了97.08%。徐岩等[13]针对马铃薯叶片病害,提出一种基于注意力和残差思想的ResNet模型,并对其进行训练研究,平均识别准确率为93.86%。杨晋丹等[14]以草莓叶部白粉病为研究对象,设计了3种网络深度和3种卷积核交叉组合的CNN模型,识别准确率达到98.61%。孙俊等[15]结合注意力机制对MobileNet-V2模型进行了改进与优化,对多种植物叶片病害进行识别,改进后的模型识别准确率为92.20%。Too等[16]选择Plant Village作为数据集,对VGG16、DenseNet、ResNet50等经典网络模型做分析比较,识别准确率最高的是DenseNet模型。这些成果为玉米病害的高效识别提供了新的方向。
为优化模型性能,进一步提高识别准确率,本研究设计一种Corn_Modle模型,引入Focal Loss函数作为评估函数,解决小样本分布不均匀所产生的误差,对玉米锈病、小斑病、弯孢霉叶斑病、纹枯病、大斑病、褐斑病等6种病害进行智能识别,为验证该模型的正确性和综合识别性能,将识别结果与经典的卷积神经网络模型进行比较。
本研究的数据集来源于安徽省农业科学院,为田间人工拍摄数据库,该库共有6种玉米病害类型,共计2 725张,其中玉米锈病470张,玉米小斑病645张,玉米弯孢霉叶斑病546张,玉米纹枯病356张,玉米大斑病260张,玉米褐斑病448张。病害样本如图1所示。
图1 玉米病害图片种类Fig.1 Picture types of corn diseases
在数据集图片采集过程中,作物拍摄背景复杂多变,图片质量受背景、光线影响较大,在复杂的背景条件下病害识别效果不佳,并且原始的数据集图片尺寸大小不一致,数量有限。为增加数据集数量和提高数据集质量,训练出更优秀的模型,本研究对原始数据集进行数据增强处理,主要方法如下:对原始数据集图片进行随机旋转40%、随机裁剪、随机缩放、水平和垂直方向随机平移20%等操作,如图2所示。将增强后的数据集图片尺寸统一设置为256×256像素,图片存储为jpg格式,标签数组采用2D的one-hot编码标签。为提高模型训练精度,增加网络的泛化能力,减少计算量,控制梯度消失等,对每个像素通道进行批量归一化(Batch normalization,BN)处理[17]。
图2 玉米病害图片数据增强 Fig.2 Image data enhancement of corn diseases
经过一系列数据增强,原始玉米病害数据集数量被扩充到11 445张,且没有重复的图片,最后将数据集按照8∶2的比例划分为训练集和测试集,即80%的数据用于训练模型,20%的数据用于测试获取的试验结果。玉米病害数据集图片处理前后的数量变化如表1所示。
表1 玉米病害数据集处理前后图片量Table 1 Number of images before and after processing of corn diseases data set
卷积神经网络(CNN)是一种带有卷积计算的多层监督学习的深度神经网络,是深度学习的经典算法之一,CNN主要由输入层(Input Layer)、卷积层(Conv Layer)、激活函数、池化层(Pooling Layer)、全连接层(FC Layer)和输出层(Output Layer)等组成[18]。其中卷积层和池化层在整个网络中起主导作用,对输入的图片数据进行特征提取[19]。
根据数据集大小以及玉米病害的特点,基于卷积神经网络基本结构,本研究设计一种新的玉米病害识别模型Corn_Modle,其网络结构如图3所示。
图3 Corn_Modle玉米病害识别模型结构Fig.3 Structure of corn diseases identification model
一般情况下,神经网络的层数越多,对输入图片的特征提取就越强,对其理解的准确度也就越深,但不是绝对的。为平衡网络复杂度和识别精度,本研究采用折中的5层网络模型结构(只计算卷积层)。Corn_Modle玉米病害识别模型由5个卷积层(分别对应Conv1到Conv5),5个最大池化层和4个全连接层组成。目前,卷积核个数具体数量的选取尚无理论支撑,本研究通过设置几组候选值,通过调参、实验、对比的方式选取性能最佳组。5个卷积层Conv1~Conv5包含的卷积核个数依次选取为16、32、64、128、256,卷积核尺寸大小均为3×3,卷积层采用的填充方式(padding)为same方式,即卷积层输出的特征图和输入时的图片保持相同的shape[20-21]。网络结构具体描述如下:
卷积层Conv1:输入1张256×256×3的玉米病害图片,用16个尺寸为3×3的卷积核对输入图片进行卷积,提取特征,得到256×256×16的特征矩阵。
卷积层主要是对图片进行特征提取,是整个卷积神经网络中最重要的核心层。通过卷积运算可以获得病害图片的特征图,卷积层的运算如式(1)所示:
(1)
为增加网络的非线性表达能力,防止输出层都是输入层的线性组合,在卷积层后添加激活函数,因为上层输出的特征图相当于矩阵相乘,激活函数可应用到非线性模型中。常见的激活函数有Sigmoid、Tanh、ReLU、ELU等,本研究采用ReLU激活函数,其表达式如式(2):
(2)
为压缩数据和降低模型的计算复杂度,减少过拟合现象,用2×2的卷积核对该卷积层进行最大池化操作,得到128×128×16特征图。该池化层主要是对特征图进行压缩下采样,特征降维(类似PCA),减少计算量,大幅降低图片的维度和分辨率,有平均池化和最大池化等2种选择,本研究采用最大池化方法,如式(3)所示:
(3)
其中,down(·)表示池化函数。
卷积层Conv2:用32个3×3的卷积核对上层进行卷积操作,得到128×128×32的卷积层,然后用2×2的卷积核对该卷积层进行最大池化操作,得到64×64×32的特征图。卷积层Conv3:用64个3×3的卷积核对上层进行卷积操作,得到64×64×64的卷积层,然后用2×2的卷积核对该卷积层进行最大池化操作,得到32×32×64的特征图。卷积层Conv4:用128个3×3的卷积核对上层进行卷积操作,得到32×32×128的卷积层,然后用2×2的卷积核对该卷积层进行最大池化操作,得到16×16×128的特征图。卷积层Conv5:用256个3×3的卷积核对上层进行卷积操作,得到16×16×256的卷积层,然后用2×2的卷积核对该卷积层进行最大池化操作,得到8×8×256的输出层。把这些输出的特征用Flatten层进行展开平铺,转化为一维向量作为全连接层和输出层的输出。
全连接层将前面所有提取的特征信息进行整合处理,目的是将输入的二维特征提取向量降维到一维特征向量,最后实现图像分类,在整个网络模型中起到类似“分类器”的作用,如式(4)所示:
(4)
其中,b为偏置值,w为权重参数。
全连接层F1:使用了512个神经元;全连接层F2:使用了128个神经元;全连接层F3:使用64个神经元;输出层:采用式(5)所示的Softmax函数,输出类别为本研究的6 种病害。
(5)
(6)
对于图像分类等问题,通常采用交叉熵作为损失函数,但是在实际训练的过程中,为防止过拟合现象的发生,通常采用L2正则化,所以最终模型的损失函数为式(7)所示:
(7)
为进一步改善流经网络的梯度,大幅度提高训练的速度,在该识别模型的每个卷积层后面,添加1个批归一化(BN)层,提升该模型的准确率。为进一步防止过拟合,让整个网络模型中间输出值更加稳定,在Corn_Modle模型的第4、5个池化层后面,以及前3个全连接层后面,添加1个Dropout层。
使用神经网络可视化工具Netron可以清晰地看到网络结构每一层的输入输出,本研究设计的Corn_Modle模型的Netron可视化结构如图4所示。Input为输入病害图片,大小尺寸为256×256×3,InputLayer为输入层,Rescaling是对图片进行预处理,Conv2D是卷积层,kernel是经过处理后的图片尺寸,bias是偏置值,ReLU是激活函数,MaxPooling2D是池化层,BatchNormalization是批归一化层,最后的Softmax函数对输出特征进行分类。
将增强后的玉米病害数据集中的训练集用于该模型的输入数据,对模型参数进行训练,然后用测试集测试该模型的性能,获得最终的准确率。训练过程中,设置训练轮数(epoch)为30,批量大小(batch size)为32,即每一批次训练的玉米病害图片为32张。固定学习率为0.001,动量参数设为0.9。Dropout层的作用是模型在训练过程中随机地丢掉一些输出神经元,为进一步减缓过拟合现象,将Dropout层概率设置为0.4,随机丢掉40%节点。整个模型训练过程如图5所示,在划分好的训练集中随机选取一些玉米病害图片作为自建神经网络的输入,提取分类特征,把输出的预测病害类型和实际输入的病害类型进行交叉熵的运算,通过反向传播调整网络参数,然后与学习率相乘对每层输出的权重参数进行更新。最后将更新过的权重参数保存为.h5文件后,构建玉米病害识别系统,进行模型应用,高效准确识别玉米病害[22]。
2.1 试验环境本研究的试验环境为操作系统为Windows10(64位),计算机显卡为NVIDIA GeForce GTX 1650,处理器(CPU)为 Intel(R)Core(TM)i5-10400F CPU@ 2.90 GHz,编程语言为Python 3.7,编程软件为PyCharm 2021.2.3,深度学习框架为Tensorflow 2.3。
为评价该模型性能的优劣,采用精准度、召回率、准确率作为模型的评价指标对Corn_Modle模型性能进行评价[23]。
为全面分析玉米病害识别模型的性能,将Corn_Modle模型与AlexNet、LeNet-5、ResNet50、MobileNet等4种经典卷积神经网络模型进行对比,得到的试验结果如表2和图6所示。从表2和图6可以看出,在各个模型训练的过程中,训练轮数达到20时,各模型均逐渐趋于收敛,均有较高的准确率和较低的损失率。除ResNet50模型外,其他各模型均有较高的训练准确率,均在90%以上,AlexNet的训练准确率最高(99.10%),其次为Corn_Modle模型(98.09%)。随着训练轮数的增加,各模型损失值均在不断下降,Corn_Modle模型的最终训练损失率为0.073 0。5种模型的最终损失值达到稳定状态,其中Corn_Modle、AlexNet、MoblieNet等3种的模型测试准确率稳定在较高的数值。
表2 不同网络模型的试验结果
图6 5种模型的曲线图Fig.6 Graph of five models
将训练好的各模型预测测试集,得出结果曲线图(图6c、d),可以看出,Corn_Modle模型测试准确率为(96.85%),高于LeNet-5(77.06%)、AlexNet(93.98%)、MobileNet(87.25%)和ResNet50(63.44%)等4种经典网络模型准确率。同时Corn_Modle模型测试损失率为(0.092 6),低于LeNet-5(0.980 8)、AlexNet(0.224 0)、MobileNet(0.381 7)和ResNet50(1.042 0)等4种经典网络测试损失率。
Corn_Modle模型和其他4种经典网络模型对6种玉米病害识别的准确率、精准度、召回率评价指标如表3所示。Corn_Modle模型的准确率、精准度、召回率指标高于其他4种经典网络模型评价指标,表现出较强的鲁棒性和泛化能力,为精准识别玉米病害类别提供保障。
表3 不同网络模型的评价指标Table 3 Evaluation indexes of different network models
针对现有的玉米病害识别存在精确度不高、耗时耗力等问题,基于传统的卷积神经网络,综合运用Dropout、批归一化、添加BN层等技术,搭建一种全新的玉米病害识别模型。在相同训练参数下,Corn_Modle模型测试准确率为96.85%,较AlexNet、MobileNet、LeNet-5和ResNet50等模型测试准确率提高了2.87%~33.41%,并且测试损失率最低,为0.092 6。本试验结果表明,在相同的训练条件下,Corn_Modle模型在准确率、精准度、召回率和鲁棒性等方面,性能优于其他4种经典网络模型,具有更好的识别效果,验证了该模型的有效性,可以用作玉米病害识别。