基于SE 模块和ResNet 的番茄病虫害识别方法

2022-02-03 07:58胡文艺王洪坤杜育佳
农业工程 2022年9期
关键词:番茄准确率卷积

胡文艺, 王洪坤, 杜育佳

(成都理工大学计算机与网络安全学院,四川 成都 610059)

0 引言

2020 年3 月,联合国粮农组织、世界卫生组织和世界贸易组织总干事发表联合声明,各国必须采取措施确保粮食安全[1]。番茄作为全球栽培最广、消费量最大的蔬菜作物,是国家出口创汇和农民增收致富的重要途径[2]。番茄富含VC、番茄红素和矿物质,具有抗癌、防衰老和提高人体免疫力等功能[3]。番茄品种类型丰富,既可作水果又可鲜食作蔬菜,还可加工成各种如番茄酱、沙司及果汁的番茄制品,常被作为重要的研究对象及模式植物,在遗传学、细胞生物学、生物工程、分子生物学和基因组学等科学研究领域具有重要研究价值[4]。在番茄的生产过程中,常伴有病虫害的发生,会造成产量的巨大损失,其中以气候湿润区晚疫病对番茄产量的影响尤为明显[5]。因此,防治番茄病虫害是提高番茄产量和品质的关键,提供疾病早期的检测和鉴定对选择正确的防治方法和阻止疾病的传播极为重要[6]。

近年来,基于深度学习的机器学习和物联网技术在农业领域的应用,提高了作物叶片病虫害识别的效率和精度。传统机器视觉算法需要根据目标任务和先验知识选择合适的特征(包括图像颜色、形状、纹理等),用来提取这些特征的特征提取器需要人为构建,较为烦琐和缺乏泛化能力[7-9]。卷积神经网络方法可以根据数据及其类别自行调整权值参数以构建合适的特征提取器,相对高效便捷,构建的特征提取器还具备更优异的泛化能力,可以有效克服传统方法的缺陷[10]。邹永杰等[11]提出了一种结合HOG、LBP 特征的番茄病虫害检测模型。吕权[12]提出了一种基于神经网络的番茄叶部病害识别方法。JIANG D 等[13]采用深度学习的方法提取番茄叶片的斑叶枯病、晚疫病和黄化曲叶病等病害特征。刘志勇等[14]提出了基于改进LeNet5 并通过数据增强方式扩充数据的网络模型。柴帅等[15]提出基于VGG-19 卷积神经网络进行迁移学习,可提高番茄病虫害的图片分类精度。CHENG X 等[16]提出了注意力机制与残差结构相结合的PARNet 番茄叶部病害识别模型。

本文针对番茄病虫害识别问题,基于Kaggle 网站上的Tomato 数据集,引入压缩与激励(Squeeze-and-Excitation,SE)模块的深度残差网络(ResNet),研究提升病番茄虫害识别精度的方法,对番茄病虫害及时监测和处理具有重要的指导意义。

1 卷积神经网络

在深度学习不同的体系结构中,卷积神经网络(Convolutional Neural Network,CNN)是一种特殊的空间数据多层神经网络,其架构灵感来自于生物视觉对外界的感知[17]。卷积神经网络的基础是由HUBEL 和WISEL 在1959 年发现的,他们表示动物视觉皮层中的细胞可以在小的感受野中识别光[18]。KUNIHIKO 等[19]受到这项工作的启发,在1980 年提出了新认知机,该网络也被认为是CNN 的第1 个理论模型。1998 年,LECUN Y等[20]开发了早期卷积神经网络的代表性结构LeNet5,用于手写数字识别。2021 年,KRIZHEVSKY 等将卷积神经网络的结构进行多层扩展,设计了一个更大深度的网络AlexNet,并在ILSVRC 上表现出优异的性能[21-22]。

传统的卷积神经网络(CNN) 是由卷积层(Convolution)和池化层(Pooling)的单个或多个块接上一个或多个全连接层(FC),最后跟上一个输出层组成,如图1 所示。卷积层是CNN 的核心部分,是卷积核的计算过程。卷积核通过每次移动相同步长,将图像像素和卷积核的对应权重相乘,并对结果应用非线性激活函数,得到新的特征映射[23]。经过多个卷积层的运算,最后得到图像在不同尺度的抽象表示。池化层将卷积输出的一小部分作为输入,并对其进行下采样以产生单个输出。常见的池化操作有最大池化和平均池化两种。通过池化降维,可以缩减模型大小提高计算速度,同时降低过拟合概率提升特征提取鲁棒性[24]。CNN 的全连接层通常存在于前馈神经网络中,其本质是一个矩阵乘法,相当于一个特征空间变换,起到了将学习的“分布式特征表现”映射样本标记空间的作用[16]。

图1 卷积神经网络结构Fig. 1 Structure of convolutional neural networks

在图像分类中,CNN 可以看作是两个部分的组合:特征提取部分和分类部分。卷积层和池化层的操作都是特征提取的过程,以番茄叶片为例,从底层到高层的不同卷积层检测出叶片的残缺、卷曲、菌斑等各种特征,以便进一步识别。在这些特征之上,添加FC 层作为分类器,并为输入图像分配一个作为何种症状的概率。除了层次设计外,CNN 的改进还取决于激活函数、归一化方法、损失函数、正则化、优化和处理速度等方面。

2 SE+ResNet 网 络 模 型

2.1 经典ResNet 网络

ResNet(Residual Neural Network)由微软研究院HE Kaiming 等提出,通过使用ResNet Unit 成功训练出了152 层的神经网络,并在ILSVRC 2015 比赛中取得冠军,在top5 上的错误率为3.57%,同时参数量比VGGNet低,效果非常突出[25]。ResNet 的结构可以极快地加速神经网络的训练,模型的准确率也有比较大的提升。同时ResNet 的推广性非常好,甚至可以直接用到InceptionNet 网络中[26]。

神经网络的结构会随着网络层数的不断增加而变得越来越深,结构加深会导致梯度消失,从而使得模型的学习越来越困难。因为当梯度被反向传播到前面时,重复相乘会导致梯度变得无限小,此时卷积神经网络的性能不会再提升,甚至有下降的趋势[27]。这种下降并不是由过度拟合引起的,而是向适当深度的模型中添加更多层导致的更高训练误差造成的[28-29]。为了解决这个问题,有学者提出引入全等映射的思想,提出残差结构学习单元,如图2 所示。基本思想是不希望每个堆叠的层都直接符合所需的底层映射,而是显示地让这些层符合残差映射。在形式上表现为,假设网络的输入是x,期望的底层映射是H(x),让堆叠的非线性层符合F(x)=H(x)−x这个映射。原始的映射将会被重新定义为F(x)+x。由此,保护了输入信息的完整性,整个网络只需要学习输入与输出有差别的那一部分,简化了学习目标和难度。

图2 残差结构模块Fig. 2 Residual structure module

残差结构单元不仅能有效地解决深度神经网络中梯度消失和精度退化的问题,而且可以在不额外增加计算量和网络参数的情况下提升模型的准确度和计算速度[27]。

2.2 SE 模块

SENet (Squeeze-and-Excitation Networks)获 得 了ImageNet2017 分类比赛冠军,其提出的SE 模块思想简单,易于实现,并且很容易加载到现有的网络模型框架中[30]。SE 是一个可由任意给定的变换组成的计算单元,结构如图3 所示,对于任意给定的信息进入网络模块后进行如式(1)所示的转换。

图3 SE 结构Fig. 3 SE structure

式中,Ftr为转换操作(一个或一组标准的卷积操作),X是输入的图片,U是提取的特征,W、H、C分别是宽度、高度和通道数。特征U首先经过一个压缩操作,将空间维度为H×W的特征图聚合成一个特征描述符。这个描述符包含了通道维度上特征响应的全局分布情况,使较低级别的层也可以获得来自网络的全局感受野的信息。接下来是激励过程,用一个样例特化(sample-specific)的激活函数,通过基于通道相关性的门限机制(self-gating mechanism)学习控制每个通道的激活情况。每个特征图U将会被重新赋予权重并得到SE 输出,可以直接输出到下一层,在输出之前,这个过程会被分成压缩和激励两部分。

(1)压缩(嵌入全局信息)。

为了解决通道间相关性的利用问题,应该首先输出特征图中每个通道的信号。每个卷积核都是作用在局部感受野上,这导致每个变换输出U的单元不能利用这个范围之外的环境信息,这个问题在感受野很小的较低层级中会更加严重。为了减轻这个问题,JIE H 等[30]将全局空间信息压缩成一个通道描述符。利用全局平均池化得到一个通道维度(特征维度)上的统计数据。统计值z∈RC是由式(2)压缩具有空间维度H×W的U得到的。

式中,Fsq为压缩过程,变换输出U可以被解释为一个局部描述符的集合,这些描述符的统计信息可以表达整幅图像,利用这些信息在特征工程的研究中是很常见的[31-33]。

(2)激励(自适应重定标)。

为了能够利用压缩操作得到的聚合信息,下一步的目标是完整捕获通道维度上的依赖性。为了实现这个目标,这个函数必须具有满足两个标准。第一,足够灵活,能够学习通道间非线性的相互作用。第二,能够学习一个非互斥(non-mutually-exclusive)的关系,以确保多个通道都能被强调,这与独热激活(one-hot activation)方式相反。为了满足这两个标准,选择了一个带有sigmoid 激活函数的简单门限机制,如式(3)所示。

2.3 改进网络模型描述

ResNet 的残差块可以很好地利用浅层特征来获取更多的关键特征值,在图像分类和识别任务中,它经常被用作主要的特征提取结构。本文采用ResNet 作为主体结构,在此基础上引入SE 模块,构建出了SEResNet 网络结构,如图4 所示。通过加入一个全局池化层来生成特征分布,并以此完成信息编码的提取。为了获得各通道之间的相关性,结合ReLU 激活函数和sigmiod 门控制机制来完成特征的重标定[34]。另外,为了简化模型参数的复杂性,还在ReLU 函数的两端分别采用了1 ×1的全连接层[35]。

图4 SE-ResNet 网络结构Fig. 4 SE-ResNet structure

原始的ResNet 最后一层是一个全连接层,并且是一个输出为1 000 维的线性层,为了让该网络适应本文的番茄虫害识别模型,做了一定的修改。

(1)将原来的1 层线性层改为3 层线性层,并且最后一个线性层的输出维度是10,因为本文研究的问题是一个10 分类问题。

(2)在网络的特征提取部分中使用PReLU 激活函数[36]。因为该激活函数可以有效防止网络中的神经元失活,还能在几乎不增加网络计算成本的情况下提升网络的拟合能力。

(3)在前两个线性层之后使用Dropout 方法[37]。Dropout 将网络中的神经元以设定的概率丢弃掉,这样可以减少参数数量,在一定程度上提升网络的训练效率。

(4)在最后一个线性层之后使用SoftMax 回归作为网络的输出层。SoftMax 能将网络的输出映射到(0,1)之间,将最后结果转化为每一个类别的概率。

3 验证试验

3.1 数据集

试验数据集采用Kaggle 网站上的Tomato 数据集,共有9 种番茄病虫害类别,部分病虫害示例如图5 所示。为了增加网络模型的训练量,提高模型的泛化能力,在原始数据的基础上利用数据增强的思想,扩充番茄病虫害数据集,最终使数据达到22 930 张,其中训练集数据达18 345 张,测试集数据达4 585 张,所有数据的统计如表1 所示。具体的数据增强方式:①以0.3 的概率对原始图像进行上下翻转或者左右翻转;②用1∶1∶10 的平移尺度对图片进行平移;③按照−10°∶1°∶10°的旋转角度对图片进行随机旋转;④采用1∶1∶10 的增强范围对图片进行对比度增强;⑤以均值为0、标准差为1∶1∶5 对图片进行噪声注入。

表1 数据统计Tab. 1 Data statistics单位:张

图5 番茄病虫害示例Fig. 5 Example of tomato pests and diseases

3.2 试验环境

试验平台为Windows10 操作系统,16 GB RAM,CPU 为Intel(R) Core(TM) i5-10400F,处理器主频为2.90 GHz,GPU 为RTX2060。使用的编程语言为Python,深度学习框架为Pytorch1.7.1,数据分析工具为matplotlib。

3.3 试验内容

在经典ResNet 网络模型的基础上进行修改,使用SoftMax 回归作为网络的分类器,损失函数选择交叉熵损失函数,并使用Adam 优化器进行优化和更新。在ResNet 的基础上,将原来BasicBlock 模块中的激活函数改为PReLU 函数,并在网络中加入SE 模块,最后搭建出不同深度的网络模型,分别为ResNet34、ResNet50、SE-ResNet34 和SE-ResNet50。

网络模型搭建好后,将所有的图片进行裁剪使其大小固定在2 24×224像素,同时提取出用于训练和验证的图片,训练集的图片参与网络模型的训练使其学习出对应的参数,测试集的图片用来评价网络模型的精度。试验方法采用迁移学习的方式,因为迁移学习降低了构建深度学习网络需要的训练数据量和计算力,能够很好地解决小容量数据集在模型上的过拟合问题[38-39]。试验中设定模型的训练次数为40 次,数据批处理量(batchsize)为64,学习率为0.000 3。网络模型参数设置好以后,保持其他条件的一致性,分别使用ResNet34、ResNet50、SE-ResNet34 和SE-ResNet50 网络模型进行试验,并对结果进行比较。

3.4 试验结果与分析

为了直观看到试验效果和验证方法有效性,采用经典ResNet 网络和改进的SE-ResNet 网络方法对番茄病虫害识别做对比试验,评价指标为准确率和损失值,结果如表2 和表3 所示。

表2 平均准确率对比Tab. 2 Comparison of average accuracy

表3 特定类别的识别准确率对比Tab. 3 Comparison of recognition accuracy for specific categories单位:%

由表2 可知,ResNet34 网络模型的平均识别准确率最高可达94.23%,ResNet50 比ResNet34 的平均识别准确率低,这是因为ResNet50 对晚疫病和番茄花叶病毒的识别准确率虽然较高,但是对其他种类病害的识别准确率有一定程度的下降,尤其是在健康类别上,最终导致模型的平均识别准确率有所下降。由图6 可知,改进的2 个网络模型的平均正确率均高于原始网络。这是因为引入了SE 模块方法后,加强了网络对输入图片的动态适应性,增强了网络的区分能力,在一定程度上提高了网络的识别正确率。在改进的SE-ResNet34 和SE-ResNet50 两个模型中,SE-ResNet34 的平均正确率最高,达到97.96%,比没有SE 模块的ResNet50 结果高5.89%,证实了模型的有效性。

图6 不同模型的准确率Fig. 6 Accuracy of different models

从表3 可以看出,加入SE 模块的ResNet 网络对病虫害种类的识别正确率普遍高于经典ResNet 网络。以SE-ResNet 网络为例,该网络在健康和黄叶卷曲病毒上的识别准确率相比经典ResNet 分别提升了9.02%和3.48%,但是对叶霉病的识别准确率却下降了1.63%。这是因为SE 模块能自动获取到各通道特征的重要性,让网络模型学习到更重要的特征,由此让网络在学习特征时变得更加均衡,但正是由于这种均衡,会导致对健康和黄叶卷曲病毒类别的识别准确率提升,而对叶霉病类别的识别准确率有一定程度的下降。

对4 个网络模型结构进行迁移学习,训练过程中的损失值如图7 所示。可以看出SE-ResNet34 和SEResNet50 的损失值均低于ResNet34 和ResNet50,这表明改进后网络模型的预测值和目标值之间的差距越小,性能也越好。

由图7 可知,在30 个epoch 后,损失值趋于平稳,但是依然存在一些小的波动。从损失曲线上可以看出存在很多个极小值,这就是局部最优解,网络模型的每一训练都会使得参数的变换朝着模型的局部最优解接近,但是局部最优解相对于全局最优解来说存在着一定的偏差,所以会出现曲线上下波动的情况。其次,学习率也会影响网络模型的训练效率,较低的学习率会使loss 曲线下降缓慢;较高的学习率会使loss 曲线出现水平不变的情况。从图中可以看出,SE-ResNet34 和SE-ResNet50 网络模型的loss 曲线是先快速下降后缓慢下降再趋于平稳的情况,同时它们的波动也相对较小,这符合优秀模型的loss 曲线分布。

图7 不同模型的损失值Fig. 7 Loss values for different models

4 结论

本文在经典ResNet 网络模型结构的基础上嵌入了SE 模块,并改进了最后一层的全连接层结构,用一个10 分类的3 层全连接层取代原来ResNet 模型的1 000类分类层,对番茄的9 种病虫害加一种健康类别共10种类型进行研究。通过迁移学习的方法,将Pytorch 官网预训练好的模型应用到网络中,基于不同深度的代表性网络结构构建了4 种病虫害识别模型,其中最高平均正确率达到了97.96%,证明了方法是有效可行的。试验结果表明,加入SE 模块的ResNet 网络模型在提升网络精度、获得有效的病虫害图片特征、识别复杂图片等方面都取得了不错的效果。

但是现实生活中番茄病虫害的种类不仅仅是本文所示的种类,要想网络模型具有更强的泛化能力和更好地应用在实际生产中,还需要收集更全面、更多种类的数据集。下一步研究重心将会放在如何收集更大更全面的数据集,以及网络模型的进一步训练优化上。

猜你喜欢
番茄准确率卷积
秋茬番茄“疑难杂症”如何挽救
基于3D-Winograd的快速卷积算法设计及FPGA实现
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
2015—2017 年宁夏各天气预报参考产品质量检验分析
番茄果实“起棱”怎么办
卷积神经网络的分析与设计
从滤波器理解卷积
高速公路车牌识别标识站准确率验证法
基于傅里叶域卷积表示的目标跟踪算法