陈 洋,张 欣+,陈孝玉龙,林建吾,蔡季桐
(1.贵州大学 大数据与信息工程学院,贵州 贵阳 550025;2.贵州大学 农学院,贵州 贵阳 550025)
传统的病害自动识别方法[1]是对病灶进行划分和边缘提取后的特征送入支持向量机进行分类[2]。该方式泛化能力差,不适应多种类、多病害的检测。随着深度学习的应用越来越广泛,国内外许多学者在基于深度学习的植物病害识别上做出了许多工作。Ferentinos等[3]提出一个基于CNN的模型识别25个种类的植物病虫害。文献[4]通过进行迁移学习的VGG19提取番茄病害特征后,在支持向量机中进行分类。但我们仍需寻求轻量、高效、快捷的农作物病害识别网络。Tang等[5]将轻量化网络ShuffleNet用于诊断葡萄病害,并取得了99.14%的准确率。农作物病害的识别属于细粒度图像分类,在卷积神经网络中加入注意力机制以聚焦病灶区域,可以提高准确率。Chen等[6]在MobileNet V2中加入注意力机制,使得模型在真实环境中能够观察到细微的病害特征,提高了模型在复杂背景下的学习能力。王美华等[7]改进了CBAM注意力模块在农作物病虫害的细粒度识别中取得了良好的效果,但是改进后的注意力模块大大增加了MobileNet V2的大小,在压缩后也达到28.3 MB。因此在MobileNet中加入轻量化的注意力模块是保证模型轻量的关键。
针对上述问题,本文通过在MobileNet V2中嵌入轻量化的坐标注意力模块(CA)[8]和TanhExp[9]激活函数的方式设计了CA-MobileNet V2。并将训练的模型部署于手机APP中,便于作物病害的实时检测。
基于深度学习的卷积神经网络涉及到大量的参数和更深的网络层数,因此需要耗费大量的计算资源,例如VGG16[10]和Resnet50[11]分别有着1.38亿和0.256亿的参数,其模型大小分别为528 MB和98 MB。在实际的移动农业应用中难以部署如此庞大的模型,因此能够在移动端部署的深度学习模型MobileNet系列在近年来获得巨大的成功和广泛的应用。
MobileNet V2 是谷歌团队于2018年提出来可适用于移动端的轻量化深度学习模型,与MobileNet V1相比体积更小,模型的参数量更少。MobileNet V2将普通卷积更换为深度可分离卷积。如图1所示,深度可分离卷积有深度卷积和逐点卷积构成,深度卷积将每个通道分组进行卷积,可 以更好地收集空间特征的同时显著减少参数量。逐点卷积则将卷积核的高和宽都设为1,将深度设置为输入通道数。在深度卷积后级联,因此参数量更少。深度可分类卷积计算和普通卷积计算的比率如下式
(1)
图1 深度可分离卷积
其中,Dk表示卷积核的高度和宽度,DF表示输入特征图的高度和宽度,M表示通道数量,N表示输出特征图的通道数。
由上式易知,深度可分离卷积大大减小了普通卷积的计算量,因此本文将MobileNet V2作为提取病害特征的骨干网。
如图2所示,模型首先读入具有RGB三通道的图像,将图像送入改进后的MobileNet V2中进行特征提取,最后在分类器中完成对病害图像的分类。
图2 CA-MobileNet V2模型结构
如表1所示,MobileNetV2主干网络由17个具有逆残差结构的Bottleneck、一个3×3标准卷积和一层平均池化层(Avgpool)构成,其中t代表1×1升维扩张的倍数,c为输出的深度,n代表当前结构的重复次数,s为步距。
表1 MobileNetV2网络结构
如图2所示,我们在每个具有逆残差模块的Bottleneck中都嵌入了坐标注意力模块(CA),以增强网络的特征提取和聚焦病害区域的能力。此外本文将网络的第一层和最后一层卷积层中的Relu激活函数换成TanhExp激活函数,加速模型的收敛速度。
逆残差结构(Inverse network structure):如图3所示,
图3 逆残差模块
当步长(stride)为1时,输入通过1×1的卷积升扩展特征图维度,再经过3×3的深度可分离卷积进行特征提取,最后再经过1×1的卷积进行降维后与输入连接,完成逆残差模块的构建。当步长为2时没有与输入相连的捷径分支。
近年来,轻量化的网络中注意力模块取得巨大的成功和广泛的应用,其中SE(squeeze-and-excitation)[12]、CBAM[13]模块等注意力模块对于提升模型性能有显著的效果。SE注意力模块在2D全局平均池化下计算通道注意力,以极低的计算成本带来显著的性能提升。然而,SE注意力模块只考虑了通道注意力,忽略位置信息的重要性。在后来的工作中,CBAM,通过减少输入张量的通道位数,使用卷积计算空间注意力,以此更好利用了位置信息。但卷积仅考虑局部区域信息,无法建模长期依赖关系。坐标注意力(CA)模块如图4所示。
图4 CA模块
CA模块分别沿着垂直和水平方向分解下式全局池化,转化为一对一维的特征编码
(2)
其中,zc是第c个通道的输出,H和W分别表示池化核的高度和宽度。上式的全局池化可以将空间信息进行全局编码,却难以保留位置信息。
水平方向分解后高度为h的第c个通道输出如下
(3)
同样,垂直方向分解后宽度为W的第c个通道输出如下
(4)
通过上述的变换注意力模块捕捉到沿着一个空间方向的长期依赖关系,同时保存下另一个空间方向的位置信息。最后通过上式聚合的特征图拼接起来后送入1×1的卷积
f=δ(F1([zh,zw]))
(5)
其中,f∈C/r×(H+W)表示在水平方向和垂直方向进行特征编码的特征图。δ是非线性激活函数,F1表示1×1的卷积操作,[·,·] 表示沿着空间维数拼接操作。
利用两个1×1的卷积的变换Fh和Fw
gh=σ(Fh(fh))
(6)
gw=σ(Fw(fw))
(7)
这里的σ是Sigomid激活函数,目的是降低模型的计算复杂度和计算开销。
最后输出为
(8)
如图5所示,本文中将CA模块嵌入Mobile Net V2的逆残差模块中,这既保证网络的轻量化,又使得资源更加合理的分配,CA模块能够快速找到病害图像中感兴趣的区域,忽略背景和噪声信息。具体来说CA模块可以利用前文所述的Sigmoid的激活函数对卷积网络学习的病害特征图进行加权系数和加权和的操作得到一个新的特征图,并与原始特征图进行融合,这能够有效聚焦病害区域并抑制噪声和背景信息,增强网络的学习能力。
图5 嵌入CA模块
在对视觉任务有着实时性要求的移动神经网络或轻量化模型中,神经网络的参数比传统的深度神经网络要小得多,因此往往性能也受到限制。本文将一种适用于轻量化神经网络的激活函数加入MobileNet V2中,使模型收敛速度加快,分类性能提升的同时还提升了模型的鲁棒性和泛化性。TanhExp激活函数如图6所示。
图6 TanhExp 和Relu激活函数
TanhExp函数表达式如下
f(x)=xtanh(ex)
(9)
其中,tanh代表双曲线正切函数
(10)
尽管Relu激活函数因其可以有效避免梯度消失和加快学习速度而被广泛使用,但仍被研究人员怀疑Relu激活函数是否是所有情况的最佳方案。近年来随着研究的深入,人们发现Relu激活函数存在几个缺点。如图所示Relu激活函数是非负激活函数,因此它具有大于零的均值,这可能导致之后的网络层出现偏差。其次Relu激活函数是硬截断,其负半轴完全为0可能会出现对数据没有激活作用的问题[9]。与Relu激活函数相比TanhExp有着以下优点:
(1)在正半轴输入大于1的时候,输出和输入可近似为线性变换,这在训练中是合理的。
(2)与Relu相比TanhExp有着更接近于零的梯度,可以加速网络的参数更新,反向传播时神经网络可以更新参数如下式
(11)
在图像分类中使用交叉熵损失如下
(12)
(13)
因此,梯度稍大的时候,权值更新较快,收敛速度也快。但是当梯度过大时,交叉熵损失达不到全局最小值从而导致网络不收敛。因此TanhExp的设计是合理的。
本文的数据集来自Kaggle的PlantifyDr[14]农作物病虫害图像。
PlantifyDr数据集融合了多个数据集和多种数据增强,因此不进行额外的数据增强。数据集包含苹果、玉米和番茄等10种作物的10种健康状态和27种病虫害。本文所用数据集农作物病虫害图像共124 636张。划分训练集有112 191张,验证集有12 445张。
同时为了更好验证论文提出的算法在真实环境下的先进性,我们在Turkey-PlantDataset[15]数据集中进行验证实验。Turkey-PlantDataset数据集15种病害其中训练集3562张,验证集885张。因为真实环境下的病害数据集的采集较为困难,所以Turkey-PlantDataset的图像数量较少。
如图7所示,PlantifyDr数据集农作物种类较多且病害种类较为齐全,且有部分野外环境下的病害图像,这更适应于模型的实际部署。因此最终的APP部署中将用PlantifyDr训练好的模型文件部署至移动端APP中。
图7 PlantifyDr和Turkey-PlantDataset数据集示例
本文采用分类准确率(Accuracy)和召回率(Recall)来评估模型分类精度和召回率
(14)
(15)
TP表示正样本被正确地划分为正样本的个数;FP表示负样本被错误地划分为正样本的个数;FN表示正样本被错误地划分为负样本的个数;TN表示负样本被正确地划分为负样本的个数。
本文使用的实验环境:python 3.8和pytorch的深度学习框架,CPU为Intel(R)Xeon(R)W-2235 CPU @ 3.80 GHz,GPU为NVIDIA GeForce GTX 2080Ti,显存11 GB,操作系统为Windows 10。使用交叉熵损失函数作为损失函数,训练期间的初始学习率和批次大小分别为0.002和16。迭代次数(Epoch)为100。
将本文提出的改进型MobileNet V2、MobileNet V2、MobileNet V3[16]、ResNet50、DenseNet 121[17]等模型的TOP 1精度和召回率进行对比见表2。
表2 模型对比实验
如表2所示在TOP 1的精度下,本文提出的算法在实验室环境中的数据集中优于其基线网络MobileNet V2 0.83%,在真实环境的数据集中领先2.6%。这是因为在病害的细粒度图像分类中,注意力机制能够更好地关注病害特征及其区域,同时较好地抑制图像中的复杂背景和噪声。在同为轻量化网络的MobileNet V3-large中,本文的算法领先10.13%。这是因为MobileNet V3的设计中限制计算量和参数量之后算法不可避免得在细粒度分类中的表现较差,但在真实环境下的小数据集中表现良好,这是因为轻量化的MobileNet V3模型对大数据集拟合能力不足,同时MobileNet V3中默认加入SE注意力模块,使得网络可以忽略复杂噪声。在深度卷积神经网络中,ResNet因为其残差连接机制,能够重用特征,取得较高的准确率。本文算法比ResNet 50略高一点,但是ResNet 50却有着90.2 MB的模型规模,这显然是不适合今后部署于移动端或其它边缘设备之中。同样DenseNet 121的模型规模和检测准确率在两种数据集中都不及本文算法。在真实环境下的Turkey-PlantDataset数据集中本文设计的算法相比于理想条件下的PantifyDr准确率领先较多。在VGG16、GooLeNet等传统卷积神经网络中,本文算法在真实环境下的数据集中明显领先,进一步验证本文算法的鲁棒性和泛化性,更适用于真实环境的病害检测。同时本文所提出的算法在召回率(Recall)指标中依旧表现良好,在两种数据集中均领先其它网络。
将本文提出的CA与SE、CBAM等模块进行对比。表3中所有的注意力模块均与CA模块放在同一位置,并且激活函数都是相同。
表3 注意力模块对比实验
如表3所示在MobileNet V2中加入上表的注意力模块之后,本文的CA模块的在PlantifyDr数据集中分别比SE、CBAM、SK、GE-θ模块高出0.14%、0.12%、0.11%、0.19%,在Turkey-PlantDataset数据集中则分别领先2.36%、1.35%、2.32%、1.23%。这验证了加入的CA模块的先进性。在加入注意力模块之后的MobileNet V2不可避免得增加了模型规模,但是加入轻量化CA模块之后的模型大小也只有10.6 MB。
本文对比加入TanhExp激活函数MobileNet V2和原生网络的激活函数(Relu)结果见表4。
表4 激活函数对比实验
如表4所示,在MobileNet中将Relu激活函数替换为TanhExp激活函数后,模型的验证准确率在两个数据集中均有提升,在真实环境下的PlantDiseaseNet数据集中提升较为明显。这说明TanhExp激活函数在有噪声的图像数据中相对于Relu激活函数有较强的鲁棒性和泛化性。
如图8所示,在加入TanhExp激活函数的MobileNet V2在PlantifyDr数据集中的训练损失曲线一直低于原生Relu 激活函数的MobileNet V2,这验证了TanhExp加速模型的学习和收敛过程。
图8 MobileNet V2与MobileNet V2-TanhExp的训练损失
如图9所示,在加入TanhExo激活函数的MobileNet V2在PlantifyDr数据集中的验证损失曲线在前几个Epoch的验证损失就远低于原生Relu激活函数的MobileNet V2,并且波动幅度较小,这验证了TanhExp激活函数增强了模型的泛化能力和鲁棒性,为部署于移动端APP中更为实际的应用提供了良好的抗噪能力。
图9 MobileNet V2 与MobileNet V2-TanhExp的验证损失
为了将深度学习的模型较好应用于实际的农业生产生活中,我们开发了基于Android系统的农作物病害检测的APP。将训练好的模型部署至华为云服务器,并通过APP的拍摄和上传图片功能将需要预测的图片路由至服务器中进行推理。如图10所示,我们开发的病害检测的APP能够准确识别PlantifyDr数据集中不同作物的不同病害,并且推理速度较快。此外本文设计的模型较为轻量,方便移动端部署。
图10 农作物病害检测APP应用展示
本文针对多种农作物病害识别分类的准确率低,难以聚焦病害区域等问题提出加入坐标注意力模块的 CA-MobileNet V2。实验结果表明我们提出的模型同时兼具轻量化与高准确率的特点。在复杂环境下的病害识别中表现更为优异。针对传统深度学习模型鲁棒性和泛化能力差等特点,在模型中加入TanhExp激活函数,实验结果表明,加入激活函数的模型具有更快的收敛速度,和更高的精度。针对农业的实际生产生活中的病害检测困难,本文将深度学习模型部署至移动端APP中,极大地方便了种植者辨识作物病害。