基于YOLOv8深度学习的农作物幼苗与杂草检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

简介: 基于YOLOv8深度学习的农作物幼苗与杂草检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

前言

农作物幼苗与杂草检测系统对于实现精准农业和优化作物管理至关重要。杂草的及时检测和处理不仅可以避免和减少与农作物之间的竞争,从而提高作物产量和质量,还可以降低化学除草剂的使用,减少对环境的影响。利用YOLOv8算法编写的检测系统可以高效地区分田间作物幼苗和杂草,使管理工作自动化,提升了农田管理效率,同时有助于减少劳动力投入和成本。

农作物幼苗与杂草检测系统的应用场景包括

精准除草:在作物生长初期,准确识别杂草位置,指导机械或无人机进行精准施药,减少除草剂的使用。

作物管理:评估作物长势,基于幼苗数量和分布情况制定灌溉、施肥等农事活动计划。

智能农机引导:引导自动化农业机械,在不损伤作物的情况下进行杂草的去除或管理。

农田监控:提供实时的农田植被监测数据,助力农民及时发现潜在问题并做出调整。

科研分析:为农业研究提供精确的数据,分析作物与杂草的互动和竞争关系,优化种植策略。

收获前筛选:在收获前确保田间杂草数量控制在一定水平,确保作物质量和收获效率。

总结而言,农作物幼苗与杂草检测系统通过YOLOv8算法实现了高准确度和高效率的植被识别,为现代农业生产提供了强大的技术支持。这一系统有助于提升农业生产的科技水平,减少环境影响,并提高农业生产的整体可持续性。随着精准农业概念的深入发展,此类智能检测系统在农业生产中的应用将变得越来越广泛。

博主通过搜集实际场景中的农作物幼苗与杂草相关数据图片,根据YOLOv8的目标检测技术,基于python与Pyqt5开发了一款界面简洁的农作物幼苗与杂草检测系统,可支持图片、视频以及摄像头检测,同时可以将图片或者视频检测结果进行保存

软件初始界面如下图所示:

检测结果界面如下:

一、软件核心功能介绍及效果演示

软件主要功能

1. 可用于实时检测农作物幼苗与杂草,并显示目标数量;
2. 支持图片、视频及摄像头进行检测,同时支持图片的批量检测
3. 界面可实时显示目标位置目标总数置信度用时等信息;
4. 支持图片或者视频检测结果保存

界面参数设置说明

置信度阈值:也就是目标检测时的conf参数,只有检测出的目标置信度大于该值,结果才会显示;

交并比阈值:也就是目标检测时的iou参数,只有目标检测框的交并比大于该值,结果才会显示;

IoU:全称为Intersection over

Union,表示交并比。在目标检测中,它用于衡量模型生成的候选框与原标记框之间的重叠程度。IoU值越大,表示两个框之间的相似性越高。通常,当IoU值大于0.5时,认为可以检测到目标物体。这个指标常用于评估模型在特定数据集上的检测准确度。

(1)图片检测演示

点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹,操作演示如下:

点击目标下拉框后,可以选定指定目标的结果信息进行显示。

点击保存按钮,会对检测结果进行保存,存储路径为:save_data目录下。

注:1.右侧目标位置默认显示置信度最大一个目标位置,可用下拉框进行目标切换。所有检测结果均在左下方表格中显示。

单个图片检测操作如下:

批量图片检测操作如下:

(2)视频检测演示

点击视频按钮,打开选择需要检测的视频,就会自动显示检测结果,再次点击可以关闭视频。

点击保存按钮,会对视频检测结果进行保存,存储路径为:save_data目录下。

(3)摄像头检测演示

点击打开摄像头按钮,可以打开摄像头,可以实时进行检测,再次点击,可关闭摄像头。

(4)保存图片与视频检测结果

点击保存按钮后,会将当前选择的图片【含批量图片】或者视频的检测结果进行保存。检测的图片与视频结果会存储在save_data目录下。

视频检测保存演示如下:

保存的检测结果文件如下:

二、模型的训练、评估与推理

1.YOLOv8的基本原理

YOLOv8是一种前沿的目标检测技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行

YOLO各版本性能对比:

YOLOv8网络结构如下:

2. 数据集准备与训练

本文使用的数据集为农作物幼苗与杂草图片,并使用Labelimg标注工具对每张图片中的目标边框(Bounding Box)及类别进行标注。一共包含2822张图片,其中训练集包含2469张图片验证集包含235张图片测试包含118张图片

对每张图像进行如下预处理操作,用于增加样本数量,提高训练模型的检测泛化能力与准确率:

  1. 以90度旋转的概率相等:无旋转,顺时针90度,逆时针90度;
  2. 水平-15°至+15°和垂直-15°至+15°之间的随机剪切;
  3. 随机亮度调整在- 25%和+ 25%之间。

部分图像及标注如下图所示:

图片数据的存放格式如下,在项目目录中新建datasets目录,同时将检测的图片分为训练集与验证集放入WeedCropData目录下。

同时我们需要新建一个data.yaml文件,用于存储训练数据的路径及模型需要进行检测的类别。YOLOv8在进行模型训练时,会读取该文件的信息,用于进行模型的训练与验证。data.yaml的具体内容如下:

train: E:\MyCVProgram\WeedCropDetection\datasets\WeedCropData\train\images
val: E:\MyCVProgram\WeedCropDetection\datasets\WeedCropData\valid\images
test: E:\MyCVProgram\WeedCropDetection\datasets\WeedCropData\test\images
nc: 2
names: ['crop', 'weed']

注:train与val后面表示需要训练图片的路径,建议直接写自己文件的绝对路径。

数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:

#coding:utf-8
from ultralytics import YOLO
if __name__ == '__main__':
    # 加载预训练模型
    model = YOLO("ultralytics/cfg/models/v8/yolov8.yaml").load('yolov8n.pt')
    # Use the model
    results = model.train(data='datasets/WeedCropData/data.yaml', epochs=250, batch=4)  # 训练模型
    # 将模型转为onnx格式
    # success = model.export(format='onnx')

3. 训练结果评估

在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况。YOLOv8在训练时主要包含三个方面的损失:定位损失(box_loss)、分类损失(cls_loss)和动态特征损失(dfl_loss),在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:

各损失函数作用说明:

定位损失box_loss:预测框与标定框之间的误差(GIoU),越小定位得越准;

分类损失cls_loss:计算锚框与对应的标定分类是否正确,越小分类得越准;

动态特征损失(dfl_loss):DFLLoss是一种用于回归预测框与目标框之间距离的损失函数。在计算损失时,目标框需要缩放到特征图尺度,即除以相应的stride,并与预测的边界框计算Ciou Loss,同时与预测的anchors中心点到各边的距离计算回归DFLLoss。这个过程是YOLOv8训练流程中的一部分,通过计算DFLLoss可以更准确地调整预测框的位置,提高目标检测的准确性。

本文训练结果如下:

我们通常用PR曲线来体现精确率和召回率的关系,本文训练结果的PR曲线如下。mAP表示Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值。mAP@.5:表示阈值大于0.5的平均mAP,可以看到本文模型目标检测的mAP@0.5值为0.75,结果还是不错的,但还有进一步提升的空间。

4. 检测结果识别

模型训练完成后,我们可以得到一个最佳的训练结果模型best.pt文件,在runs/train/weights目录下。我们可以使用该文件进行后续的推理检测。

图片检测代码如下:

#coding:utf-8
from ultralytics import YOLO
import cv2
# 所需加载的模型目录
path = 'models/best.pt'
# 需要检测的图片地址
img_path = "TestFiles/32212_jpg.rf.895de7ee8d23431a74e06189618d3ce0.jpg"
# 加载预训练模型
# conf  0.25  object confidence threshold for detection
# iou 0.7 intersection over union (IoU) threshold for NMS
model = YOLO(path, task='detect')
# model = YOLO(path, task='detect',conf=0.5)
# 检测图片
results = model(img_path)
print(results)
res = results[0].plot()
res = cv2.resize(res,dsize=None,fx=0.5,fy=0.5,interpolation=cv2.INTER_LINEAR)
cv2.imshow("YOLOv8 Detection", res)
cv2.waitKey(0)

执行上述代码后,会将执行的结果直接标注在图片上,结果如下:

以上便是关于此款农作物幼苗与杂草检测系统的原理与代码介绍。基于此模型,博主用pythonPyqt5开发了一个带界面的软件系统,即文中第二部分的演示内容,能够很好的支持图片、视频及摄像头进行检测,同时支持检测结果的保存

目录
打赏
0
0
0
0
127
分享
相关文章
Python实战:搭建短信转发器,实现验证码自动接收与处理
在移动互联网时代,短信验证码是重要的安全手段,但手动输入效率低且易出错。本文介绍如何用Python搭建短信转发器,实现验证码自动接收、识别与转发。通过ADB工具监听短信、正则表达式或ddddocr库提取验证码,并利用Flask框架转发数据。系统支持多设备运行,具备安全性与性能优化功能,适合自动化需求场景。未来可扩展更多功能,提升智能化水平。
26 1
Python爬虫实战:一键采集电商数据,掌握市场动态!
这个爬虫还挺实用,不光能爬电商数据,改改解析规则,啥数据都能爬。写爬虫最重要的是要有耐心,遇到问题别着急,慢慢调试就成。代码写好了,运行起来那叫一个爽,分分钟几千条数据到手。
python检测网络延迟
#!/usr/bin/env python # coding: utf-8 # coding: cp950 ''' Create Date: 2012-11-06 Version: 1.
2404 0
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
13天前
|
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
24 4
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化和调试技巧,涵盖使用内置函数、列表推导式、生成器、`cProfile`、`numpy`等优化手段,以及`print`、`assert`、`pdb`和`logging`等调试方法。通过实战项目如优化排序算法和日志记录的Web爬虫,帮助你编写高效稳定的Python程序。
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。

热门文章

最新文章