叶名炀,张杰强
(华南农业大学电子工程学院(人工智能学院),广州 510642)
玉米营养丰富、有益健康,深受百姓喜爱,其在我国种植非常广泛,是许多农民夏秋季的主要经济来源,同时是畜牧业、养殖业、水产养殖业等的重要饲料来源,也是食品、医疗卫生、轻工业、化工业等不可或缺的原料之一,在我国粮食生产中占有一席之地。玉米在种植过程中容易受多方面负面因素的影响,其中病害是影响生产的主要灾害,患病的玉米产量大幅下降、口感不好,主要病害有大斑病、小斑病、锈病、灰斑病等。
随着计算机技术的日益成熟和广为应用,人工智能(AI)不断升温,受到越来越多研究人员的关注。其中深度学习在近20 年的时间里得到快速发展,被广泛应用于图像处理、语音识别、自然语言处理等研究方向。在图像处理领域,常用卷积神经网络(CNN)来处理图像分类、目标检测、图像分割等问题,Krizhevsky 等发明的AlexNet网络结构在2012年的ImageNet竞赛中以16.4%的错误率脱颖而出,比第二名的传统算法低了近10 个百分点,此后又诞生了诸如VGGNet、GoogLeNet、ResNet 等 层 数 更 深、识别率更高的网络。
采用卷积神经网络提取特征的做法也已经成为农作物病害识别的主流趋势。李静等提出了一种基于改进GoogLeNet卷积神经网络模型的玉米螟虫害图像识别方法,平均识别率达到96.44%;王佳盛等基于AlexNet 构建全卷积神经网络模型用于提取荔枝表皮缺陷,模型表现优于常规算法;陆健强等提出一种基于Mixup算法和卷积神经网络的柑橘黄龙病果实识别模型,模型优化后准确率达到94.29%。对于农作物病害识别,模型在实际应用的过程中通常不在电脑端上运行,而是在移动端设备上运行,这样更方便从业人员取样识别。因此农作物病害识别模型应具有体积小、参数量少、运行速度快的特点。本研究通过开源项目获取玉米病害的数据集,并基于轻量化网络MobileNetV2(https://arxiv.org/abs/1801.04381)构建了一个四类识别器,可以实时识别病害的类别。
深度可分离卷积(如图1 所示)是MobileNet系列网络的一大亮点,它可以拆解为单通道卷积和逐点卷积。对于传统卷积而言,输入的图像要和每一个卷积核进行卷积运算,输出图像有多少个通道取决于前面有多少个卷积核,单通道卷积中,每个卷积核仅负责输入图像的一个通道,输出图像的通道数与输入的图像是保持一致的。逐点卷积和传统卷积的运算没有本质差别,只是采用了1×1的卷积核,常用于特征矩阵的升维和降维操作。
图1 深度可分离卷积
假设输入图像的width 和height 均为D、通道数为,所采用卷积核的width 和height 均为D,输出图像的通道数为,对传统卷积,计算量为:
对深度可分离卷积,由于采用了单通道卷积和逐点卷积两种操作,计算量为:
两者进行对比:
若采用3 × 3 卷积核,即D= 3,可知在得到相同尺寸输出的情况下,采用单通道卷积和逐点卷积结合的方式相比传统卷积节省了大约9 倍的计算量。借助这种可分解的卷积操作,虽然层数变多了,但速度也有所提升,这使得MobileNet成为一种轻量级的卷积神经网络。
在resnet 网络所采用的残差结构中,先用1 × 1 的卷积核对输入矩阵进行降维,再提取特征,最后用1 × 1 的卷积核对输入矩阵进行升维。MobileNetV2 所采用的倒残差结构则与之相反,先升维,提取特征,最后再降维,考虑到维度的变化像一个瓶颈,因此也叫瓶颈结构。如图2 所示。倒残差结构使用ReLU6 激活函数,可以有效避免特征信息的大量损失。值得注意的是,当输入与输出shape 相同且步距(Stride)为1时,输入与输出有一条残差边相连,将输入与输出直接进行相加,这种结构可以使得网络在较深的时候依旧可以进行训练。
图2 MobileNetV2的倒残差结构
如图3 所示,MobileNetV2 网络由卷积层、池化层以及一系列瓶颈结构(bottleneck)所构成。代表扩展因子(bottleneck 中通道扩展的倍数),代表输出通道数,是bottleneck 的迭代次数,是步距,是分类数。Conv2d 就是普通的标准卷积操作,avgpool 表示全局平均池化,以这种方式代替1280 个神经元的连接层,可以有效防止过拟合。
图3 MobileNetV2整体结构
本实验使用由数据科学竞赛网站Kaggle 提供的New Plant Diseases Dataset,共计9145 张图片。数据集包含正常玉米、锈病、大斑病、灰斑病四种类别,训练集与测试集数量之比约为8 ∶2。具体图片数量见表1。
表1 数据集概述
图4 玉米病害样本
所有图片统一裁剪成224×224的大小,由于识别病害需要考虑到颜色,因此不对图像进行二值化处理,仅对RGB 分量作归一化处理,即将0-255 之间的数字统一处理到0 到1 之间,如此可以加速卷积神经网络的运算。由于数据集的上传者已对图片进行过随机旋转角度、水平翻转、垂直翻转等数据增强操作,本实验不需要进行额外的增强处理。
TensorFlow 是一个基于数据流编程的符号数学系统,也是目前深度学习领域主流的开发平台,深受众多用户青睐。其具有优秀的构架设计,通过“张量流”进行数据传递和计算,用户可以很容易地、可视化地看到张量流动的每一个环节,可轻松地在CPU/GPU 上部署,进行分布式计算,为大数据分析提供计算能力的支撑;另外,TensorFlow 跨平台性好,灵活性强,不仅可以在Linux、Mac 和Windows 系统中工作,甚至还可安装在移动终端。
运行环境见表2。
表2 运行环境
本实验采用MobileNetV2 网络对7316 份训练样本提取特征并完成分类任务。作为对照,用经典CNN 模型LeNet处理同样的数据集,方便说明效果。训练时每进行完一个epoch 便保存当前状态下的准确率以及损失值,为的是之后用可视化的手段观察模型是否收敛,只有收敛状态下得出的结论才具有参考价值。
为了加快网络的收敛,MobileNetV2 的初始化使用迁移学习的方式,加载预先在ImageNet数据集上训练好的权重,固定模型的主干参数,训练过程中不再更新这部分参数,仅训练最后的全连接层(Fully Connected Network)。池化方式为全局平均池化,优化器为自适应矩估计优化器,初始化learning rate 为0.001,损失函数为交叉熵损失函数(categorical crossentropy),每批次处理量为16,训练轮数30个epoch。
LeNet 是最早的CNN 模型之一,起初用于识别手写数字,它由3 层卷积层、2 层池化层、1 层全连接层、1 层输出层构成,卷积层的激活函数为Relu,池化层为最大池化(max pool⁃ing),优化器为SGD 优化器(Stochastic Gradient Descent),损失函数为交叉熵损失函数,同样训练30 个epoch。
图5的折线图展示了MobileNetV2 的训练过程,training accuracy 为训练集的准确率,valida⁃tion accuracy 为验证集准确率,training loss 为训练集代价函数,validation loss 为验证集代价函数,折线的走向可以反映各个参数的收敛、饱和等趋势。能够看出,随着训练轮数从0 到30逐渐增加,training accuracy 呈上升趋势,20 轮以后接近100%。而对validation accuracy 而言,前期上升在小范围内有震荡,但在第15个epoch之后准确率在96%~97%之间上下波动。从代价函数折线图可以看出,由于采用了迁移学习的方式,代价函数收敛较快,曲线的变化也比较平稳。
图5 MobileNet测试结果
图6为采用LeNet 的结果,同样随着训练轮数的增加,training accuracy 总体是上升的,但是由于所有参数从头开始训练,准确率在第15 个epoch 之前波动较大,最后在95%附近上下波动。交叉熵损失最后为0.2 左右,略高于MobileNet的对应值。
图6 LeNet测试结果
结合表3对比可以得出,采用了倒残差结构的MobileNetV2 网络在层数较深的情况下仍然保证了较高的准确率,且略微高于传统神经网络LeNet。得益于深度可分离卷积的操作,Mobile⁃NetV2模型的参数量仅为后者的十分之一,模型大小只有8.95 MB,非常适合在手机等移动设备上运行,不需要占用太多计算资源。
表3 网络对比
本文分析了MobileNetV2 网络在识别农作物病害上的优势,并在TensorFlow 平台上搭建了MobileNetV2 和LeNet 两个网络,用于识别Kaggle 上的玉米病害数据集。结果表明,Mo⁃bileNetV2 以更少的参数量和更高的准确率完成了分类任务,该轻量化网络亦可应用于其他农作物的病害识别,具有一定现实意义。