1. 引言
我国是个农业大国,农业产业产量居世界首位,俗话说“民以食为天”,农业发达则社会稳定。人们的生活离不开衣食住行,其中粮食是重中之重。据国家统计局统计,2019年我国的农作物播种面积为1.65亿公顷,较2017年减少了40万公顷,所以农作物病害对农业产量的影响不可忽视,甚至威胁到食物安全 [1]。现在我国对开发农业信息化有了更高的重视,利用现代科学技术和现代工业来推动农业经济发展是现在国家重点发展的方面。农业现代化中重要的一项就是建立发达的农业,农业信息化促进农业可持续发展,将有利于我国农业现代化目标的实现 [2]。随着深度学习的发展 [3],卷积神经网络 [4] 逐渐取代了传统的机器学习方法,在计算机视觉领域方面被广泛应用。图像识别 [5] 是指从含有目标的图像中识别出我们想要识别的目标和对象的技术,常见的图像识别技术包括:计算机视觉、模式识别、机器学习 [6] 等方法。图像识别技术被广泛用于生活中的各个方面 [7]。
随着智能化技术的发展,手机的系统性能也越先进,功能越来越多,各种安卓应用应运而生。手机摄像功能为图像识别奠定了良好的基础。如果能够在手机系统上设计一个农作物病害的识别的应用,那将会极大地方便农作物种植者对农作物病害的识别。当农作物种植者在无法确认农作物所患病害时可以通过手机拍照上传到相应的识别应用,这样就可以实现快速、准确的识别。且保证了低成本、耗时短,方便农作物种植者及时地识别农作物病害并采取相应的防治手段。从而有效地减少识别错误带来的经济损失。
本文提出一种改进的残差网络结构模型,引入注意力机制提高模型识别性能,对农作物病害图像进行识别,避免人为主观因素影响识别结果。优化残差网络的结构和参数,构建基于改进残差网络的农作物病害图像识别模型,提高农作物病害图像的识别分类的性能,并将农作物识别模型搭载到相应的应用程序上,实现快速有效的识别。
2. 病害图像数据集
本文的研究对象为苹果、马铃薯、葡萄、玉米、辣椒和草莓这6种农作物所患的25种病害叶片图像,收集以上种类的病害图像作为本文的数据集样本,图像采集主要采用的方法是通过互联网搜索植物村(plant village)、美国植物病例协会(APS Net)等植物病害网站,在网站中下载需要的病害图像。
由于网络模型的性能极大一部分由数据集的大小决定,通常来说训练数据集的样本越多,相应的深度卷积神经网络模型的识别性能越好,泛化性能越好,并且减少过拟合。所以有充足的数据集是模型拥有强大的泛化能力的大前提。然而实际采集的数据会受到光照条件,噪声等影响,往往很难得到想要的病害图像,病害图像相比于其他的数据集来说,收集难度更大。因此我们需要采取一些技术方法来获得更多的数据,保证有充足的数据集,使模型的性能更好。其中扩充数据集的一种有效的方法就是数据增强技术。
数据增强时常用的数据增强的方法,是诞生于数据集不充足的情况下来充足数据集的一种方法。数据增强是在不改变图像数据类型的前提下,对原图像进行各种变换操作来增加样本的多样性,最常见的方法有翻转、裁剪、缩放等。本文为了提高模型的识别性能,使用数据增加的方法扩充数据集,各种操作变换后的实例图像如图1所示。图中原始图像虽然看起来和增强后的图像看起来没有变化,但是对于电脑来说,在像素点矩阵中图像的像素点发生了改变。所以在模型的训练中,这八张图片经过训练学习就得到八个不同的矩阵特征,得到了扩充了原始图像的样本目标,基本实现了增强数据集。
3. 改进残差网络模型
本文为了提高网络模型的识别性能,将残差网络ResNet-152模型进行改进,主要的改进方法是将注意力机制模块引入到残差网络的残差块结构中,如图2所示。将改进的深度残差网络模型应用在农作物病害识别研究中。
注意力机制最早用于自然语言处理领域 [8] (NPL),随后逐渐应用在计算机视觉领域进行视觉信息处理,从而得到更好的发展。在神经网络中,注意力机制相当于是一个额外的神经网络,它通过在大量信息中选择输入的某些部分,或给输入的不同部分分配不同的权重来筛选出重要的信息。总而言之,注意力机制类似于人类视觉上的选择性注意机制,其核心目的即选择当前任务目标进行重点关注。
近年来,注意力逐渐被人们应用到深层神经网络中。在神经网络中引入注意力机制有很多方法,以卷积神经网络为例,可以在空间维度增加引入attention机制,也可以在通道维度增加attention机制,当然也有混合维度即同时在空间维度和通道维度增加attention机制,本文引用SE (Squeeze-and-Excitation) [9] 网络模块,该模块是在通道维度增加attention机制。通过各个通道之间的相互依赖关系来获取每个特征通道的重要程度,以此给每一个特征通道赋予一个权重值,这样网络就可以基于全局信息来选择增强含有有用的特征信息通道。
(a) 残差块示意图 (b) 改进后残差块模型
Figure 2. Schematic diagram of residual unit
图2. 残差块示意图
4. 实验结果
实验结果如图3所示,其中图3(a)表示准确率在训练集和验证集的变化,图中曲线变化可以看出在10,000之前涨幅较大,迭代次数达到10,000之后呈缓慢增长的趋势,并随着迭代次数的增长逐渐平稳,在训练结束时训练集的准确率达到96.35%,测试集的准确率达到93.65%。图3(b)表示损失函数的变化过程,从图中曲线变化可以看出在10,000之前降幅较大,在迭代次数达到10,000步之后,损失值呈缓慢下降的趋势,在训练最后趋于平稳,实验显示训练集的损失值为0.249,测试集的损失值为0.293。实验结果表明,本文模型的准确率和收敛效果较好,识别性能达到预期目标。

Figure 3. Experimental results of training set and test set
图3. 训练集和测试集的实验结果
本文利用深度残差网络对农作物病害图像进行识别研究,并在此基础上,将注意力机制引入残差网络中,实现了对农作物病害准确的识别,这种注意力机制与残差网络相结合的方法能够大大的提高农作物病害识别模型的识别性能。实验表明,本文模型识别率达到96.35%,基本达到了对模型的预期目标,为注意力机制应用在其他卷积神经网络上提供一定的参考意义。
5. 基于Android的农作物病害识别系统设计
本文利用前面实现的农作物病害识别模型设计并实现基于Android的农作物病害识别系统。该系统主要实现了对于拍摄的农作物病害图像进行及时的识别并返回病害信息。具体结构组成为获取病害图像、农作物病害识别和展示农作物病害信息。流程图如图4所示。

Figure 4. Flow chart of crop disease identification system
图4. 农作物病害识别系统流程图
5.1. 获取病害图像
本模块主要负责实现手机待检测农作物病害图像 [10] 的功能,以供农作物病害识别模型进行识别,该模块主要拥有拍摄和读取两个功能,分别是相机的拍摄功能和读取手机本地相册的读取功能,其工作流程如图5所示。
获取病害图像需要进行图像采集,即调用设备摄像头的功能,这一功能常常通过OpenCV提供的库函数实现 [11] 。OpenCV是一个计算机视觉库,它不仅可以跨平台使用,而且可以运行在Linux、Windows、Android等多种操作系统上。它具有大量的Java接口,且能够满足通过在线文档获得获取API接口函数,并可通过Android NDK的方式轻轻松松在Android系统下对其库函数进行调用 [12]。本地功能代码均需要结合JNI接口实现,功能代码由Android NDK编译后生成动态库文件 [13],系统最后使用Java调用并打包编译文件,实现农作物病害识别应用程序。
其中上传病害图像使用的是POST方法来实现的,它是HTTP协议中经常被使用的方法,网络请求框架使用的是OkHttp方法 [14]。当用户点击识别功能键的时候,系统会先对要识别的图片进行检测,假如没有识别图片或者选择的图片并没有上传,系统会以警示框的形式提示用户操作错误,并且重新回到系统主页面,用户可以重新选择上传图片,系统检测到有图片检测后,将会完成上传步骤。

Figure 5. Flow chart for obtaining disease images
图5. 获取病害图像流程图
5.2. 病害图像识别
病害图像识别的工作主要为实现对病害图像进行识别并得到结果信息,识别的图像是通过上一节获取得病害图像,即系统上传的病害图像。服务器端接收到上传的图像后将图像输入到农作物病害识别模型中进行识别得到识别结果,然后根据识别结果在农作物病害信息数据库中查询病害信息。其中农作物病害识别模型采用前文研究的基于注意力机制的深度残差网络的农作物病害识别模型。
本文使用Flask框架将农作物病害识别系统建立在Web服务端,服务端有前文研究的基于注意力机制的深度残差网络的农作物病害识别模型。系统的使用用户在手机客户端请求开始识别并发送病害图片信息,服务端接收病害识别请求后解析病害图片信息,从而得到请求中上传的待识别的农作物病害图片,然后将图片输入到农作物病害识别模型中。
农作物病害图片经过农作物病害识别模型识别后得到识别结果,并给出对应的患病种类名称,并且根据名称在构建好的农作物病害信息数据库中查询该病害种类的详细信息,得到对应的病害种类的详细信息及治理该农作物病害的方法建议即防治建议。农作物病害数据库中存放每种农作物病害的信息表,表中包含农作物病害名称,拉丁学名及病害防治建议等相关信息字段。添加防治建议是方便农业种植员在识别的基础上及时对农作物病害进行治理,有一定的价值意义。
5.3. 识别结果展示
识别结果展示的工作流程如图6所示,包含检查网络、接收病害信息和病害信息展示三个部分。在接收病害信息之前,模块会判断网络是否连接正常,如果网络连接有问题,则响应失败,并提示检查网络连接。如果响应成功,则接收包含农作物病害的识别信息的json格式的数据,放入Response对象中,返回到手机客户端,并显示在手机屏幕上。

Figure 6. Recognition result display flow chart
图6. 识别结果展示流程图
5.4. 系统测试
本文对构建的农作物病害识别系统进行测试,检测本文模型对农作物病害识别的性能,测试使用型号为小米7,搭载Android 6操作系统的智能手机。系统运行界面展示如图7。
考虑到系统面向使用用户包含普通农民,所以系统设计的比较简单,对于农民来说操作方便。用户使用方法是从开始页面开始,点击开始识别系统会跳转到手机的拍照功能页面,在此页面可以选择拍照和在相册中选择,完成农作物病害图像的选择后完成上传,然后系统返回的识别信息。如果用户需要重新选择想要识别的图像。可以在识别图像界面点击重选按钮,系统就会跳转到农作物病害相册界面。经测试,上传至返回识别信息需等待3 s,反应比较及时。
6. 结论
本文将注意力机制引入到残差网络ResNet-152模型中,并将改进后的模型应用在农作物病害识别任务中,实验结果表明,本文提出的模型准确率达到96.35%,有较好的识别性能。基于本文提出的农作物病害识别模型,设计了农作物病害识别系统的Android平台应用,基本实现了对上传的病害图片进行识别的功能。经过反复测试,该系统能够利用手机的拍照功能拍摄农作物病害图像,并实现拍照上传和相册中选择病害图像上传两种上传方式,并将上传的农作物病害进行识别,并返回该病害的信息及防治措施。满足了系统设计之初的预期目标,拥有准确性、及时性、易用性、容错性,对农作物种植人员具有一定程度上的帮助。
本文所研究的农作物病害图像识别模型虽然识别率高,但在识别系统这块依然存在缺点。现今的技术发展下,Android 应用程序不断的优化,从程序的风格样式到整体功能上都有所改进,但本论文设计实现的应用程序样式简单,功能不多,后续考虑添加用户能够自己为该模型添加数据集的功能。本文系统主要是对6种农作物病害图像进行识别并返回病害详情及防治措施,后期可以在增加农作物病害种类并扩充农作物病害图像数据集的情况下,增加对其他农作物病害的识别,提高应用程序的使用价值。