【深度学习目标检测】十六、基于深度学习的麦穗头系统-含GUI和源码(python,yolov8)

全球麦穗检测是植物表型分析领域的一个挑战,主要目标是检测图像中的小麦麦穗。这种检测在农业领域具有重要意义,可以帮助农民评估作物的健康状况和成熟度。然而,由于小麦麦穗在视觉上具有挑战性,准确检测它们是一项艰巨的任务。

全球麦穗检测的挑战在于准确识别不同品种、不同生长环境、不同光照条件、不同拍摄角度下的麦穗。由于小麦麦穗经常重叠、颜色和外观变化多样,这使得检测更具挑战性。为了解决这些问题,研究者们采用机器学习和计算机视觉技术来开发麦穗检测算法。

目前,全球麦穗检测的常用方法包括基于单级和两级检测器的目标检测方法(如Yolo和Faster-RCNN)。这些方法通过训练深度神经网络来识别和定位图像中的麦穗。然而,即使使用大型数据集进行训练,仍然存在对训练区域的偏差,因此需要不断改进和优化算法以提高检测准确性。

全球麦穗检测对于农业生产和科学研究具有重要意义。准确估计不同品种的小麦麦穗密度和大小可以帮助农民更好地评估作物健康状况和产量。此外,这种检测还可以用于研究小麦生长和发育的规律,以及开发新的种植技术和品种。通过改进麦穗检测算法,可以为农业生产的智能化和精细化提供有力支持。

本文介绍了基于深度学习yolov8的麦穗头检测系统,包括训练过程和数据准备过程,同时提供了推理的代码和GUI。对准备计算机视觉相关的毕业设计的同学有着一定的帮助。

检测结果如下图:

一、安装YoloV8

yolov8官方文档:主页 - Ultralytics YOLOv8 文档

安装部分参考:官方安装教程

二、数据集准备

本文使用的数据集来自全球小麦头检测数据集,检测小麦穗是一项重要任务,可以估计相关性状,包括穗种群密度和穗特征,如卫生状况、大小、成熟阶段和芒的存在。几项研究开发了从高分辨率 RGB 图像中检测小麦头的方法。它们基于计算机视觉和机器学习,通常在有限的数据集上进行校准和验证。然而,观察条件、基因型差异、发育阶段、头部方向的可变性代表了计算机视觉的挑战。此外,由于运动或风和密集人群头部之间的重叠可能导致的模糊使这项任务更加复杂。通过联合国际协作努力,我们建立了一个大型、多样化且标记良好的数据集,即全球小麦头检测 (GWHD) 数据集。它包含 4,700 张高分辨率 RGB 图像和 190,000 个标记的小麦头,这些小麦头采集自世界各地不同生长阶段的不同基因型的多个国家。

数据示例如下:

全球麦穗检测数据集yoloV8格式,采用8:2划分训练集和验证集,包含2698个训练数据和675个验证数据,本文提供整理后的全球麦穗检测数据集yoloV8格式。

三、模型训练

1、数据集配置文件

在ultralytics/ultralytics/cfg/datasets目录下添加wheat.yaml,添加以下内容(path修改为自己的路径):

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO 2017 dataset http://cocodataset.org by Microsoft
# Example usage: yolo train data=coco.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco  ← downloads here (20.1 GB)# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: datasets/wheat_det_yolo8  # dataset root dir
train: images/train  # train images (relative to 'path') 118287 images
val: images/val  # val images (relative to 'path') 5000 images
test: images/val  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794# Classes
names:0: wheat

2、修改模型配置文件

新建ultralytics/cfg/models/wheat/yolov8_wheat.yaml ,添加以下内容:,添加以下内容:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 1  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

3、训练模型

使用如下命令训练模型,相关路径更改为自己的路径,建议绝对路径:

yolo detect train project=deploy name=yolov8_wheat exist_ok=True optimizer=auto val=True amp=True epochs=100  imgsz=640 model=ultralytics/cfg/models/wheat/yolov8_wheat.yaml  data=ultralytics/cfg/datasets/wheat.yaml

4、验证模型

使用如下命令验证模型,相关路径根据需要修改:

yolo detect val imgsz=640 model=deploy/yolov8_wheat/weights/best.pt data=ultralytics/ultralytics/cfg/datasets/wheat.yaml

精度如下:

Ultralytics YOLOv8.1.0 🚀 Python-3.9.18 torch-2.1.0+cu118 CUDA:0 (NVIDIA GeForce RTX 4090, 24210MiB)
YOLOv8_wheat summary (fused): 168 layers, 3005843 parameters, 0 gradients, 8.1 GFLOPs
val: Scanning /home/yq/aitools/datasets/wheat_det_yolo8/labels/val.cache... 675 images, 0 backgrounds, 0 corrupt: 100%|██████████| 675/675 [00:00<?, ?it/s]Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 43/43 [00:14<00:00,  3.04it/s]all        675      29351      0.915      0.878      0.938      0.555
Speed: 0.6ms preprocess, 1.6ms inference, 0.0ms loss, 1.0ms postprocess per image
Results saved to /home/yq/ultralytics/runs/detect/val17
💡 Learn more at https://docs.ultralytics.com/modes/val

四、推理

训练好了模型,可以使用如下代码实现推理,将权重放到同级目录:

from PIL import Image
from ultralytics import YOLO# 加载预训练的YOLOv8n模型
model = YOLO('best.pt')image_path = 'test.jpg'
results = model(image_path)  # 结果列表# 展示结果
for r in results:im_array = r.plot()  # 绘制包含预测结果的BGR numpy数组im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像im.show()  # 显示图像im.save('results.jpg')  # 保存图像

五、界面开发

使用pyqt5开发gui界面,支持图片、视频、摄像头输入,支持导出到指定路径,其GUI如下图(完整GUI代码可在下方链接下载):

六、代码下载

1、本文数据集下载

2、麦穗头检测系统-源码-含GUI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用emu8086实现——顺序程序设计

一、实验目的 1. 掌握顺序程序设计方法 2. 掌握汇编语言编程设计方法。 二、实验内容 1.用查表的方法将一位十六进制数转换成它相应的ASCII码。 代码及注释&#xff1a; Data segment ;定义数据段Tab db 30h,31h,32h,33h,34h,35,36h,37h,38h,39h ;定义一个Tab的字节型…

js逆向第20例:猿人学第19题乌拉乌拉乌拉

文章目录 一、前言二、定位关键参数1、JA3/TLS指纹怎么查看2、加密值长度对比三、代码实现四、参考文献一、前言 任务十九:抓取这5页的数字,计算加和并提交结果 此题在以前用python写逆向代码是存在缺陷的,直到今年有个大佬开源了curl_cffi库,并且支持 JA3/TLS 和 http2 指…

npmvue详解

1、npm是node.js的一个软件依赖包管理工具 2、当前目录下面一般会有一个package.json文件 3、npm install 会去按照package.json文件中的依赖去下载依赖包 默认会下载到当前目录中的node_modules文件夹下&#xff0c;-g会进行全局安装 4、package.json文件中有两种依赖关系 …

H7303 无电感,线性恒流,低压差,大电流,车灯/台灯 9V 12V 24V 30V

线性恒流芯片是一种用于控制电流的电子元件&#xff0c;通常用于驱动LED等器件。它的工作原理是通过维持输出电流的恒定来保持被驱动器件的亮度或功率稳定。 具体来说&#xff0c;线性恒流芯片会监测输出电流并调整电压以保持恒定的电流流过被驱动器件。以下是其基本工作步骤&…

MaxKey 单点登录认证系统——实现登录后自动跳转及分析思路

Maxkey单点登录系统集成业务系统应用之后&#xff0c;登录界面登录之后不会自动跳转业务系统&#xff0c;需要在首页点击相应应用之后&#xff0c;才能实现跳转业务系统&#xff0c;故以下本人提供解决方法和分析思路。 环境配置 本例使用的是CAS协议实现单点登录 Maxkey 服务…

企业如何做到安全又极速的分发传输大文件

在当代企业运营中&#xff0c;文件的传输和分发是至关重要的任务。然而&#xff0c;随着文件体积的增大和信息敏感性的凸显&#xff0c;企业需要找到一种既安全又能够高效传输大文件的方法。本文将深入探讨如何在企业环境中实现安全又高效的大文件传输。 一、分发大文件时需要注…

day-08 构造限制重复的字符串

思路 首先统计每个字符的个数&#xff0c;然后从后向前按照题意添加字符 解题方法 从后向前添加字符&#xff1a;1.当前字符个数<repeatLimit,直接添加 2.当前字符个数>repeatLimit,添加repeatLimit个&#xff0c;然后插入一个下一级字符 时间复杂度:O(n) 空间复杂度:…

在CentOS中,对静态HTTP服务的性能监控

在CentOS中&#xff0c;对静态HTTP服务的性能监控和日志管理是确保系统稳定运行和及时发现潜在问题的关键。以下是对这一主题的详细探讨。 性能监控 使用工具监控&#xff1a;top、htop、vmstat、iostat等工具可以用来监控CPU、内存、磁盘I/O等关键性能指标。这些工具可以实时…

【C++】map和set的模拟实现

map和set的模拟实现 插入模拟实现正向迭代器模拟实现插入完整实现map的[ ]接口模拟实现正向迭代器完整代码反向迭代器模拟实现 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 在前面几篇C的博客&#xff0c;讲过了二叉搜索树&#xff0c;AVL树&#xff0c;红黑…

Halcon边缘滤波器edges_image 算子

Halcon边缘滤波器edges_image 算子 基于Sobel滤波器的边缘滤波方法是比较经典的边缘检测方法。除此之外&#xff0c;Halcon也提供了一些新式的边缘滤波器&#xff0c;如edges_image算子。它使用递归实现的滤波器&#xff08;如Deriche、Lanser和Shen&#xff09;检测边缘&…

Android中集成FFmpeg及NDK基础知识

前言 在日常App开发中,难免有些功能是需要借助NDK来完成的,比如现在常见的音视频处理等,今天就以ffmpeg入手,来学习下Android NDK开发的套路. JNI和NDK 很多人并不清除JNI和NDK的概念,经常搞混这两样东西,先来看看它们各自的定义吧. JNI和NDK 很多人并不清除JNI和NDK的概念…

成就动机测试

成就动机测试广泛应用在职业发展领域&#xff0c;如&#xff1a;企业Hr人力资源管理部门&#xff0c;用于评估分析员工的潜能和价值&#xff0c;适用场景有人才招聘&#xff0c;岗位晋升&#xff0c;绩效考评等等。在大学生做职业规划&#xff0c;求职应聘中&#xff0c;应用成…

【python】基础知识类的语法功能讲解

Python代码定义了一个名为Calculation的类&#xff0c;用于执行基础的数学运算&#xff08;加法、减法、乘法、除法和取模&#xff09;。下面我将详细解释各个部分的功能&#xff0c;并以列表形式总结&#xff1a; 类定义&#xff1a; class Calculation: 定义了一个名为Cal…

CMake在静态库中链接动态库

hehedalinux:~/Linux/multi-v3$ tree . ├── calc │ ├── add.cpp │ ├── CMakeLists.txt │ ├── div.cpp │ ├── mult.cpp │ └── sub.cpp ├── CMakeLists.txt ├── include │ ├── calc.h │ └── sort.h ├── sort │ ├── …

SpringBoot项目里用MultipartFile作为入参获取到的file为什么null

前言&#xff1a; 最近在项目中用到了Excel模板导入功能&#xff0c;但是在测试阶段用Postman测试时&#xff0c;通过Post请求&#xff0c;传到后端的File一直为null。其中前端传参和请求都没问题&#xff0c;后端的接参也没问题&#xff0c;问题出在过滤器的复用上。 问题场…

外包干了5个月,感觉技术退步明显......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四…

Spring Security入门

目录 1.简介 与shiro对比 添加依赖 执行流程 2.UserDetailsService User实现类 3.PasswordEncoder BCryptPasswordEncoder 4.自定义登录逻辑 5.自定义登录界面 6.设置请求账户和密码的参数 7.自定义登陆处理器 成功 失败 8.判断 权限判断 角色判断 …

navicat for oracle

前言 Oracle中的概念并不是创建数据库&#xff0c;而是创建一个表空间&#xff0c;然后再创建一个用户&#xff0c;设置该用户的默认表空间为我们新创建的表空间&#xff0c;这些操作之后&#xff0c;便和你之前用过的mysql数据库创建完数据库一模一样了。 创建数据库 使用O…

Error: Failed to download template from registry: fetch failed

第一次构建Nuxt项目时&#xff0c;出现在这样的错误&#xff01;&#xff01;&#xff01; 如果你也是这样得错误&#xff0c;修改hosts也没用。我试了 是因为你的npm安装了其他镜像源&#xff0c; 这个时候你就需要手动下载了&#xff1a; web端访问&#xff1a; https://ra…

Himawari-8 数据下载【利用FTP】

1 波段介绍 2 注册 数据下载之前&#xff0c;必须进行注册 JAXA Himawari Monitor | Registration 注册后&#xff0c;在邮箱里点击同意 邮箱会给出FTP的账号信息 3 下载FTP软件 点击进行新站点的新建 设置刚才邮箱里的主机、用户和密码 选择远程站点&#xff0c;选择自己…