YOLOv8+SwanHub+作物检测:从可视化训练到Demo演示

1. 项目介绍

        本项目旨在利用先进的YOLOv8深度学习模型对麦穗进行高效、准确的检测。我们采用了GlobalWheat数据集,该数据集包含丰富的麦穗图像,为模型的训练提供了有力的数据支持。通过该实验,实现高准确率的麦穗识别,为农业生产提供智能化的监测手段。这一项目将有助于农民更准确地评估作物生长状况,优化种植策略,提高农业生产的效率和质量。

        YOLOv8是目标检测领域的一款先进模型,它继承了YOLO系列的核心思想,即一次性对整个图像进行预测以实现快速目标检测。该模型在多个尺度上提供了不同大小的模型(N/S/M/L/X),以满足不同场景的需求。本实验采用YOLOv8n进行实验。

        Swanhub是由极客工作室开发的一个开源模型协作分享社区。它为AI开发者提供了AI模型托管、训练记录、模型结果展示、API快速部署等功能。

  • YOLOv8模型:GitHub - YOLOv8 

        SwanHub:SwanHub - 创新的AI开源社区

        SwanLab:SwanLab - 在线AI实验平台

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

2. 准备

2.1 安装python库

安装以下4个库

torch>=2.0.0 torchvision>=0.15.1 swanlab>=0.2.4 gradio>=3.50.2

安装命令:

pip install torch>=2.0.0 torchvision>=0.15.1 swanlab>=0.2.4 gradio>=3.50.2

2.2 下载数据集

案例(全球麦穗数据集GlobalWheat):链接:https://pan.baidu.com/s/1HZB4na0q3u94CJyWVnRyZw 

提取码:2g3n

GlobalWheat
--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

它们各自的作用与意义:

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

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

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

2.3 下载YOLOv8模型

模型链接:https://github.com/ultralytics/ultralytics

解压后得到ultralytics-main文件夹,并安装ultralytics库,命令如下:

pip install ultralytics

2.4 创建文件目录

在ultralytics-main文件夹中创建app.py,main.py,将GlobalWheat文件夹导入,并在GlobalWheat文件夹中创建wheat.yaml

它们各自的作用分别是:

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

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

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

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

3. 训练部分

3.1 模型训练

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

具体代码:

from ultralytics import YOLOif __name__ == '__main__':# 模型训练model = YOLO("ultralytics/cfg/models/v8/yolov8.yaml")model.load()model.train(data="./GlobalWheat2020/wheat.yaml", epochs=50, imgsz=640)

3.2 初始化SwanLab 

SwanLab是一个类似Tensorboard的开源训练图表可视化库,有着更轻量的体积与更友好的API,除了能记录指标,还能自动记录训练的logging、硬件环境、Python环境、训练时间等信息。

设置初始化配置参数:SwanLab库使用swanlab.init设置实验名、实验介绍、超参数等。 

import swanlab
import torchif __name__ == '__main__':num_epochs = 50lr = 0.01batch_size = 16num_classes = 1# 设置devicetry:use_mps = torch.backends.mps.is_available()except AttributeError:use_mps = Falseif torch.cuda.is_available():device = "cuda"elif use_mps:device = "mps"else:device = "cpu"# 初始化swanlabswanlab.init(experiment_name="yolov8", # 设置实验名description="Train yolov8.", # 设置实验介绍# 记录超参数config={"model" : "yolov8","optim" : "Adam","lr" : lr,"batch_size" : batch_size,"num_epochs" : num_epochs,"num_class" : num_classes,"device" : device,})

3.3 跟踪关键指标

swanlab库使用swanlab.log来记录关键指标。

例如:跟踪YOLOv8训练时的损失值,在ultralytics-main/ultralytics/engine/trainer.py中加入如下代码:

# 在trainer.py第一行加入
import swanlab# 在trainer.py355行代码后加入
swanlab.log({"train_loss": self.loss_items[0]})

3.4 main.py完整代码

根据上述模型训练和SwanLab初始化,编写main.py内容。

from ultralytics import YOLO
import swanlab
import torchif __name__ == '__main__':num_epochs = 50lr = 0.01batch_size = 16num_classes = 1# 检测是否支持mpstry:use_mps = torch.backends.mps.is_available()except AttributeError:use_mps = False# 检测是否支持cudaif torch.cuda.is_available():device = "cuda"elif use_mps:device = "mps"else:device = "cpu"# 初始化swanlabswanlab.init(experiment_name="yolov8",description="Train yolov8.",config={"model" : "yolov8","optim" : "Adam","lr" : lr,"batch_size" : batch_size,"num_epochs" : num_epochs,"num_class" : num_classes,"device" : device,})# 模型训练model = YOLO("ultralytics/cfg/models/v8/yolov8.yaml")model.load()model.train(data="./GlobalWheat2020/wheat.yaml", epochs=50, imgsz=640, device="cuda")

 3.5 开始训练

 运行main.py文件:

 在训练开始后,ultralytics-main目录下会多一个swanlog文件夹,里面存放着训练过程数据。在训练结束后,打开终端,输入swanlab watch --logdir swanlog开启SwanLab实验看板:

点击http:127.0.0.1:5092,将在浏览器中看到实验看板。

默认页面是Project DashBoard,包含了项目信息和一个对比实验表格。

点击实验,会看到train_loss整体的变化曲线:

同时,可以点击Experiment Card、Logs、Environment

至此,完成了对YOLOv8模型的训练,以及对关键指标进行了追踪,得到了一个关于麦穗检测的权重文件,在runs/detect/train/weights目录下。

3.6 实验过程对比与分析

1. 了解GlobalWheat2020数据集之后,发现该数据集较大,训练时间会较长;如果epoch设置过多,可能会出现过拟合现象,而且导致不必要的资源浪费。因此,为了找到较为合适的epcoh,本实验首先预设epoch为10(较小)进行训练。epoch = 10时,通过使用swanlab对训练结果进行可视化后,可以得到检测任务中最重要的两个指标mAP50和mAP50-95分别为0.7565和0.3769;在chart中,train_loss虽然在整体趋势上收敛,但是在后段还是会出现部分起伏;而Mean Precision,Mean Recall,mAP50,mAP50-95,虽然在后段显示平稳趋势,但是在曲线前半部分均出现了平稳情况,但是整体趋势还是在保持上升,综上分析,说明epoch较小。

2. 根据以上结论,分析可得模型训练时设置的epoch较小,曲线趋势还没有稳定,因此,设置epoch为50,进行实验。结果如图所示,在epoch为50时,检测指标mAP50和mAP50-95分别为0.881和0.4785。相较于epoch为10,mAP50和mAP50-95分别增长了0.1245和0.1016。这说明将epoch调大,提高了模型的检测精度。如chart图所示,相较于epoch=10的chart图,train_loss不仅整体为下降趋势,而且在后段曲线的起伏更小;Mean Precision、Mean Recall、mAP50、mAP50-95也逐渐在趋于稳定。

3. 由于设置epoch为50时,检测指标在后段都开始逐渐趋于稳定,因此,为了使检测指标Precision、Recall、mAP50,mAP50-95保持较为稳定的状态,本实验将epoch调至100,如图所示为训练后的结果。结果显示,当epoch=100时,mAP50和mAP50-95分别为0.8953和0.4889,相较于epoch=50都有所上升;并且,通过对训练损失曲线、Precision、Recall、mAP50和mAP50-95曲线的观察可知,损失曲线基本保持不变,而其他检测指标在曲线后段都已处于稳定状态,已没有明显的上升趋势,因此,本实验得出结论,在该数据集上,实验设置epoch为100为较优选择。

3.7 swanlab.Image()的使用

在YOLOv8中采用swanlab.Image()可以可视化训练后的效果图。

在train.py中,加入以下代码,首先初始化swanlab,在通过训练权重进行预测,即可得到检测效果图。


from ultralytics import YOLO
import swanlab
import torchif __name__ == '__main__':num_epochs = 10lr = 0.01batch_size = 16num_classes = 1# 设置deviceif torch.cuda.is_available():device = "cuda"else:device = "cpu"# 初始化swanlabswanlab.init(experiment_name="yolov8",description="Train yolov8.",config={"model": "yolov8","optim": "Adam","lr": lr,"batch_size": batch_size,"num_epochs": num_epochs,"num_class": num_classes,"device": device,})model = YOLO("runs/detect/train855/weights/best.pt") model.predict(source="dataset/images/val_dataset", save=True)

使用swanlab.Image()进行可视化。在YOLOv8的predictor.py文件中,加入以下代码,所添加位置如图所示。

import swanlabimages_list = []
images_list.append(swanlab.Image(self.plotted_img))
swanlab.log({"Image": images_list})

添加完成后运行,运行结束后,在终端输入:swanlab watch --logdir ./swanlog,即可得到检测结果的可视化图,如下图所示。

4. Gradio演示并上传至Swanhub

4.1 Gradio演示

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

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

import gradio as gr
from PIL import Image
from ultralytics import YOLOdef predict_image(img):model = YOLO('./runs/detect/train/weights/best.pt')results = model.predict(source=img, conf=0.25)im_array = results[0].plot()pil_img = Image.fromarray(im_array[..., ::-1])return pil_imgif __name__ == '__main__':# 创建Gradio界面iface = gr.Interface(fn=predict_image,inputs=gr.Image(type='pil'),outputs='image',examples=["./GlobalWheat/images/validation/00bb861c1f4e7dacc4f04ecd0092e348bc08d408d1d98029126adf290b39f3af.jpg"],title="wheat detection",description="Upload an image to detect objects using Yolov8")# 启动界面iface.launch()

运行app.py后,可得到链接http://127/0.0.1:7860,点击打开

点击图片,再点击Submit,即可得到检测结果,如下图所示。

4.2 上传至Swanhub

Swanhub是由极客工作室开发的一个开源模型协作分享社区。它为AI开发者提供了AI模型托管、训练记录、模型结果展示、API快速部署等功能。https://swanhub.co/

4.2.1 注册登录Swanhub

https://swanhub.co/

4.2.2 创建仓库

根据SwanHub开源社区创建自己的仓库。点击创建仓库。

输入仓库名: Wheat_ear_detection。仓库描述:基于YOLOv8模型对麦穗进行检测,使用数据集为GlobalWheat2020。是否公开:公开。

创建文档:针对该项目创建相应的文档。主要包括:项目简介、功能特性、环境要求、效果展示等。

4.2.3 上传代码

将代码上传(建议最好不要将整个数据集一起上传,由于数据集很大会导致上传速度变慢,可以将GlobalWheat文件夹替换为Images文件夹,其中放部分展示图片即可。)

打开项目所在文件夹,右键,打开Open Git Bash here

git init  # 初始化仓库
git config user.name "***"  # 配置git的用户名
git config user.email "***.com" # 配置git的用户邮箱
git add . # 将项目添加到暂存区(全部代码)
git commit -m "first commit" # 添加注释(第一次提交)
git branch -M main # 进入主分支
# 添加远程仓库地址
git remote add origin https://swanhub.co/wooyeon/Wheat_ear_detection.git
git push -u origin main # 将项目上传到远程仓库

4.2.4 创建演示空间

选择Gradio、Aliyun、CPU on;y - 2 vCPU 8GB - 免费,点击创建。

配置Python环境:PyTorch、Pytorch 2.0.0、Python3.8,并补充对应环境Gradio、swanlab、ultralytics。点击开始构建,提示成功即可。

Demo演示:

注意:如果在后续对代码,或者配置环境有所修改,都需要点击演示空间右上角绿色按钮(更新demo),根据自己情况,如果只修改了代码,直接更新即可。

5. 参考文章

PyTorch+SwanLab+Gradio+猫狗分类:轻松从可视化训练到Demo网站_gradio和pytorch-CSDN博客

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

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

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

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

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

相关文章

Webpack: 如何借助预处理器、PostCSS 等构建现代 CSS 工程环境

概述 在开发 Web 应用时,我们通常需要编写大量 JavaScript 代码 —— 用于控制页面逻辑;编写大量 CSS 代码 —— 用于调整页面呈现形式。问题在于,CSS 语言在过去若干年中一直在追求样式表现力方面的提升,工程化能力薄弱&#xff…

Studio One 6.6.2中文破解版安装图文激活教程

Studio One 6.6.2中文破解版做为新生代音乐工作站,凭借更低的价格和完备的功能,获得了音乐人和直播行业工作者的青睐,尤其是对硬件声卡的适配支持更好,特别适合用来配合线上教学和电商带货。 最近网上出现不少关于StudioOne不能用…

html侧导航栏客服栏

ico 替换 ICO <html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"><title>返回顶部</title><script src"js/jquery-2.0.3.min.js"…

基于 ESP8266 和 MQ 气体传感器的微信告警系统设计与实现

接线: ESP8266MQ3vVCCGND GND A0 A0微信通知截图: 摘要:本文主要探讨了一种利用 ESP8266 微控制器与 MQ 气体传感器构建的气体检测微信告警系统。详细阐述了系统的硬件组成、软件设计以及与微信平台的交互机制。通过该系统,能够实时监测环境中的气…

VPS搭建论坛和社区网站有哪些优势?

想象一下&#xff1a;您已经建立了一个论坛。这是您的骄傲和喜悦——一个熙熙攘攘的在线多人广场&#xff0c;人们聚集在这里不仅可以聊天&#xff0c;还可以交流、分享和辩论。不过突然出现下面这些情况&#xff0c; 页面加载需要很长时间&#xff1b;光标不停旋转。会员流失…

【ai】tx2 nx: trition client安装nvidia-pyindex 一直失败

系统版本的pip和python虚拟环境的pipyolov4-triton-tensorrt的master分支 官方client jetson:pip3 install --user nvidia-pyindex 不成功啊 这个是让nvidia-pyindex 拉取nvidia@tx2-nx:~$ pip3 install --user nvidia-pyindex Collecting nvidia-pyindexDownloading https://…

STL——常用算法(二)

一、常用拷贝和替换算法 1.copy #include <iostream> #include <vector> #include <algorithm> using namespace std; void printVector(int val) {cout << val << " "; } void test01() {vector<int>v1;for (int i 0; i <…

【仿真】UR机器人相机标定、立体标定、手眼标定、视觉追踪(双目)

实现在CoppeliaSim环境中进行手眼标定和目标追踪的一个例子。它主要涉及到机器人、机器视觉和控制算法的编程&#xff0c;使用了Python语言。接下来对该代码的主要类和方法进行解析&#xff1a; 1. 导入相关库 用于与CoppeliaSim模拟器通过ZeroMQ接口通信。包含Rotation类&…

SF-YOLOv5——基于改进的特征融合模式的轻量级小目标检测算法

概述 提出了一种改进的YOLOv5模型&#xff0c;名为Small-Fast-YOLOv5 (SF-YOLOv5)&#xff0c;专门用于小目标检测。通过合理裁剪大目标检测层的特征图输出&#xff0c;显著减少了模型所需的计算资源&#xff0c;使模型变得更加轻量级。 还提出了一种改进的特征融合方法&#…

CV每日论文--2024.6.24

1、Whiteboard-of-Thought: Thinking Step-by-Step Across Modalities 中文标题&#xff1a;思维白板&#xff1a;跨模式逐步思考 简介&#xff1a;这段话描述了一种利用思维白板提示来增强大型语言模型在视觉推理任务中的性能的方法。 人类在解决需要视觉思考的问题时,通常会…

英语口语练习评测的开发实现

英语口语评测是一个复杂的系统&#xff0c;需要综合考虑语音识别、语音评测、自然语言处理等多种技术。以下是一些常见的英语口语评测开发框架。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 基于语音识别的口语评测框架这种框架主要…

第28课 绘制原理图——绘制导线

概述 放置完元器件之后&#xff0c;接着就要用导线将元器件的管脚一个一个连起来了。 绘制导线的方法 点击快速工具条上的“线”命令&#xff0c;进入绘制导线的过程。 点击选择某个管脚或电源端口&#xff0c;作为导线的起始端。 再点击选择另一个管脚或电源端口&#xff0c…

React@16.x(40)路由v5.x(5)常见应用场景(2)- 实现类似 vue 的路由模式

目录 1&#xff0c;vue-router2&#xff0c;React 模拟实现 1&#xff0c;vue-router vue 的路由配置文件&#xff0c; // src/router/index.ts const routes [{path: "/news",children: [{ path: "", component: NewsView },{ path: "detail"…

瞄准Windows的新兴僵尸网络:Kraken

2021 年 10 月&#xff0c;ZeroFox Intelligence 披露了名为 Kraken 的僵尸网络。Kraken 通过 SmokeLoader 进行传播&#xff0c;每次更新攻击基础设施时都会扩大规模。尽管与 2008 年发现的 Kraken 僵尸网络同名&#xff0c;但二者并没有其他共同点。 功能 自从 2021 年 10 …

养殖自动化通风系统:未来畜牧业的智能守护者

在现代畜牧业中&#xff0c;养殖环境的控制对于动物的健康成长和养殖业者的成功至关重要。养殖自动化通风系统凭借其先进技术和精密设备&#xff0c;实现了对养殖场内环境条件的精准调控&#xff0c;显著提升了养殖效率和动物福利。本文将深入探讨养殖自动化通风系统的必要性、…

Talking Web

1. curl 1.1 http curl http://127.0.0.1:80 向目标主机端口发送http请求 1.2 httphead curl -H “Host: 18ed3df584cd48328b5839443aa7b42b” http://127.0.0.1:80 1.3 httppath curl http://127.0.0.1:80/853c64cd218f80d0a59665666fb2ab80 1.4 URL编码路径 &#xff0…

天天大爆推文玩法营销号软件下载地址

天天大爆推文玩法营销号软件下载地址 天天大爆推文玩法营销号是一种营销策略&#xff0c;通过在社交媒体上发布频繁的推文来吸引关注和增加品牌曝光度。以下是一些可以用于天天大爆推文玩法营销号的策略&#xff1a; 营销号工具使用教程&#xff1a;https://iimenvrieak.feis…

数据结构之前缀树

写在前面 源码 。 前缀树&#xff0c;又叫做trie树&#xff0c;字典树&#xff0c;是一种多叉的树&#xff0c;一般用于单词前缀匹配的相关场景中&#xff0c;比如&#xff1a; 本文看下使用Java如何来实现这种数据结构。 1&#xff1a;基本介绍 思想&#xff1a;空间换时…

C++基础编程100题-014 OpenJudge-1.3-12 计算球的体积

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/12/ 描述 对于半径为r的球&#xff0c;其体积的计算公式为$ V4/3*πr^3 $&#xff0c;这里取π 3.14。 现给定r&#xff0c;求V。 输入 输入为一个不超过100的非负实数&#xff0c;即球半径&#xff0…

FL Studio 21 集成了音频剪辑和增益控制,你可以更快、更精确地控制音频电平,包括自动交叉淡入淡出及更多功能

以通过控制色调、饱和度、亮度、文本、仪表和步进序列器的颜色来改变你的DAW外观&#xff0c; DAW“情绪主题”控制&#xff0c;水果编曲将变得与众不同。 更快的音频编辑 FL Studio 21 集成了音频剪辑包络和增益控制&#xff0c;你可以更快、更精确地控制音频电平&#xff0c…