作物检测:YOLOv8+SwanLab

1. 项目介绍

基于深度学习的作物检测通过精准管理和数据驱动决策,能够提高作物产量和质量,优化农业资源利用,推动农业自动化进程,从而保障粮食安全。目前,作物检测领域大多针对单类作物进行检测。因此,本项目基于SwanLab,使用YOLOv8模型实现对多类农作物(小麦、玉米、水稻、辣椒、甜菜苗、棉铃)的检测。通过该项目,不仅可以学习到YOLOv8模型对自定义数据集的检测,而且还可以深入了解SwanLab工具的作用。

YOLOv8是Ultralytics团队在2023年1月份提出的,是一种尖端的,最先进的(SOTA)模型,建立在以前的YOLO版本的成功基础上,并引入了新的功能和改进,以进一步提高性能和灵活性。YOLOv8旨在快速,准确,易于使用,使其成为广泛的目标检测和跟踪,实例分割,图像分类和姿态估计任务的绝佳选择。

SwanLab是一款开源、轻量级的AI实验跟踪工具,通过提供友好的API,结合超参数跟踪、指标记录、在线协作等功能,提高ML实验跟踪和协作体验。欢迎使用SwanLab | SwanLab官方文档

Gradio是一个开源的Python库,旨在帮助数据科学家、研究人员和从事机器学习领域的开发人员快速创建和共享用于机器学习模型的用户界面。

  • YOLOv8模型:https://github.com/ultralytics/ultralytics

  • SwanLab工具:https://swanlab.cn

  • Gradio:https://github.com/gradio-app/gradio

项目团队:新疆大学大数据挖掘和智能计算实验室

2. 准备部分

2.1 环境安装

安装以下3个库

ultralytics swanlab gradio

安装命令:

pip install ultralytics swanlab gradio

2.2 下载数据集

多类作物数据集(小麦、玉米、水稻、辣椒、甜菜苗、棉铃):链接:作物数据集

提取码:2g3n

crops 
--images 
----train 
------1.jpg 
------2.jpg 
----test 
------1.jpg 
------2.jpg 
----vaildation 
------1.jpg 
------2.jpg 
--labels 
----train 
------1.txt 
------2.txt 
----test 
------1.txt 
------2.txt 
----vaildation 
------1.txt 
------2.txt

它们各自的作用与意义:

  • crops文件夹:该文件夹用于存储图片文件夹images与标签文件夹labels

  • images文件夹:该文件夹用于保存训练、测试、验证图片文件夹。

  • labels文件夹:该文件夹用于保存训练、测试、验证标签文件夹。

2.3 下载YOLOv8模型

模型链接:YOLOv8模型

解压后得到ultralytics-main文件夹。

2.4 创建文件目录

在ultralytics-main文件夹中创建app.py,train.py,predict.py,将crops文件夹导入,并在crops文件夹中创建crop.yaml

它们各自的作用分别是:

  • crops:这个文件夹用于存储数据集

  • train.py:用于训练YOLOv8模型的脚本

  • predict.py:用于推理YOLOv8模型的脚本

  • app.py:运行Gradio Demo的脚本

  • crop.yaml:保存数据集中训练、测试、验证集的绝对路径,以及类别。

3. 训练部分

3.1 模型训练

首先将yolov8.yaml文件导入模型,再进行模型训练。其中,data代表数据集路径crop.yaml,epoch代表训练次数,imgsz表示图片输入尺寸,batch表示批量大小。

from ultralytics import YOLO
from swanlab.integration.ultralytics import add_swanlab_callback
import swanlabdef main():swanlab.init(project="YOLOv8_Crop_Detection", experiment_name="YOLOv8n",)model = YOLO("ultralytics/cfg/models/v8/yolov8n.yaml")add_swanlab_callback(model)model.train(data="./crops/crop.yaml", epochs=100, imgsz=640, batch=16)
if __name__ == "__main__":main()

在运行train.py时,如果是第一次使用swanlab,则需要在swanlab官网注册账号,在用户设置界面复制API Key,然后在控制台输入swanlab login,将API Key粘贴即可登录。

3.2 SwanLab实时查看

训练过程实时查看:作物检测-swanlab

yolov8结合swalab训练过程详细信息如图所示。

分别使用yolov8n和yolov8s两个模型进行实验,epoch=100,通过下图可以轻松对比出两种模型间的训练结果。在相同条件下,yolov8s模型的指标相对更好。

 3.3 SwanLab使用小指南

新手在刚接触swanlab时,可能不太了解swanlab中的一些简单部件以及如何更快捷的使用。以下将会对swanlab界面中的一些常用部件以及功能进行简单介绍。

3.3.1 创建项目

创建项目:在swanlab.init中进行创建,其中,project为项目名称。

3.3.2 删除项目中的某个或多个实验

点击如图所示小方框即可删除实验。

3.3.3 终止实验

在实验中可能会出现终止实验的情况,如上图YOLOv8n_Jun06_21-30-14实验正在运行,点击进入实验;如图所示,点击“运行中”后的终止按钮即可。

3.3.4 图表视图

在实验过程中,可能需要对多次实验的训练进行对比,swanlab的图表视图可以方便的展示多次实验的训练情况。

值得注意的是,在对比时可能只需对特定的某几个实验进行比较,因此就需要进行选择,如下图所示。

4. 推理部分

from ultralytics import YOLO# 载入训练好的模型
model = YOLO("./best.pt")
model.predict(source="crops/images/test", save_txt=True)

5. Gradio演示

在创建的app.py中编写如下代码:

import gradio as gr
from ultralytics import YOLO
from PIL import Imagedef yolov8_inference(model_name: gr.inputs.Dropdown = "best.pt(1)",image: gr.inputs.Image = None,image_size: gr.inputs.Slider = 640,conf_threshold: gr.inputs.Slider = 0.25,iou_threshold: gr.inputs.Slider = 0.45,
):"""YOLOv8 inference functionArgs:image: Input imagemodel_name: Name of the modelimage_size: Image sizeconf_threshold: Confidence thresholdiou_threshold: IOU thresholdReturns:Rendered image"""global modelmodel_name_true = model_name.split("(")[0]model = YOLO(model_name_true)model.overrides["conf"] = conf_thresholdmodel.overrides["iou"] = iou_thresholdresults = model.predict(source=image, imgsz=image_size)im_array = results[0].plot()pil_img = Image.fromarray(im_array[..., ::-1])return pil_imgif __name__ == "__main__":model_name = ["best.pt(1)", "yolov8.pt"]inputs = [gr.inputs.Radio(model_name, label="选择模型权重", default="best.pt(1)"),gr.Image(type="filepath", label="Input Image"),gr.Slider(minimum=320, maximum=1280, value=640, step=32, label="Image Size"),gr.Slider(minimum=0.0, maximum=1.0, value=0.25, step=0.05, label="Confidence Threshold"),gr.Slider(minimum=0.0, maximum=1.0, value=0.45, step=0.05, label="IOU Threshold"),]outputs = gr.Image(type="filepath", label="Output Image")title = "Crop detection and counting"examples = [["best.pt(1)", "./image/wheat.jpg",  640, 0.25, 0.45],["best.pt(1)", "./image/maize.jpg", 640, 0.25, 0.45],["best.pt(1)", "./image/rice.jpg", 640, 0.25, 0.45],["best.pt(1)", "./image/chili.jpg", 640, 0.25, 0.45],["best.pt(1)", "./image/beet.jpg", 640, 0.25, 0.45],["best.pt(1)", "./image/cotton.jpg", 640, 0.25, 0.45],]# 创建Gradio界面demo_app = gr.Interface(fn=yolov8_inference,inputs=inputs,outputs=outputs,title=title,examples=examples,theme=gr.themes.Base())# 启动界面demo_app.launch(share=True)

运行程序后,会出现以下输出:

点击链接,则为作物检测的Demo页面

具体检测效果也可在Swanhub上进行查看。SwanHub作物检测演示

6. 参考文章

Ultralytics x SwanLab:可视化YOLO模型训练_yolov10 ultralytics-CSDN博客

SwanLab入门深度学习:YOLOv8自定义数据集检测_swamlab训练yolo-CSDN博客 

YOLOv8猫狗检测:从SwanLab可视化训练到Gradio Demo网站_yolov8 可视化训练软件-CSDN博客

YOLOv8(Ultralytics)集成SwanLab进行训练监控和可视化_swanlab yolov8-CSDN博客​​​​​​​

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

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

相关文章

SDIO学习(2)--SD卡 2.0协议

本文参考文档: 《SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00》 1 SD卡简介 1.1 SD卡概念 1.2 SD卡外形和接口 Clk:时钟线,由SDIO主机产生 CMD:命令控制线,SDIO主机通过改…

AI技术在现代社会中的广泛应用及其影响

目录 前言: 一、AI技术在医疗领域的应用 二、AI技术在教育领域的应用 三、AI技术在工业领域的应用 四、AI技术在金融领域的应用 五、AI技术在生活领域的应用 前言: 随着科技的不断发展,人工智能(AI)技术逐渐成为人…

基于C++标准库实现定时器类

基于C标准库实现定时器类 定时器类是多线程编程中经常设计到的工具类 简单的定时器原理其实很简单(是不是有点GNU is not unix的味道;): 创建一个新线程在那个线程里等待等待指定时长后做任务 python标准库中就有这么一个定时器类&#xf…

iOS Swift5 视频播放 能播放各种编码格式的视频的第三方库

1.VLC for ios: MobileVLCKit VLC for ios - github 2.IJKPlayer: IJKMediaFramework 基于 FFmpeg IJKPlayer - github

升级!升级!升级!MobPush基础标签推送全新升级,助力开发者精细化运营

“广播推送点击率不高,会员转化差” “新用户拉新后留存不高,次留、3日留存不达标” “用户的复购较低,黏性不高,导致GMV未达预期” 我们总是会听到运营人员关于目标达成过程中遇到这样或者那样的问题。这些问题汇总起来就回到…

vue3 el-table手动选中某一行、设置默认选中某一行

选中某一行用的是el-table的toggleRowSelection方法&#xff0c;用来切换某一行的选中状态 <template><el-table :data"tableData" ref"myTable" selection-change"handleSelectionChange"><el-table-column type"selectio…

STM32 HAL库 外部中断 实现按键控制LED亮灭

目录 1、为什么使用GPIO外部中断控制LED亮灭&#xff1f; 2、NVIC嵌套向量中断控制器 3、EXTI外部中断 4、项目的硬件排线 5、STM32CUBE_MX配置 6、HAL库代码 7、实际效果 1、为什么使用GPIO外部中断控制LED亮灭&#xff1f; 实现LED亮灭控制有很多方式&#xff0c;其中…

公文出错事非小,这些公文写作的常见错误,你中过招吗?

公文是企事业单位、相关部门内外沟通交流的重要工具&#xff0c;不少“笔杆子”经常需要与公文打交道&#xff0c;每天会接触大量的公文。然而在公文撰写的细微之处&#xff0c;稍有不慎&#xff0c;便可能犯下一些常见的错误。这些错误如同蚁穴&#xff0c;虽小却足以破坏公文…

YAML文件格式详解及应用

YAML文件格式详解及应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 什么是YAML&#xff1f; YAML&#xff08;YAML Ain’t Markup Language&#xff09;…

stm32cubemx,adc采样的几种方总结,触发获取adc值的方法dma timer trigger中断

stm32cubemx adc采样的几种方总结&#xff0c;触发获取adc值的方法 timer trigger中断 方法1&#xff0c;软件触发方法2&#xff1a;,Timer触发ADC采集通过DMA搬运 触发获取adc值的方法 Regular Conversion launched by software 软件触发 调用函数即可触发ADC转换 Timer X Cap…

悲观锁、乐观锁与分布式锁详解及Redisson应用

目录 1. 悲观锁&#xff08;Pessimistic Lock&#xff09;2. 乐观锁&#xff08;Optimistic Lock&#xff09;3. Redis分布式锁4. Redisson锁 在多线程或多进程环境下&#xff0c;为了保证数据的一致性&#xff0c;锁机制扮演着至关重要的角色。本文将深入探讨悲观锁、乐观锁的…

使用Python进行数据分析

哈喽,大家好,我是木头左! 14.1 Python在数据分析中的优势 Python作为一种简单易学、功能强大的编程语言,已经成为了数据分析领域的首选工具。它的优势主要体现在以下几个方面: 简洁高效:Python语法简洁明了,易于阅读和编写,能够快速实现复杂的数据分析任务。丰富的库支…

Python基于逻辑回归分类模型、决策树分类模型、LightGBM分类模型和XGBoost分类模型实现车辆贷款违约预测项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着经济的发展和人民生活水平的提高&#xff0c;汽车消费在居民消费中所占比例逐渐增加&#xff0c;汽…

克服指标管理痛点,实现数据价值最大化

在当下的企业管理中&#xff0c;由于数据量的激增&#xff0c;管理方式逐渐从基于经验转向基于数据。在此过程中&#xff0c;我们能够通过数据探查业务情况、分析数据&#xff0c;从而获取更优的决策支持数据。这通常通过数据报表或分析平台来实现&#xff0c;对于临时性场景&a…

vue2组件内部获取路由前后变化

问题&#xff1a; 在账户列表页面&#xff0c;需要检测路由变化进行拉取用户数据&#xff0c;不在mounted里面写&#xff0c;就是要检测路由变化并且要获取前后路由的路径&#xff0c;进行一些逻辑的判断 解决&#xff1a; export default {data() {return {user: "&qu…

Feign调用异常

TimeLimiter SuperCareAPI#originalWave(String,String) recorded a timeout exception. 解决方案&#xff1a; 针对超时的接口设置响应时间 feign:client:config:default:connect-timeout: 500000000read-timeout: 500000000 resilience4j:timelimiter:instances:SuperCare…

护眼大路灯哪个牌子好用?五款好用的护眼灯分享

护眼大路灯哪个牌子好用&#xff1f;现在的孩子从幼儿园开始就开始学习&#xff0c;面临的用眼压力就很大&#xff0c;但想要孩子视力不受影响&#xff0c;大路灯是得好好安排起来&#xff0c;但动辄大几千的护眼灯真是让我们这些普通家庭的家长望而却步&#xff0c;有没有好用…

ruoyi-cloud部署过程遇到的问题总结

nacos启动失败 1.集群cluster模式改为单机standalone 修改bin/startup.cmd文件 set MODE"cluster" 改为 set MODE"standalone" 2.密钥长度不够“the length of secret key must great than or equal 32 bytes; ” 转到官网查看一些配置&#xff0c;发现…

控制系统稳定性常见策略

提升控制系统稳定性是确保系统可靠运行的关键&#xff0c;以下是一些常见策略&#xff1a; 1. 控制算法优化 优化控制算法是提升系统稳定性的核心方法之一。常见的控制算法包括PID控制、模糊控制、自适应控制等。通过调整和优化这些算法的参数&#xff0c;可以显著提高系统的…

FITC-链霉亲和素在生物成像技术中的应用

生物成像技术是现代生物学和医学研究中的工具之一&#xff0c;它使得研究者能够直观地观察和了解生物体内部的结构和功能。其中&#xff0c;荧光成像技术因其高灵敏度和高分辨率而受应用。FITC-链霉亲和素作为一种荧光标记试剂&#xff0c;在生物成像技术中发挥着作用。 FITC-…