孙文斌, 王 荣, 高荣华, 李奇峰, 吴华瑞, 冯 璐
1. 北京农业信息技术研究中心, 北京 100097
2. 广东工业大学信息工程学院, 广东 广州 510006
3. 国家农业信息化工程技术研究中心, 北京 100097
4. 西北农林科技大学信息工程学院, 陕西 杨凌 712100
农作物病害不仅对全球范围内粮食安全构成威胁, 还对依靠健康作物为生的小农经济造成灾难性后果。 因此, 农作物病害诊断对保证农作物高产、 优质、 高效具有十分重要的意义。 传统作物病害诊断需要大量专家经验知识, 人工诊断时效性差、 成本高且正确率较低。
目前已有的基于计算机视觉的病害识别研究中, 主要分为高光谱和可见光图像两大类, 基于高光谱图像的病害识别算法成本较高且速度较慢, 无法实时识别; 因此基于可见光谱和卷积神经网络的农作物病害识别成为近几年的主流研究方向。 Johannes[1]提出一种利用卷积神经网络(convolutional neural networks, CNN)识别移动设备拍摄的多种植物图像的病害类别, 证明了CNN在多种植物病害识别方面具有巨大潜力。 通过加深卷积层和池化层数量的方式可提高模型识别的准确率, 但增加了模型参数。 在病害识别方面, 改进Alexnet网络和LeNet网络模型被应用于苹果病害图像[2]、 香蕉病害图像[3]以及西红柿病害图像[4]识别, 均取得了较好的识别效果, 但其识别模型仅针对于单一植物病害识别, 数据集数量较小, 对多种植物病害混杂及发病早期的图像识别率较低。 在多种作物病害混合的数据集Plant Village数据集中, Sladojevic等[5]应用AlexNet架构实现了多植物病害图像识别。 孙俊[6]等利用归一化和全局池化Alexnet网络对Plant Village 数据集中部分植物疾病和健康叶片的数据进行识别。 目前主流病害识别算法均基于Alexnet实现, 然而Alexnet网络参数量较大, 模型易出现过拟合现象, 在其他数据集中的泛化能力较弱, 因此提高弱参数网络识别率, 优化模型识别速度, 仍是病害识别的难点之一。
注意力机制可为通道特征增加约束, 实现对特征的重校准。 SENet[7]提出了一种压缩激励的注意力机制, 通过仅关注利于任务实现的区域信息, 抑制非必要性信息, 提高分类准确率, 但其激励部分的特征提取能力不足, 对早期病害细节部位的特征提取不足。
基于上述问题, 本工作在农作物病害识别领域中引入注意力机制, 设计了新的注意力模块SMLP (squeeze-multi-layer perceptron), 在提高病害识别率的基础上, 提出基于可见光谱和改进注意力机制的弱参数农作物病害识别模型SMLP_ResNet。 将所提出的方法分别在两种公开的农作物病害数据集中重新训练和测试, 对不同超参数进行调优, 对比分析其他农作物病害识别模型。 实现了对同种农作物的多种病害、 同种病害的早期和晚期, 以及多种农作物健康叶片的识别。
农作物病害识别领域中存在不同识别难度的公开数据集, 病害类别越多、 类与类之间的样本差异越小以及每类病害中的图像数量越少, 则数据集病害识别的难度越大。 大多数病害研究者只针对单一植物病害进行识别, 本工作同时选用包含多种农作物和多种病害的公开数据集Plant Village和AI Challenger 2018, 这两个数据集代表了不同的识别难度, 数据集参数如表1所示。
表1 农作物病害数据集对比
Plant Village数据集包含14种作物的健康叶片和24种病害叶片, 将54 306张病害的可见光图像划分为38类。 AI Challenger 2018农作物病害数据集包含10种作物, 27种病害, 将每种病害按照不同发病程度划分为发病早期和晚期不同等级的病害类别, 将35 861张图像划分为59类。 其部分叶片样本示例如图1所示, 对于同种作物的相同病害, Plant Village中病害叶片的发病程度近似于AI Challenger 2018中病害晚期的图像, 而AI Challenger 2018中增加的早期病害图像与健康叶片极相似, 增大了数据集的识别难度。 因此选择这两种不同难度的数据集验证本研究中病害识别模型的性能。
图1 数据集中部分样本示例
卷积核可从输入的特征图中学习新特征图, 卷积神经网络常用于处理计算机视觉中分类和检测任务。 卷积核提取特征图时对局部区域进行特征融合, 捕捉局部空间关系, 而通道中的特征未被区分便被输入下一层, 使得网络无法关注目标的显著信息, 抑制无用的噪声信息。 因此在卷积神经网络中引入注意力机制, 可从特征中学习分布规律, 对其重校准, 增强模型对显著特征的提取能力并抑制通道噪声。
SE(squeeze-and-excitation)注意力模块的核心思想在于提出压缩(Squeeze)和激励(Excitation)两个操作整合通道特征, 并根据特征显著程度抑制与分类任务无关的冗余特征。
SE模块的原理结构图如图2所示, 特征图X通过卷积变换F(tr)之后得到特征映射U,U∈RH×W×C, 然后利用SE模块对特征重校准。SE模块首先利用压缩操作Fsq(·)将特征图U压缩成1×1×C格式, 该操作通过跨空间维度聚合特征图(H×W)生成通道描述符。 其功能为产生一个嵌入的全局分布的通道特征响应, 将全局接受域信息整合供其他层使用。Fex(·)为激励操作, 作用于筛选聚合后的全局特征。 然后利用自选门函数(Sigmoid)产生每个通道调制权值集合, 并将这些权值集合作用于特征图U中, 得到SE模块输出, 得到新的特征图H×W×C。
图2 SE模块结构图
由于农作物病害识别对细节特征提取要求较高, 为进一步提高SE模块对通道中重要特征分辨能力, 利用多层感知机(multilayer perceptron, MLP)可学习任意函数映射的数学特性代替SE中的Excitation模块分离混合特征, 并定义为SMLP_Res模块。
图3 SMLP-Res模块结构图
为实现特征的压缩, 利用全局平均池化将大小H×W×C的特征图在通道维度上压缩为1×1×C的特征, 对于第k个通道的压缩操作为
(1)
式(1)中,uk(i,j)为特征图U中第k个通道上位于(i,j)处的值;Fsq(U)=Fsq(u1,u2, …,uc)为MLP的输入特征。 为捕获通道上的依赖关系, 激励模块利用含有多隐藏层的多层感知机学习全局特征中各通道之间的非线性关系。 将提取的重要特征映射到高维空间中可减少特征损失, 再对特征进行两次降维, 分离显式特征, 生成调制权值。 MLP模型输入输出变量之间的函数关系表示为
f(u)=b(3)+W(3)(G(b(2)+W(2)(G(b(1)+W(1)Fsq(U))))
(2)
式(2)中,b(1),b(2),b(3)为偏置向量;W(1),W(2),W(3)为权重矩阵;G为ReLU激活函数。 由于激励模块需要学习通道之间的非线性相互作用关系, 保持特征的多样性, 需要多种重要特征同时增强。 为满足这些要求, 将MLP最后一层输出不经过ReLU激活函数, 选择Sigmoid门函数对MLP输出结果进行处理, 作为注意力机制最后一层的激活函数
(3)
Sigmoid函数实现对SE模块分离出的重要特征进行筛选, 利用乘法运算将输出的特征权值S对U加权, 校准特征权重, 对于每个通道的权值校准计算方法见式(4)。
(4)
随着CNN层数逐渐加深, 所能提取到图像特征越来越丰富, 然而深度增加的同时会带来梯度弥散或梯度爆炸问题。 2015年有研究学者提出了在跳跃连接和恒等映射基础上的残差网络(residual network, ResNet)结构, 解决了CNN 随着深度增加带来的网络退化问题。 基于ResNet和MLP改进的SMLP_Res模块和SMLP_ResNet网络结构如图4所示。 在网络中加入不同数量的批量归一化模块(batch normalization BN), 使用卷积操作代替FC, 使得SMLP_ResNet只在输出时使用一层FC, 降低模型参数量。
图4 改进通道注意力机制的农作物病害识别模型
模型使用的Softmax函数进行分类, 如式(5)。
(5)
式(5)中,xi为前级分类器第i类的输出。 在标签输入之前对标签进行正则化(label smoothing), 使得在计算损失值时能够有效抑制过拟合现象, 如式(6)
(6)
式(6)中,yi为真实预测值, 利用得到的分类结果和正则化后的标签计算交叉熵损失函数, 如式(7)。 根据求得的损失函数值, 利用动态学习率调整所有权重参数。
(7)
SMLP_Res模块分为两种结构, SMLP_Res2在SMLP_Res1中残差模块的跳跃连接中加入1×1卷积层和BN层, 用于调整原输入特征图的维度, 以便与原始特征重校准后进行特征融合。 根据病害特征图的大小, 修改SMLP_Res2模块中参数值, 不断对病害图像提取特征, 输出病害id作为预测结果。 模型使用卷积层代替FC层, 仅保留最后一层全连接, 从而降低模型的参数量。 其中变量n,m,l,w分别为对应模块的数量, 通过改变参数值, 构建不同层数的病害模型如表2所示, 可构建18, 50和101层三种不同深度的SMLP_ResNet模型。
表2 SMLP_ResNet病害模型参数表
采用1块NVIDIA Tesla P100型号GPU训练农作物病害识别模型, 其显存大小为16G Bytes, 基于Ubuntu16.04 64位操作系统和Pytorch深度学习框架搭建了深度学习算法训练平台, 其中Python版本为3.7.6, Pytorch版本为1.3.0, CUDA API版本为10.0, Cudnn版本为7.5.1。
为验证所改进的通道注意力机制和农作物病害模型, 实验中分别对ResNet、 SENet和SMLP_ResNet模型进行对比训练, 每种网络分别设计了18, 50和101层三种结构, 探索不同深度对模型影响。 训练过程中采用梯度下降法(stochastic gradient descent, SGD)优化网络权重, 设置初始学习率为0.05, 动量因子为0.9, 并且当损失值变得稳定时(在第11, 30, 48和70个迭代周期), 训练过程中自适应地降低学习率4次。 Batch_size设置为64, 所有训练样本全部迭代一次为一轮, 设置迭代轮数为300。 将所有网络分别在不同数据集中训练, 分析训练结果。
2.2.1 不同层数SMLP_ResNet对比结果
本文使用新的数据集重新训练网络, 训练完成一轮后在测试集中测试模型准确率, 随着迭代次数增加, 分析训练过程中训练精度、 损失函数以及测试集中错误率变化, 以验证模型准确性。 图5为迭代前101轮过程中, SMLP_ResNet18, 50和101三种不同层数模型在测试集中错误率变化曲线。
图5 模型测试集错误率和迭代轮数关系
随着迭代轮数增加, 三种不同层数SMLP_ResNet模型错误率整体呈下降趋势, 迭代到26轮时模型错误率趋于稳定, 迭代到80~95轮时三个模型效果最好, 错误率皆小于0.012 4。 其中SMLP_ResNet18的错误率最低, 对应的农作物病害识别准确率最高为99.32%, 其次SMLP_ResNet101识别效果较好, 测试集识别准确率最高为99.11%, SMLP_ResNet50准确率最高为99.07%。
随着网络层数的加深, 模型出现参数量激增的现象, 但当网络层数增加到一个临界值之后, 特征过度抽象化使得网络出现信息丢失、 过拟合等现象, 导致准确率下降。 将SMLP注意力模块加入到ResNet时, SMLP_ResNet在每个残差模块中都对通道中的信息进行一次筛选, 显著区域的特征可在少量网络层中被提取出来, 50层和101层SMLP_ResNet却使得显著区域的特征被反复提取, 变得更加抽象化, 导致识别率下降。 综上实验结果, SMLP_ResNet模型在18层时的识别率高于更深层数的网络, 由此验证了所提出的浅层网络病害识别的可行性。
2.2.2 不同方法的识别结果对比
表3对比了不同方法在Plant Village数据集中识别效果, 每种方法中选取测试集最高的准确率作为该网络最佳识别率。 通过表3可知, 使用注意力模块的SENet18和SMLP_ResNet18网络的准确率均高于没有注意力模块的AlexNet, GoogleNet22和ResNet18网络的准确率。 所提出的SMLP_ResNet18的准确率比SENet18的识别率高0.13%。 文献[5]中的AlexNet在Plant Village只挑选了一半的数据集进行学习, 相比本数据集减少了32 383张病害图像, 其病害识别准确率最高为99.08%。 当数据集增加到与本工作相同数量时, AlexNet[8]和22层的GoogleNet网络非迁移学习的识别率分别为97.82%和98.36%, 识别率相比本工作网络低1.5%和0.96%, 且SMLP_ResNet模型权重大小远低于AlexNet。 SMLP注意力机制改变了各通道间依赖关系, 实现对通道特征的筛选以及对全局特征的重校准。 因此将注意力机制引入病害识别, 并提出SMLP_ResNet18模型, 增强了每层卷积对上下文信息使用率, 抑制了通道间噪声干扰, 强化了网络对图像中特定显著区域特征表达能力。
表3 不同病害模型的识别结果
表4对比了相关研究模型与本模型的农作物病害识别的准确率。 本模型的准确率相比于其他模型下的识别率最高, 且模型的参数量远小于VGG16和Inception-V3等网络, 证明了本模型使用了较浅的网络模型和参数, 提高了深度学习模型在农作物病害的识别率, 证明了其可行性。
表4 与前人研究中模型的精度比较
续表4
为进一步验证模型对病害发病早期的识别效果, 选择识别难度较大的AI Challenger 2018农作物病害数据集进行试验, 将每种病害的早期和晚期划分为不同的分类等级进行训练。 训练过程中不同模型在测试集中的错误率变化如图6所示。
图6 模型测试集的错误率和迭代轮数关系
随着训练轮数增加, SMLP_ResNet18, SENet18, ResNet18和AlexNet在测试集中错误率整体呈下降趋势。 但AlexNet在测试集错误率震荡范围较大, 识别率较低且不稳定。 相对而言, SMLP_ResNet18收敛情况较好, 网络在测试集中的错误率也较为稳定, 保持在0.130 7~0.15的区间内。
不同病害识别方法实验对比结果如表5和图7所示。 首次将注意力机制引入农作物病害识别, 并设计新的适用于多种农作物病害识别的注意力机制, 在不造成参数激增的前提下, 提高农作物病害识别的准确率。 所提出的SMLP_ResNet18在测试集中准确率为86.93%, 高出同层数ResNet18模型3.1%。 AlexNet模型不仅识别率比SMLP_ResNet18低3.43%, 其模型权重大小是SMLP_ResNet18的4.48倍。 实验结果表明, 所提出的SMLP_ResNet18不仅提高了农作物病害识别的准确率, 相比于8层的AlexNet模型, 还保持了较低的参数量。 SMLP_ResNet18的参数量约为AlexNet模型参数量的五分之一, 修改后的模型并未引起参数量的激增, 同时提高了多种植物和病害数据集的识别率。
表5 不同病害识别方法对比
图7 不同病害识别方法的训练结果对比
为了更好地理解网络的识别过程, 利用Grad-CAM(gradient-weighted class activation mapping)技术[13]对测试集中部分病害样本生成如图8所示的热力图。 红色越深表示模型对此部分图像的关注度越高, 黄色部分次之, 热力图越偏蓝, 则代表模型认为此部分为冗余信息, 蓝色部分特征对病害识别的影响程度较小。 从图8可看出, AlexNet的关注集中在了背景区域, 其他三种模型的关注区域都来自叶片本身。 当数据量增大、 分类任务增多以及识别难度增大时, AlexNet会出现识别率降低的问题。 SMLP_ResNet18的关注区域集中在叶片的病害部位, 相对于其他网络的整体效果较好, 对辣椒疮痂晚期(pepper late bacterial spot)病识别时受图像中阴影部分的影响较少, 而SENet18将阴影误认为是重点关注区域。 ResNet18和SENet18对叶片背景区域的关注高于SMLP_ResNet18, 因此本文提出的SMLP_ResNet18识别病害时更依赖于病害区域的特征, 减少了背景对识别结果的影响, 具有更高的鲁棒性。
图8 部分病害叶片识别热力图
以番茄病害为例, 不同病害早期和晚期的热力图分析结果如图9所示。 经众多热力图分析可知, SENet18和ResNet18对阴影区域的关注普遍较高, 抗阴影噪声的能力较差, 并且对于晚期病害图像的关注区域有所偏差, 对早期病害叶片的关注更集中于背景区域。 SMLP_ResNet18对晚期病害的关注区域相对理想, 重点关注区域基本集中在叶片的发病区域, 在早期病害的识别中, 对背景的关注远少于SENet18。
图9 不同番茄病害早期和晚期样本热力图分析
由此可知, SMLP_ResNet18对晚期病害的识别强于对早期病害的识别, 因此在数据集Plant Village中的识别率高于AI Challenger 2018。
融合计算机视觉算法和深度卷积神经网络, 首次将注意力机制应用于作物病害识别领域, 并基于可见光谱图像提出了一种新的注意力机制, 设计了一种可同时识别多种作物中不同疾病的SMLP_ResNet18浅层网络识别模型, 利用多层感知机改进通道注意力机制, 改善通道间的依赖关系, 筛选通道中显著特征并过滤冗余噪声, 将重新加权后通道特征重新作用于卷积模块, 实现通道特征的重校准, 使模型更加关注叶片的病害区域。
利用不同识别难度的Plant Village和AI Challenger 2018两个公开数据集重新训练SMLP_ResNet18及其他对比识别模型。 实验结果表明, SMLP_ResNet18在Plant Village数据集中准确率达到99.32%, 在包含早期病害图像的识别难度较高的数据集AI Challenger 2018中准确率最高达到86.93%, 均高于改进前的SENet18和ResNet18。 相比于文献[8]对AlexNet、 GoogleNet22在Plant Village中重新训练的准确率高1.5%和0.96%, 且模型参数量只约为AlexNet的五分之一。 利用Grad-CAM生成的热力图中可看出SMLP_ResNet18相比于其他模型更关注于叶片病害部位的特征。
提出的SMLP_ResNet18模型实现了浅层网络下高精度的病害识别, 且能够提高病害区域的辨识度, 适用于多种农作物不同病害场景下的高精度识别。
考虑到早期病害图像易与健康叶片发生混淆, 下一步研究可利用级联网络, 将农作物病害分类, 针对每种病害不同发病程度建立二级网络, 解决类间差异性较小问题, 提高早期农作物病害识别的准确率。