1 简介
今天向大家介绍一个帮助往届学生完成的毕业设计项目,基于深度学习的农作物病虫害识别系统。
ABSTRACT
及时、准确地诊断植物病害,对于防止农业生产的损失和农产品的损失或减少具有重要作用。为了解决这类问题,可以使用基于机器学习的方法。近年来,在图像处理中应用尤其广泛的深度学习为精准农业提供了许多新的应用。在本研究中,我们利用九种强大的深度神经网络结构的不同方法来评估植物病害检测的性能结果。采用迁移学习和深度特征提取方法,使这些深度学习模型能够适应当前的问题。在本文的工作中,我们考虑了利用预处理的深度模型进行特征提取和进一步的微调。通过深度特征提取得到的特征通过支持向量机(SVM)、极限学习机(ELM)和k -最近邻(KNN)方法进行分类。实验使用的数据包括来自土耳其的真实疾病和害虫图像。计算准确性、敏感性、特异性和f1评分,进行绩效评价。评价结果表明,深度特征提取和SVM/ELM分类的效果优于迁移学习。此外,AlexNet、VGG16和VGG19模型的fc6层与其他层相比产生了更好的精度得分。
关键词:植物病虫害检测,卷积神经网络,深度学习架构,特征提取,分类器方法
Introduction
在植物中,病害的征兆通常发生在叶片、果实、芽和幼枝上。这种情况会导致水果浪费(掉落)或被损坏。此外,这些疾病导致新的感染和疾病的传播,诸如季节性条件。因此,在疾病传播到其他树木之前,提前确定疾病并采取必要的预防措施是非常重要的。因此,与植物病虫害作斗争是农业中唯一最重要的问题[1-3]
影响植物的疾病有很多种,每种都可能造成经济、社会和生态损失。在此背景下,及时、准确地诊断植物病害对防止农产品产量和数量的损失具有重要作用。植物病害的检测通常是人工进行的。这些过程由植物学家和农业工程师等专家进行,首先通过视觉检查,然后在实验室环境中进行。这些传统方法往往是耗时且复杂的过程[1,3]。基于这些原因,基于图像处理和机器学习的自动识别疾病变得非常重要。用视觉检测的方法对植物病害进行自动诊断,对那些对所种植的产品知之甚少或一无所知的用户有很大的帮助。
关于植物病害的检测,文献中有许多研究。在过去的十年中,这些研究往往是基于分类过程,利用颜色、形状、纹理等特征进行的[4 – 7,9,9,10]。基于这些属性的方法的主要缺点是:
•单独使用时性能非常低,尽管已经尝试通过几种方法的组合来提高性能。
•要求使用分段的方法,这意味着植物必须从其根分离,以提取几何和类似的特征。
•使用包含在现实生活中很难获得的图像的数据集
由于这些原因,这样的系统和方法不能在现实生活中使用。近年来,深度卷积神经网络(CNNs)在视觉对象和机器学习领域取得了显著进展。对于这些区域,改进的模型和方法最大的优点之一是可以不使用分割方法进行特征提取。因此,这些方法和模型可以很容易地应用于实际应用中
cnn作为基础的深度学习工具,在多项植物病害检测研究中取得了显著的成功。Amara等人[11]使用LeNet架构作为卷积神经网络来分类图像数据集,包括能够对比健康和患病蕉叶。这些都是通过迁移学习微调的深度模型进行评估的。Mohanty等人使用了一个包含54,306张患病和健康植物叶片图片的数据集。使用基于深度CNN的AlexNet和GoogleNet模型对它们的性能进行评估,以识别14种作物物种和26种疾病。Fujita等人开发了一种新的实用植物病害检测系统,包含七种病害类型。他们使用基于cnn的分类系统,在四倍交叉验证策略下,平均准确率为82.3%。Sladojevic等人提出了一种利用深度卷积网络识别13种不同类型植物病害的新方法。富恩特斯等人开发了一种强大的基于深度学习的检测器,可以实时识别九种不同的番茄病虫害
本文提出了一种基于深度神经网络的植物病虫害检测系统。在这项研究中,我们使用了土耳其的真实植物病虫害图像数据集。首先,我们使用该数据集进行基于深度学习架构的深度特征提取:AlexNet、VGG16、VGG19、GoogleNet、ResNet50、ResNet101、InceptionV3、InceptionResNetV2和SqueezeNet。利用SVM、ELM和KNN对这些模型得到的深度特征进行分类。然后,我们使用基于迁移学习的深度学习模型进行微调。我们去掉架构的最后三层,然后添加新的层,采用预先训练的cnn来解决这个问题。最后,我们利用迁移学习和深度特征提取方法对性能结果进行了评价。本文提出的植物病害分类方法的主要贡献如下:
•使用图像进行植物病虫害分类对于机器学习来说是有问题的。为了对这些图像进行分类,文献中提出了各种方法。目前,深度学习方法是机器学习的一种现象,在有监督学习的文献中已经提出了各种深度学习网络。本文利用迁移学习和深度特征提取技术,对九种常用的植物病虫害深度学习网络(AlexNet、GoogleNet、VGG16、VGG19、ResNet50、ResNet101、InceptionV3、Inception ResNetV2和SqueezeNet)进行了研究,并对其结果进行了综合讨论
•本工作提出了一种新的分类体系结构,使用预处理的深度学习网络和传统的分类器。九个深度学习网络也被用于特征提取。使用这些网络可以提取不同大小的特征。分类阶段采用传统分类器SVM、ELM和KNN进行10次交叉验证。结果表明,该体系结构比基于迁移学习的网络具有更高的分类精度。
•提出的架构比基于迁移学习的模型具有更低的计算复杂度。通过对执行时间的计算,证明了这种情况。
•在文献中,研究通常使用合成的植物病虫害图像进行。在这项研究中,我们使用了一个由1965年真实植物病虫害图像组成的数据集,分为8个集群。在该数据集上进行了测试,结果清楚地证明了该方法可以用于实际应用。
研究组织如下。在第2节中详细给出了所提议的方法,而在第3节中给出了所提议的体系结构。第四节给出了实验工作和结果。最后,在第5节中,讨论了结果,并介绍了研究的贡献。
2. Materials and methods
本节在适当的副标题下详细介绍了本文的理论背景、相关算法、数据集和推荐方法。
2.1. Deep learning and pretrained CNN models
深度学习是机器学习技术的一种形式,它使用由多个处理层组成的计算模型来学习数据[16]的特征。由于深度学习在分类和识别等领域取得了显著的高成就,人们对这门学科的兴趣增加了。近年来,这些方法已被应用于许多领域,如语音识别、视觉目标识别和目标检测。虽然深度学习的第一次研究有着很长的历史,但近年来其成功的主要原因是大数据的产生和具有大规模内存的更快的计算机的产生
本研究通过尝试九种最强大的深度神经网络架构的不同方法来评估植物病害识别问题的性能。这些深度学习架构在ImageNet数据库的一个子集上进行训练。AlexNet架构是一种深度学习算法,共有25层,可以在8层[19]上训练权重。GoogleNet架构基于网络中的方法,使用架构模块并行使用多个卷积来提取各种特征点[20,21]。牛津视觉几何小组(VGG)提出的VGG网络是一种同质架构,用于在ILSVRC-2014竞赛[22]中获得更好的结果。ResNet网络是由He等人开发的,用来训练深度更大的网络[23]。该架构基于微架构模块,不同于传统的连续网络架构,如VGGNet和AlexNet。Inception网络是Szegedy等人提出的一种卷积神经网络模型[21]。该网络由大量的卷积和最大池步骤组成。在最后一个阶段,它有一个完全连接的神经网络。InceptionResNetV2网络[24]基于基于inctionbased网络结构和剩余连接。InceptionResNetV2执行几乎与Inception体系结构相同,但是这个体系结构在使用剩余连接[25]的训练中取得了显著的加速。SqueezeNet是由Landola等人开发的一种智能架构,在ImageNet上实现alexnet级别的精度,且参数[26]减少了50倍。表1详细描述了这些体系结构的特征
2.2. Classifiers
本文采用SVM、ELM和KNN等传统分类器方法,从预训练的深度学习模型的特定层中提取深度特征,构建深度特征分类模型
2.2.1. K-nearest neighbor (KNN)
KNN分类器使用监督学习方法。该方法广泛应用于机器学习、图像处理和统计估计等领域。这种方法是一种算法,当有新的数据输入时,对已有的学习数据进行分类。这种方法的原则是将新的数据输入分配到先前建立的样本集中最近的簇中。这两个数据点之间的距离是通过使用各种距离函数来计算的。最著名的函数是欧几里得距离、闵可夫斯基距离和曼哈顿距离。此外,该方法最大的优点是应用简单易懂[27,28]
2.2.2. Support vector machine (SVM)
SVM是Vapnik开发的一种基于统计学习理论[29]的方法。支持向量机方法的目标是有一个线性判别函数,它的边缘值最大,能够将类之间分离开来。最接近超平面的学习数据称为支持向量。支持向量机可以将数据集分类为线性可区分的和不可区分的[30]。该分类器已成功应用于解决图像和物体识别、语音识别、指纹识别、笔迹识别等诸多领域的问题[29-31]。
2.2.3. Extreme learning machine (ELM)
ELM是Huang等人提出的一种单隐层前馈网络(SLFNs)的学习算法。在ELM中,使用最小二乘法计算输出权值,而隐层权值是随机生成的[33]。ELM模型如式(1)所示。
2.3. Dataset
用于测试该方法性能的数据集包括土耳其Malatya、Bingöl和Elazığ地区常见的植物病害图像(图1)。这些图像是由尼康7200d相机获得的。该数据集中的每张图像由4000×6000分辨率和三通道(RGB)彩色图像组成。表2列出了该数据集中植物病虫害的名称和数量
从表2中可以看出,该数据集共包含了属于8种不同植物病害的1965幅图像。该数据集由土耳其Bingöl大学和İnönü大学农学院植物保护领域的学者获得。这些图像是在白天不同的日子获得的。此外,疾病的图像使用了大量不同的树木
3. Proposed method
在本研究中,我们应用了来自各个全连接层的深度特征提取和基于预训练的深度学习架构的迁移学习。拟议研究的方案如图2和图3所示。迁移学习和深度特征提取将在以下小节中详细介绍
3.1. Transfer learning
迁移学习是一种机器学习方法,它被重用为一个起点,通过使用从解决问题中开发的模型中获得的知识来解决不同的问题。本研究利用基于迁移学习的预训练CNN模型对其进行微调。使用预先训练的CNN模型的原因是,它们比训练随机初始化权值[35]的CNN模型更快、更容易。此外,微调过程是基于将新的层而不是最后三层预训练网络转移到我们的分类任务,如图2所示。
3.2. Deep feature extraction
深度特征提取是基于从预处理卷积神经网络中提取学到的特征。这些特征被用来训练机器学习分类器。换句话说,该方法是基于从预训练网络的全连通层中提取深度特征。本研究从某一层次的深度学习模型中提取有效的深度特征,分别是GoogleNet、ResNet50、ResNet101、InceptionV3、InceptionResNetV2以及SqueezeNet和pool5-drop_7x7_s1、fc1000、fc1000、predictions、predictions和pool10。此外,从GoogleNet、ResNet50、ResNet101、InceptionV3、InceptionResNetV2和SqueezeNet模型的这些层分别获得1024、1000、1000、1000、1000和4096的特征向量。将得到的深度特征运用传统的SVM、ELM和KNN分类器进行分类,如图3所示。
在本研究中,在分类阶段使用传统的SVM、ELM和KNN分类器,分别从这三层中获得AlexNet、VGG16和VGG19模型的深度特征,利用分类器方法计算性能。然后比较各层的性能,确定最佳层的深部特征。此外,从AlexNet、VGG16和VGG19模型的fc6和fc7层得到4096个特征向量,从这些模型的fc8层得到1000个特征向量。
2 设计概要
本系统基于python技术,使用UML建模,采用深度学习,django框架组合进行设计,Mysql数据库存储数据。
本系统的功能主要包括本系统的功能主要包括:
- 用户注册、登录、
- 信息维护、
- 图像识别
- 病虫害识别
- 深度学习
- 图像检测
- 目标检测
3 系统关键技术
使用python,django,mysql,深度学习进行开发
4 开发工具
开发工具主要有:Pycharm、Python3.8、Django3、mysql5.7、Navicat等。
5 代码展示
import osimport sysfrom pathlib import Pathfrom django.core.wsgi import get_wsgi_application# This allows easy placement of apps within the interior# booksys directory.ROOT_DIR = Path(__file__).resolve(strict=True).parent.parentsys.path.append(str(ROOT_DIR / "booksys"))# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks# if running multiple sites in the same mod_wsgi process. To fix this, use# mod_wsgi daemon mode with each site in its own daemon process, or use# os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings.production"os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")# This application object is used by any WSGI server configured to use this# file. This includes Django's development server, if the WSGI_APPLICATION# setting points here.application = get_wsgi_application()# Apply WSGI middleware here.# from helloworld.wsgi import HelloWorldApplication# application = HelloWorldApplication(application)
6 系统功能描述
项目功能演示