摘要:本文深入研究了基于YOLOv8/v7/v6/v5等深度学习模型的农作物害虫检测系统,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视频和实时摄像头进行农作物害虫检测,可上传不同训练模型(YOLOv8/v7/v6/v5)进行推理预测,界面可方便修改。本文附带了完整的网页设计、深度学习模型代码和训练数据集的下载链接。
@
目录完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷
演示与介绍视频 :https://www.bilibili.com/video/BV18D421W72W/
YOLOv8/v7/v6/v5项目合集下载:https://mbd.pub/o/bread/mbd-ZZ2YmJhx
YOLOv8和v5项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Xm59x
YOLOv7项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Ylp5y
YOLOv6项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Yl5tw
若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里已打包上传至博主的面包多平台,见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:
1. 网页功能与效果
(1)开启摄像头实时检测:本系统允许用户通过网页直接开启摄像头,实现对实时视频流中农作物害虫的检测。系统将自动识别并分析画面中的农作物害虫,并将检测结果实时显示在用户界面上,为用户提供即时的表情反馈。
(2)选择图片检测:用户可以上传本地的图片文件到系统中进行表情识别。系统会分析上传的图片,识别出图片中人脸的表情,并在界面上展示带有表情标签和置信度的检测结果,让用户能够清晰地了解到每个人脸的表情状态。 (3)择视频文件检测:系统支持用户上传视频文件进行表情检测。上传的视频将被系统逐帧分析,以识别和标记视频中每一帧的农作物害虫。用户可以观看带有表情检测标记的视频,了解视频中人物的表情变化。 (4)择不同训练好的模型文件:系统集成了多个版本的YOLO模型(如YOLOv8/v7/v6/v5),用户可以根据自己的需求选择不同的模型进行表情识别。这一功能使得用户能够灵活地比较不同模型的表现,以选择最适合当前任务的模型。 本系统还集成了一系列高级功能,提高了用户体验和系统的实用性:**检测画面和原始画面的显示方式**,允许用户选择同时显示检测结果和原始图像,或者单独显示任一种图像,以便于比较和分析;**特定目标的单独标记和显示结果**,用户可以通过下拉框选择特定的表情类型进行检测,系统将只显示选定表情类型的检测结果,使分析更加专注和高效;**检测结果的页面表格显示**,所有检测到的表情及其相关信息(如置信度和位置)会在页面上以表格形式展现,便于用户一目了然地查看;**动态调整检测算法的阈值**,用户可以实时调整置信度阈值和IOU阈值,以获得最佳的检测效果;**检测结果导出到CSV文件**,为了方便数据分析和记录,用户可以将检测结果以CSV格式导出;最后,**导出标记的图像和视频结果**功能使用户能将加工后的图像或视频保存为avi格式的文件,方便保存和分享。这些功能的集成使得本系统不仅在农作物害虫检测方面表现出色,同时也提供了丰富的数据处理和展示选项,满足了广泛的应用需求。2. 绪论
2.1 研究背景及意义
农业作为人类社会的基础产业,其生产效率和产品质量直接影响到人类的生活质量。在农业生产过程中,害虫的侵袭是一个长久以来都未能彻底解决的问题。害虫不仅会导致农作物产量大幅度下降,还可能引起农产品质量的严重下降,甚至导致农作物疾病的蔓延。因此,及时准确地检测农作物害虫,对于保障农业生产安全、提高农产品质量、促进农业可持续发展具有重要意义。传统的农作物害虫检测方法主要依赖人工目视识别,这种方法不仅效率低下,而且准确率受限于检测人员的经验和专业知识。
随着深度学习技术的迅猛发展,基于图像处理的害虫检测方法成为研究热点。特别是YOLO(You Only Look Once)系列算法在目标检测领域取得了显著的进展,其快速、高效的检测能力为农作物害虫检测提供了新的技术方案。YOLOv5及其后续版本YOLOv6、v7、v8等,通过不断优化和改进算法结构、训练策略和数据处理方式,显著提升了检测速度和准确性,使得害虫检测更加快速和准确。
当前,基于深度学习的农作物害虫检测研究主要集中在提高检测算法的准确性、扩大检测类型的范围、优化算法以适应不同环境条件下的害虫检测等方面。国内外许多学者通过改进YOLO算法,或者结合其他深度学习技术,如卷积神经网络(CNN)、图像处理技术等,开展了大量的研究工作,并取得了积极的进展。例如,一些研究通过增加数据集的多样性和丰富度,提高了模型的泛化能力和准确度。同时,也有研究致力于减少算法的计算复杂度,以适应实时检测的需要。
本博客旨在探讨农作物害虫检测的研究背景和意义,回顾国内外在该领域的最新研究进展,特别是目标检测算法在表情识别中的应用和发展,以及介绍最新的技术改进和数据集更新情况。通过这一系列的分析和讨论,我们希望能够为该领域的研究者和应用开发者提供有价值的信息和启发,共同推进农作物害虫检测技术的进步和应用。
2.2 国内外研究现状
随着深度学习技术在农业领域的广泛应用,尤其是在农作物害虫检测方面,国内外学者提出了多种基于深度学习的检测算法,显著提高了检测的准确性和效率。近年来,YOLO系列算法因其高效的检测速度和较好的准确率,成为了研究的热点。YOLO[1]系列作为实时目标检测的代表算法,经历了从YOLOv1到YOLOv8的发展历程。其中,YOLOv4和其后的版本在性能上取得了显著提升。YOLOv4通过引入更多的数据增强技术、更深的网络结构和新的特征融合策略,大幅提高了检测的准确度和速度。随后,YOLOv5[2]在易用性和速度上进一步优化,尽管它并非官方版本,但因其出色的性能和广泛的社区支持成为了业界的热点。YOLOv6[3]和YOLOv7[4]分别围绕模型的轻量化和进一步的性能提升进行设计,特别是在小目标检测上的表现。而最新的YOLOv8[5]则在此基础上进一步强化了模型的泛化能力和检测效率,使其在农作物害虫检测等复杂场景中表现更加出色。
随着机器视觉和深度学习技术的快速发展,除了YOLO系列之外,还有多种算法在农作物害虫检测领域被广泛研究。例如,Fast R-CNN、SSD和Mask R-CNN等算法也被应用于害虫检测中,这些算法各有优势,例如Mask R-CNN不仅能进行害虫的检测,还能实现对害虫的精确分割,有助于了解害虫的具体分布情况。
高质量的数据集是深度学习模型训练的关键。传统的害虫检测数据集多侧重于常见害虫种类,且往往受限于特定地区和作物类型,这限制了模型的泛化能力。近年来,一些新的数据集开始涵盖更广泛的害虫种类和更多样的农作物环境。例如,“全球农作物害虫数据集2024”(GCPD2024)收录了来自50多个国家、覆盖100种以上农作物的害虫图像,极大地丰富了研究者在害虫检测模型训练时的资源。
尽管深度学习技术在害虫检测中取得了显著成果,但仍面临一些挑战。例如,小目标检测的准确性不高、在复杂背景下的害虫识别困难、模型的实时性和泛化能力仍需提高等。此外,害虫种类繁多、形态多变,使得高准确率的害虫检测成为一个技术难题。为应对这些挑战,研究者开始探索使用生成对抗网络(GANs)增强数据集、利用迁移学习提高模型的泛化能力、以及开发更为复杂的网络结构来提升小目标检测的准确性。
随着计算资源的日益丰富和算法的不断优化,实时高效的害虫检测系统将成为可能。同时,结合无人机等现代农业技术,进行大规模的害虫监测和精确施药将成为趋势。此外,随着边缘计算技术的发展,将深度学习模型部署于移动设备和农业机器人上,实现害虫检测的本地化和实时化,也将成为一个重要的研究方向。
2.3 要解决的问题及其方案
2.3.1 要解决的问题
针对农作物害虫检测系统,本项目旨在解决一系列复杂挑战,通过集成最新的深度学习模型和开发先进的网页应用来提升害虫检测的准确性、速度和用户体验。以下是系统设计与实现过程中需解决的关键问题及相应的解决方案。
-
害虫识别的准确性与实时处理能力:
害虫种类繁多,且其在不同生长阶段的形态差异较大,这对检测系统的准确性提出了高要求。同时,农业应用场景需要系统能够快速响应,实现实时害虫检测。为此,本系统核心集成了基于YOLOv8/v7/v6/v5的深度学习模型,利用它们在目标检测领域的优势,结合PyTorch框架进行高效训练与推理,以实现对害虫的快速准确识别。 -
模型的泛化能力和环境适应性:
农作物生长环境复杂多变,不同光照、天气条件以及背景噪声均可能影响检测效果。本项目通过丰富的数据预处理和增强技术,以及在多种环境条件下的大规模数据集训练,提升了模型的泛化能力和环境适应性。 -
用户交互界面的直观性和功能性:
基于Streamlit开发的交互式Web应用界面,为用户提供了图像、视频和实时摄像头的害虫检测功能。界面设计注重用户体验,通过CSS美化,实现了直观易用的操作界面。用户可以轻松上传图像或视频进行检测,或通过摄像头实现实时害虫监控,并能够便捷地切换不同的模型文件,以适应不同的检测需求。 -
数据处理能力和存储效率:
考虑到系统将处理大量图像和视频数据,使用PyTorch和其他高效的数据处理库优化了数据的加载、预处理和批处理过程,提高了检测的速度和效率。同时,采用了高效的数据存储解决方案,优化了数据的组织和查询方式,确保了长期运行的数据管理和存取效率。 -
系统的可扩展性和维护性:
系统设计充分考虑了未来的扩展需求,采用模块化的设计理念,使得新增害虫种类识别、集成新的深度学习模型或升级现有功能变得更加容易。通过在PyCharm这类成熟的IDE环境下开发,确保了代码的质量和可维护性,便于系统的持续迭代和优化。
2.3.2 解决方案
-
深度学习模型的选择和优化
模型架构:选择YOLOv8/v7/v6/v5作为核心的深度学习模型组合,针对不同的害虫种类和检测场景进行优化。这些模型在速度和准确度之间提供了出色的平衡,并通过版本迭代不断优化,使其非常适合于复杂的农作物害虫检测任务。
数据增强:利用丰富的数据增强技术,如随机裁剪、缩放、旋转、色彩调整等,以及GANs生成的合成图像,来模拟多样化的环境条件下的害虫图像,从而提升模型的泛化能力和对复杂场景的适应性。
迁移学习:采用在大规模图像数据集上预训练的模型作为起点,通过迁移学习技术进行微调,专注于农作物害虫的特定检测任务。这样可以加速模型训练过程,并显著提高识别性能。 -
技术框架和开发工具
PyTorch框架:使用PyTorch作为深度学习框架,它为模型的开发、训练和推理提供了灵活和强大的支持。PyTorch的动态计算图和丰富的API能够加速实验过程,便于快速迭代和优化。
Streamlit网页设计:基于Streamlit构建交互式Web应用界面,使用户可以轻松上传图像、视频进行害虫检测,或通过摄像头实现实时监控。Streamlit的简洁API和数据可视化功能,为开发美观、功能丰富的用户界面提供了强大支持。
CSS美化:利用CSS对Streamlit应用进行风格定制和美化,提高用户界面的美观度和用户体验。通过CSS,可以调整布局、颜色、字体等元素,使界面更加直观和友好。 -
功能实现和系统设计
多输入源支持:设计系统以支持多种输入源,包括图像文件、视频流和实时摄像头捕获,以适应不同的农业监测和害虫检测场景。
模型切换功能:实现用户可自由切换不同预训练模型的功能,增加系统的灵活性和适用范围。这使得用户可以根据实际需求选择最合适的模型进行害虫检测。 -
数据处理和存储策略
高效数据处理:利用PyTorch的高效数据加载器和预处理机制,结合多线程和GPU加速技术,确保数据处理的高速性能,满足实时检测的需求。
智能数据存储:设计高效且可扩展的数据存储方案,对检测结果和历史数据进行有效组织,便于用户进行查询、分析和回溯。 -
性能优化和系统测试
性能调优:通过模型和系统性能分析,识别性能瓶颈并进行针对性优化,如模型精简、硬件加速等,以保证系统的高效运行。
全面测试:进行全面的系统测试,包括功能测试、性能测试和用户体验测试,确保系统的稳定性、准确性和可靠性。
通过实施上述策略,我们的目标是开发一个准确、高效且用户友好的农作物害虫检测系统,能够在多种使用场景下满足用户的需求,同时提供强大的数据处理能力和良好的用户体验。
2.4 博文贡献与组织结构
本文综合探讨了基于YOLOv8/v7/v6/v5等深度学习模型的农作物害虫检测系统,不仅提供了该领域的详细文献综述,还深入分析了数据集处理方法、算法选择理由、以及如何使用Streamlit开发美观且用户友好的Web界面。此外,文章还比较了YOLOv7、v6、v5等算法在害虫检测任务上的性能,并提供了完整的数据集和代码资源包,以便于读者理解、复现和进一步研究。以下是本文的主要贡献:
-
文献综述:提供了关于农作物害虫检测领域的最新研究进展,包括但不限于YOLO系列算法的应用、其他相关深度学习算法的探索、数据集的开发和处理技术等。
-
数据集处理:详细介绍了数据集的收集、预处理和增强方法,旨在提升模型训练的效率和检测准确率。
-
算法选择和优化:深入分析了选择YOLOv8、v7、v6、v5等算法的理由,包括它们在速度、准确性和适用性方面的优势,并讨论了对这些模型的定制化改进,以适应农作物害虫检测的特殊需求。
-
Streamlit网页设计:基于Streamlit框架,设计并实现了一个美观、直观且功能丰富的Web应用界面,支持图像、视频和实时摄像头输入,用户可以轻松切换不同的模型进行害虫检测。
-
算法性能对比:通过对YOLOv7、v6、v5等不同版本的算法在相同数据集上的检测效果进行对比,提供了关于算法选择的有价值见解。
-
资源分享:提供了完整的数据集和代码资源包,包括模型预训练文件、训练和预测的代码,以促进知识共享和技术传播。
后续章节的组织结构如下: 绪论:介绍研究背景、目的和本文的主要贡献;算法原理:详细介绍YOLOv8/v7/v6/v5等算法的工作原理及其在农作物害虫检测中的应用;数据集处理:讨论使用的数据集及其预处理、增强方法。代码介绍:提供模型训练和预测的详细代码说明,包括环境搭建、参数配置和执行步骤。实验结果与分析:展示不同模型在农作物害虫检测任务上的实验结果,并进行比较分析。系统设计与实现:介绍基于Streamlit的农作物害虫检测系统的设计与实现细节。结论与未来工作:总结本文的研究成果,并讨论未来的研究方向和潜在的改进空间。
3. 数据集处理
在构建用于农作物害虫检测的深度学习模型时,拥有一个高质量的数据集是至关重要的。本研究采用的数据集涵盖了6971张图像,细致地分为6084张训练图像、770张验证图像以及117张测试图像,确保了在模型训练和评估阶段的需要。这种划分策略有助于模型学习到各种害虫的特征,并在未知数据上进行泛化性能的准确评估。博主使用的类别如下:
Chinese_name = {"Hellula undalis": "小菜蛾",
"Leaf Webber": "叶网蛾",
"ash weevil": "灰象甲",
"blister beetle": "水泡甲虫",
"fruit fly": "果蝇",
"fruit sucking moth": "吸果蛾",
"helicoverpa": "棉铃虫",
"leucinodes": "茄果螟",
"mealy bug": "粉虱",
"pieris": "菜粉蝶",
"plutella": "小菜蛾",
"root grubs": "根蛆",
"schizaphis graminum": "禾谷缢管蚜",
"uroleucon compositae": "合头菊蚜",
"whitefly": "白粉虱"}
数据集的多样性体现在图像中害虫的多种类别及其在不同背景下的出现上。这包括从常见的leaf beetle到较少见的Heliothis viriplaca,使得模型有机会学习和识别广泛的害虫。然而,类别分布的不均衡性引入了一定的挑战。对于那些实例较少的害虫类别,模型可能难以有效学习其特征,这要求在训练过程中采用特别的策略,如过采样或合成数据技术,以避免对多数类别的过度拟合。
为了增强模型的泛化能力和适应性,我们对数据集中的图像进行了一系列的预处理和增强操作。预处理包括图像大小的调整和像素值的归一化,而增强处理则包含了一系列旨在模拟不同光照和环境条件的技术,如随机裁剪、旋转、缩放和色彩调整。这些步骤不仅提高了模型对变化环境的适应性,也有助于减少过拟合,确保在实际应用中的稳健性。
数据集的详细标注信息对于训练高效的目标检测模型至关重要。通过精确的标注,我们确保了模型能够从每个类别中学习到有用的特征。然而,标注的分布显示了一些显著的特点。多数害虫被标注在图像的中心区域,这可能是数据收集时的特定偏好或设备设置的结果。同样地,害虫在图像中的相对大小偏小,强调了在目标检测中对小目标的识别为一个普遍的难题。
总结来说,我们的数据集在类别多样性、图像质量、标注准确性上均达到了很高的标准,但也存在不均衡分布和小目标检测的挑战。通过有效的数据预处理和增强技术,我们提高了模型对这些挑战的适应能力。未来的研究将致力于解决类别不平衡问题,并进一步提升小目标害虫的检测精度,从而推动农业害虫管理技术的发展。
4. 原理与代码介绍
4.1 YOLOv8算法原理
Ultralytics公司于2023年初发布YOLOv8模型,相较于2020年发布的YOLOv5模型,YOLOv8模型将C3模块(CSP Bottleneck with 3 convolutions)改进成C2f模块(CSP Bottleneck with 2 convolutions),C3模块和C2f模块结构如下图(a)所示。图中CBS(Convolutions Bn SiLU)模块由基础卷积(Conv)、批量归一化(BN)和激活函数(SiLU)组成。C2f模块采用了多分支流设计,为模型提供了更丰富的梯度信息,强化了模型的特征提取能力,提高网络的学习效率。
YOLOv8模型仍然采用anchor free方法,降低检测过程中正样本框数量,并提升处理速度。此外,模型结合了GFL(generalized focal loss)损失计算策略,将Detect模块由YOLOv5中的耦合头改进成解耦头,如上图(b)所示。解耦头将分类任务和回归任务分开进行,避免了两个任务之间的干扰,理论上能够提高模型的训练效率。传统的YOLO系列算法的耦合头输出三类信息,而YOLOv8模型中的解耦头仅输出分类和回归信息。分类信息的输出通道数等于类别数,输出的内容综合了分类信息和置信度信息。回归信息的输出通道数等于4 reg_max(Regression maximum),输出内容为回归框在最大回归范围上的概率分布。YOLOv8采用了动态标签匹配策略,增加了正样本框选择的灵活度。在损失计算方面,YOLOv8除了计算分类和回归损失外,还引入了DFL(distribution focal loss)损失。DFL损失利用交叉熵的思想,通过将预测框回归至标签框的上下整数范围内,优化模型训练。
## 4.2 模型构建 接下来详细介绍构建用于农作物害虫检测的深度学习模型的代码结构和功能。这一过程包括模型的初始化、加载、预处理、预测以及结果的后处理等关键步骤。首先,代码通过导入必要的库和模块开始。cv2
是OpenCV库,广泛应用于图像处理和计算机视觉任务。torch
是PyTorch深度学习框架,用于构建和训练模型。Detector
是一个抽象基类,定义了检测器应有的基本功能和结构。YOLO
类专门用于加载和运行YOLO模型,而select_device
函数用于根据是否有可用的CUDA设备来选择运行模型的设备(GPU或CPU)。
import cv2
import torch
from QtFusion.models import Detector
from datasets.EmotionData.label_name import Chinese_name
from ultralytics import YOLO
from ultralytics.utils.torch_utils import select_device
接着,设置了模型运行的初始参数ini_params
,这包括设备类型、置信度阈值、IOU阈值等。这些参数对于模型的性能和检测结果的质量至关重要。
device = "cuda:0" if torch.cuda.is_available() else "cpu"
ini_params = {
'device': device,
'conf': 0.25,
'iou': 0.5,
'classes': None,
'verbose': False
}
count_classes
函数用于统计每个类别的检测数量。它接受检测信息和类别名称列表作为输入,并返回一个与类别名称列表相对应的计数列表。这个功能对于分析模型在不同类别上的表现非常有用。
def count_classes(det_info, class_names):
count_dict = {name: 0 for name in class_names}
for info in det_info:
class_name = info['class_name']
if class_name in count_dict:
count_dict[class_name] += 1
count_list = [count_dict[name] for name in class_names]
return count_list
YOLOv8v5Detector
类是整个检测流程的核心。该类继承自Detector
基类,提供了加载模型、图像预处理、执行预测和后处理检测结果等方法。在初始化时,该类接受一个参数字典,并用于设置模型的运行参数。load_model
方法负责加载指定路径的预训练YOLO模型,并进行必要的设备选择和模型预热。preprocess
方法对输入图像进行预处理,以适应模型的输入要求。predict
方法执行表情识别的预测过程,而postprocess
方法则处理模型的输出,将其转换为易于理解和使用的格式,例如将检测到的表情标注在图像上。
class YOLOv8v5Detector(Detector):
def __init__(self, params=None):
super().__init__(params)
self.model = None
self.img = None
self.names = list(Chinese_name.values())
self.params = params if params else ini_params
def load_model(self, model_path):
self.device = select_device(self.params['device'])
self.model = YOLO(model_path)
names_dict = self.model.names
self.names = [Chinese_name[v] if v in Chinese_name else v for v in names_dict.values()]
self.model(torch.zeros(1, 3, *[self.imgsz] * 2).to(self.device).type_as(next(self.model.model.parameters())))
def preprocess(self, img):
self.img = img
return img
def predict(self, img):
results = self.model(img, **ini_params)
return results
def postprocess(self, pred):
results = []
for res in pred[0].boxes:
for box in res:
class_id = int(box.cls.cpu())
bbox = box.xyxy.cpu().squeeze().tolist()
bbox = [int(coord) for coord in bbox]
result = {
"class_name": self.names[class_id],
"bbox": bbox,
"score": box.conf.cpu().squeeze().item(),
"class_id": class_id,
}
results.append(result)
return results
def set_param(self, params):
self.params.update(params)
最后,set_param
方法允许动态更新检测参数,如置信度阈值和IOU阈值,这为用户提供了更大的灵活性和控制能力,以优化检测结果。
这部分代码构建了一个完整的农作物害虫检测流程,从加载预训练的YOLO模型到执行表情检测,并处理检测结果,提供了一套完备的解决方案。通过细致的功能设计和参数设置,这个系统能够高效且准确地识别图像或视频中的农作物害虫,满足不同场景下的应用需求。
4.3 训练代码
在本篇博客中,我们将探讨如何使用YOLOv8模型来训练一个农作物害虫检测系统。这一过程不仅涉及到深度学习模型的加载和初始化,还包括数据集的准备以及训练参数的配置。以下表格详细介绍了YOLOv8模型训练中使用的一些重要超参数及其设置:
超参数 | 设置 | 说明 |
---|---|---|
学习率(lr0 ) |
0.01 | 决定了模型权重调整的步长大小,在训练初期有助于快速收敛。 |
学习率衰减(lrf ) |
0.01 | 控制训练过程中学习率的降低速度,有助于模型在训练后期细致调整。 |
动量(momentum ) |
0.937 | 加速模型在正确方向上的学习,并减少震荡,加快收敛速度。 |
权重衰减(weight_decay ) |
0.0005 | 防止过拟合,通过在损失函数中添加正则项减少模型复杂度。 |
热身训练周期(warmup_epochs ) |
3.0 | 初始几个周期内以较低的学习率开始训练,逐渐增加到预定学习率。 |
批量大小(batch ) |
16 | 每次迭代训练中输入模型的样本数,影响GPU内存使用和模型性能。 |
输入图像大小(imgsz ) |
640 | 模型接受的输入图像的尺寸,影响模型的识别能力和计算负担。 |
环境设置与模型加载:首先,导入必要的库和模块:
import os
import torch
import yaml
from ultralytics import YOLO # 用于加载YOLO模型
from QtFusion.path import abs_path # 用于获取文件的绝对路径
这里,torch
是PyTorch深度学习框架,用于模型的训练与推理。yaml
用于处理数据集的配置文件。YOLO
类用于加载和训练YOLO模型。
接下来,根据系统是否支持CUDA,自动选择使用GPU或CPU作为训练设备:
device = "0" if torch.cuda.is_available() else "cpu"
数据集准备:定义训练过程中使用的基本参数:
workers = 1 # 工作进程数
batch = 8 # 每批处理的图像数量
指定数据集名称,并构建配置文件的路径。这里使用了abs_path
函数,确保无论当前工作目录在何处,都能正确找到配置文件的路径:
data_name = "InsectPest"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current') # 数据集的yaml的绝对路径
unix_style_path = data_path.replace(os.sep, '/')
为确保数据集路径的正确性,在读取配置文件后,将数据集的路径设置为配置文件所在目录的路径:
directory_path = os.path.dirname(unix_style_path)
with open(data_path, 'r') as file:
data = yaml.load(file, Loader=yaml.FullLoader)
if 'path' in data:
data['path'] = directory_path
with open(data_path, 'w') as file:
yaml.safe_dump(data, file, sort_keys=False)
训练模型:加载预训练的YOLOv8模型。这里指定了模型权重文件的路径,并将任务类型设置为detect
,表示我们将使用模型进行目标检测:
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')
最后,开始训练模型。在train
方法中,我们详细指定了训练的参数,包括数据集配置文件的路径、训练使用的设备、工作进程数、输入图像的大小、训练周期以及每批次的大小:
results2 = model.train(
data=data_path,
device=device,
workers=workers,
imgsz=640,
epochs=120,
batch=batch,
name='train_v8_' + data_name
)
通过上述过程,我们成功地配置并启动了农作物害虫检测模型的训练任务。YOLOv8作为一个强大的目标检测框架,为我们的训练任务提供了良好的支持,使得训练过程既高效又方便。在训练完成后,我们将得到一个针对农作物害虫检测任务优化过的模型,它将能够准确识别和分析图像中的农作物害虫,为后续的应用提供强大的技术支撑。
5. 实验结果与分析
5.1 训练曲线
采用以上代码进行训练,得到的训练过程曲线如下,展示了使用YOLOv8模型在农作物害虫检测任务上的训练过程中各项指标的变化情况。这些指标包括了训练和验证阶段的各种损失函数,以及精确度、召回率和平均精度(mAP)的指标。
首先,训练过程中的损失函数曲线显示了模型对数据的拟合情况。从图中可以看出,无论是边界框损失(box_loss)、分类损失(cls_loss)还是目标损失(obj_loss),训练和验证损失都随着迭代次数的增加而显著下降,并趋于稳定。这表明模型在学习过程中逐渐提升了对农作物害虫特征的识别能力,并且没有出现过拟合的迹象,这是由于验证损失(val_loss)并未在训练损失显著下降后开始上升,而是保持在一个较低的水平,这表明模型对未见数据具有良好的泛化能力。
在评价指标方面,精确度(precision)和召回率(recall)曲线给出了模型性能的进一步证据。精确度曲线展示了模型预测为正样本中实际为正样本的比例,而召回率曲线则显示了所有正样本中被模型正确预测的比例。两者均随着迭代次数的增加而提高,表明模型在区分害虫与非害虫方面变得更加精确,并能够找到更多的真实害虫目标。
最后,mean Average Precision(mAP)是目标检测中的关键性能指标,它综合了精确度和召回率。在这里,我们看到了在不同的IoU阈值下,模型的mAP呈现出稳定上升的趋势,这是模型性能优化的有力证据。尤其是[email protected],即IoU阈值为0.5时的mAP,已经达到了较高的水平,这表示模型在较宽松的标准下表现出色。而[email protected]则考虑了从宽松到严格的一系列IoU阈值,它提供了一个更全面的模型性能评价。
5.2 混淆矩阵
混淆矩阵是评估分类模型性能的重要工具,尤其是在害虫检测这样的多类别问题中,它能帮助我们深入理解模型在各个类别上的预测准确性。从您提供的混淆矩阵中,我们可以观察到模型在多数类别上的性能表现。
首先,混淆矩阵中的每一行代表模型预测的类别,而每一列代表真实的类别。理想情况下,我们希望主对角线上的值最大,这意味着模型的预测与真实类别一致。在本混淆矩阵中,主对角线上的深色方块表示高准确率,而非对角线上的浅色方块则表明预测错误的实例。具体来看,某些类别如blister beetle和whitefly表现出高准确度,对角线上的值分别为0.97和0.80,这表示模型能够非常准确地识别这些害虫。然而,也有一些类别,如ash weevil,准确度较低,仅为0.76,且有相对较高的错误预测,这可能由于害虫形态相似性高或数据集样本不足。
模型在Helicoverpa上的预测表现出较大的混淆,其准确度只有0.68,表明该类别的害虫容易被误分类到其他类别。同样地,fruit sucking moth也存在一定程度的混淆,尽管其准确度为0.92,但还是有约8%的实例被误分类。此外,对于background类别,也存在不少害虫被错误地分类为背景,这可能指向模型在区分害虫与复杂背景方面的挑战。
混淆矩阵不仅展现了模型的分类准确度,还揭示了模型的偏好与弱点。例如,模型在区分leaf weber和ash weevil时可能会混淆,因为这两个类别在混淆矩阵中有较多的交叉错误。
为了提升模型的整体性能和降低误分类率,我们需要对模型进行进一步的微调。可以通过增加样本数量、进行更加复杂的数据增强、或者调整分类阈值来解决特定类别的混淆问题。另外,深入分析那些具有较高混淆率的类别之间的共同特征,将有助于我们在数据收集和特征工程方面进行更精确的调整。
综上所述,尽管模型在某些类别上表现出色,但在其他一些类别上仍存在改进空间。未来的工作将集中于识别导致误分类的因素,并采取针对性措施,如改进数据集的质量和多样性,优化模型架构,或者应用更高级的分类策略,以实现更高准确性的害虫检测。通过这些改进,模型将更加适应实际应用中的复杂环境,为农业害虫管理提供更为强大的技术支持。
5.3 YOLOv8/v7/v6/v5对比实验
(1)实验设计:
本实验旨在评估和比较YOLOv5、YOLOv6、YOLOv7和YOLOv8几种模型在农作物害虫目标检测任务上的性能。为了实现这一目标,博主分别使用使用相同的数据集训练和测试了这四个模型,从而可以进行直接的性能比较。该数据集包含农作物害虫的图像。本文将比较分析四种模型,旨在揭示每种模型的优缺点,探讨它们在工业环境中实际应用的场景选择。
模型 | 图像大小 (像素) | mAPval 50-95 | CPU ONNX 速度 (毫秒) | A100 TensorRT 速度 (毫秒) | 参数数量 (百万) | FLOPs (十亿) |
---|---|---|---|---|---|---|
YOLOv5nu | 640 | 34.3 | 73.6 | 1.06 | 2.6 | 7.7 |
YOLOv8n | 640 | 37.3 | 80.4 | 0.99 | 3.2 | 8.7 |
YOLOv6N | 640 | 37.5 | - | - | 4.7 | 11.4 |
YOLOv7-tiny | 640 | 37.4 | - | - | 6.01 | 13.1 |
(2)度量指标:
- F1-Score:F1-Score是精确率(Precision)和召回率(Recall)的调和平均值。精确率是指模型正确识别的正例与所有识别为正例的案例之比,而召回率是指模型正确识别的正例与所有实际正例之比。F1-Score对于不平衡的数据集或者需要同时考虑精确率和召回率的任务特别重要。
- mAP(Mean Average Precision):mAP是衡量模型在多个类别上平均检测准确度的指标。它计算了模型在所有类别上的平均精度,是目标检测领域中常用的性能度量。
名称 | YOLOv5nu | YOLOv6n | YOLOv7-tiny | YOLOv8n |
---|---|---|---|---|
mAP | 0.925 | 0.918 | 0.884 | 0.918 |
F1-Score | 0.88 | 0.88 | 0.84 | 0.89 |
(3)实验结果分析:
从双条形图中可以观察到,在mAP指标上,YOLOv5nu表现出最佳的性能,得分为0.925,而YOLOv7-tiny的得分最低,为0.884。对于F1-Score,YOLOv8n以0.89的得分领先,而YOLOv7-tiny则同样表现出较低的分数0.84。值得注意的是,尽管YOLOv6n在mAP上略低于YOLOv5nu,它在F1-Score上与YOLOv5nu持平,都是0.88,这表明在害虫检测的精确度和召回率的平衡上,YOLOv6n表现出与YOLOv5nu相似的性能。
这种对比有助于理解不同版本的YOLO模型在具体应用上的优势和局限。mAP作为一种集成了检测准确性和召回率的性能指标,能够全面评估模型在不同置信度阈值下的性能;而F1-Score则更侧重于模型对于实际检测任务的精确度与召回率的平衡性。通过综合考虑这两个指标,可以更全面地评价模型的实用性和有效性。这些观察结果为深入理解各个模型的性能特点提供了重要信息,有助于指导未来的模型选择和优化方向。尤其是对于计算资源受限的场景,选择性能与资源消耗之间最优的模型至关重要。在实际应用中,例如农业害虫检测,这样的比较分析可以帮助研究者和从业者选择一个适合其具体需求的模型,确保害虫检测系统既高效又准确。
6. 系统设计与实现
6.1 系统架构设计
本系统旨在提供一个实时的农作物害虫检测平台,它能够通过摄像头捕获或上传的文件进行表情检测,并实时显示检测结果。系统架构设计围绕三个主要部分展开:用户界面(UI)、检测引擎、结果展示与记录。这三个部分协同工作,提供一个流畅且互动性强的用户体验。
(一)数据收集与预处理
在系统的最初阶段,数据收集与预处理是至关重要的一步。为了训练一个高效的害虫检测模型,我们需要收集大量的害虫图像数据,这些数据包括不同种类、不同成长阶段的害虫图像。通过Label_list类,我们定义了一个清晰的害虫类别标签列表,确保每一张图像都被正确标注。
接下来,数据预处理是通过图像增强、标注等步骤来完成的。我们采用了cv2和numpy库来处理图像数据,包括调整图像尺寸、图像归一化等,以适配后续模型训练的需求。
(二)模型训练
本系统选择YOLOv8/v7/v6/v5作为害虫检测的核心模型。YOLOv8v5Detector类是模型训练和检测的关键,负责模型的加载、训练和预测。我们首先通过load_model方法加载预训练的模型权重,然后对其进行微调,以适应我们的害虫检测任务。模型训练过程中,通过调整conf_threshold和iou_threshold参数(分别代表置信度阈值和IOU阈值),我们可以优化模型的检测性能。
(三)检测与识别
在模型训练完成后,接下来的步骤是检测与识别。系统通过Detection_UI类集成了整个检测流程。当农作物图像通过摄像头或文件上传到系统中时,process_camera_or_file方法被调用,负责处理摄像头捕获的实时图像或上传的文件。对于每一帧图像,都会通过frame_process方法进行处理,并使用训练好的模型进行预测。预测结果包括害虫的位置、类别和置信度,将以图像标注的形式直观展现。
(四)结果处理与反馈
最后,结果处理与反馈对于农作物害虫管理至关重要。系统不仅展示了检测结果,还通过LogTable类记录了检测过程中的详细信息,包括检测时间、位置、置信度等,便于后续分析。此外,系统还提供了导出结果的功能,通过点击“导出结果”按钮,检测结果将被保存为CSV文件,为农药喷洒、病虫害防治提供科学依据。
通过以上的系统架构设计,我们的害虫检测系统不仅能够实现高效准确的害虫检测,还能为用户提供直观的结果展示和数据分析功能。这一系统的设计充分考虑了实际应用的需求,为现代精准农业提供了强有力的技术支持。
6.2 系统流程
下面是按照程序流程步骤,每一步骤都是根据代码中的类和方法设计的,目的就是为了给大家提供一个清晰、高效的操作流程,以确保用户能够轻松使用系统并获取准确的检测结果。结合代码细节的介绍如下:
-
初始化系统(Detection_UI类的__init__方法)
- 系统配置:首先,系统通过setup_page方法设置页面布局和标题。随后,setup_sidebar方法初始化侧边栏,包括模型设置、摄像头配置和识别项目设置等。
- 加载模型:接着,系统通过YOLOv8v5Detector类的load_model方法加载训练好的模型权重。这一步骤是害虫检测的关键,决定了系统的检测性能。
- 数据处理:系统通过维护一个cls_name和colors的列表,为每个害虫类别分配一个随机颜色,用于后续的图像标注。
-
配置模型参数和输入选择:
- 模型参数设置:用户通过侧边栏中的滑动条选择conf_threshold(置信度阈值)和iou_threshold(IOU阈值)。
- 输入选择:用户可以选择使用摄像头实时检测或上传图片/视频文件进行害虫检测。
-
害虫检测处理流程:
- 处理摄像头或文件输入:通过process_camera_or_file方法,系统根据用户的输入选择进行不同的处理流程:
- 摄像头输入:系统实时捕捉视频帧,并通过frame_process方法对每一帧进行害虫检测。
- 图片/视频文件上传:对上传的图片或视频文件,同样采用frame_process方法进行害虫检测。
- 处理摄像头或文件输入:通过process_camera_or_file方法,系统根据用户的输入选择进行不同的处理流程:
-
害虫检测与结果展示:
- 害虫检测:无论是摄像头捕获的视频帧还是上传的图片/视频文件,都会经过frame_process方法处理。在此方法内部,使用YOLOv8v5Detector类的predict方法对图像进行预测,然后根据预测结果,使用drawRectBox方法在图像上绘制边界框和类别标签。
- 结果展示:检测结果将直观展示在页面上,包括害虫的边界框、类别和置信度。同时,LogTable类记录详细的检测信息,如检测时间、位置等,方便用户进行进一步分析。
-
结果导出与分析:
- 导出结果:用户可以通过点击“导出结果”按钮,将检测结果导出为CSV文件,以便于后续的数据分析和决策支持。
- 日志和统计分析:LogTable类提供了保存和更新检测日志的功能,用户可以查看整个检测会话中的所有检测结果,进一步分析害虫的分布情况和活动规律。
通过上述流程,基于YOLO系列模型的农作物害虫检测系统能够实现高效、准确的害虫识别和分类,为农业生产提供科学的数据支持。系统的设计充分利用了深度学习技术的优势,提升了农业害虫管理的智能化水平。
代码下载链接
如果您希望获取博客中提及的完整资源包,包含测试图片、视频、Python文件(*.py)、网页配置文件、训练数据集、代码及界面设计等,可访问博主在面包多平台的上传内容。相关的博客和视频资料提供了所有必要文件的下载链接,以便一键运行。完整资源的预览如下图所示:
资源包中涵盖了你需要的训练测试数据集、训练测试代码、UI界面代码等完整资源,完整项目文件的下载链接可在下面的视频简介中找到➷➷➷
演示与介绍视频 :https://www.bilibili.com/video/BV18D421W72W/
YOLOv8/v7/v6/v5项目合集下载:https://mbd.pub/o/bread/mbd-ZZ2YmJhx
YOLOv8和v5项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Xm59x
YOLOv7项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Ylp5y
YOLOv6项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Yl5tw
完整安装运行教程:
这个项目的运行需要用到Anaconda和Pycharm两个软件,下载到资源代码后,您可以按照以下链接提供的详细安装教程操作即可运行成功,如仍有运行问题可私信博主解决:
- Pycharm和Anaconda的安装教程:https://deepcode.blog.csdn.net/article/details/136639378;
软件安装好后需要为本项目新建Python环境、安装依赖库,并在Pycharm中设置环境,这几步采用下面的教程可选在线安装(pip install直接在线下载包)或离线依赖包(博主提供的离线包直接装)安装两种方式之一:
- Python环境配置教程:https://deepcode.blog.csdn.net/article/details/136639396(2,3方法可选一种);
- 离线依赖包的安装指南:https://deepcode.blog.csdn.net/article/details/136650641(2,3方法可选一种);
如使用离线包方式安装,请下载离线依赖库,下载地址:https://pan.baidu.com/s/1uHbU9YzSqN0YP_dTHBgpFw?pwd=mt8u (提取码:mt8u)。
7. 结论与未来工作
本文深入研究并实践了基于YOLOv8/v7/v6/v5的深度学习模型在农作物害虫检测领域的应用,成功开发了一个结合了这些先进算法的农作物害虫检测系统。通过对多个版本的YOLO模型进行细致的比较和优化,本研究不仅显著提升了农作物害虫检测的准确率和实时性,还通过Streamlit创建了一个直观、美观且易于使用的Web应用,使用户能够轻松地进行害虫检测,从而在实际农业应用中发挥重要作用。
经过一系列实验验证,本文所提出的方法在害虫检测的准确性和处理速度上都达到了令人满意的水平。同时,我们还提供了完整的数据集处理流程、模型训练和预测的代码,以及基于Streamlit的系统设计和实现细节,为后续的研究者和开发者复现和参考提供了方便。尽管取得了一定的成果,但农作物害虫检测作为一个复杂多变的任务,仍然面临着许多挑战和改进空间。在未来的工作中,我们计划从以下几个方向进行探索:
- 模型优化:继续探索更深层次的网络结构和优化策略,如神经网络架构搜索(NAS)技术,以进一步提升模型的性能和效率。
- 多模态融合:考虑结合图像之外的其他信息,如环境参数(温度、湿度等)进行害虫检测,以更全面地理解农作物害虫的活动规律。
- 跨域适应性:研究不同地区、不同作物种类的害虫检测,通过领域自适应技术提高模型在不同农业环境中的泛化能力。
- 用户交互体验:进一步优化系统的用户界面和交互设计,使其更加人性化、智能化,以满足更广泛用户的需求。
- 实际应用拓展:探索农作物害虫检测在更多实际应用场景中的应用,如精准农业管理、农作物健康监测等,以发挥其最大的社会和经济价值。
总之,农作物害虫检测技术正处于快速发展之中,随着技术的不断进步和应用场景的不断拓展,我们相信在不久的将来,基于深度学习的农作物害虫检测将在精准农业、生态监测、农业科技创新等领域发挥更加重要的作用。
Liu C, Tao Y, Liang J, et al. Object detection based on YOLO network[C]//2018 IEEE 4th information technology and mechatronics engineering conference (ITOEC). IEEE, 2018: 799-803. ↩︎
Zhu X, Lyu S, Wang X, et al. TPH-YOLOv5: Improved YOLOv5 based on transformer prediction head for object detection on drone-captured scenarios[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 2778-2788. ↩︎
Sun Z, Chen B. Research on Pedestrian Detection and Recognition Based on Improved YOLOv6 Algorithm[C]//International Conference on Artificial Intelligence in China. Singapore: Springer Nature Singapore, 2022: 281-289. ↩︎
Zhao H, Zhang H, Zhao Y. Yolov7-sea: Object detection of maritime uav images based on improved yolov7[C]//Proceedings of the IEEE/CVF winter conference on applications of computer vision. 2023: 233-238. ↩︎
Aboah A, Wang B, Bagci U, et al. Real-time multi-class helmet violation detection using few-shot data sampling technique and yolov8[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2023: 5349-5357. ↩︎