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

news2025/2/24 10:02:03

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 YOLO

if __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 torch

if __name__ == '__main__':

    num_epochs = 50
    lr = 0.01
    batch_size = 16
    num_classes = 1

    # 设置device
    try:
        use_mps = torch.backends.mps.is_available()
    except AttributeError:
        use_mps = False

    if torch.cuda.is_available():
        device = "cuda"
    elif use_mps:
        device = "mps"
    else:
        device = "cpu"

    # 初始化swanlab
    swanlab.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 torch

if __name__ == '__main__':

    num_epochs = 50
    lr = 0.01
    batch_size = 16
    num_classes = 1

    # 检测是否支持mps
    try:
        use_mps = torch.backends.mps.is_available()
    except AttributeError:
        use_mps = False
    # 检测是否支持cuda
    if torch.cuda.is_available():
        device = "cuda"
    elif use_mps:
        device = "mps"
    else:
        device = "cpu"

    # 初始化swanlab
    swanlab.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 torch

if __name__ == '__main__':
    num_epochs = 10
    lr = 0.01
    batch_size = 16
    num_classes = 1

    # 设置device
    if torch.cuda.is_available():
        device = "cuda"
    else:
        device = "cpu"

    # 初始化swanlab
    swanlab.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 swanlab

images_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 YOLO

def 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_img

if __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.coloradmin.cn/o/1862868.html

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

相关文章

亮数据,一款新的低代码爬虫利器!

在当今数据驱动型时代,数据采集和分析能力算是个人和企业的核心竞争力。然而,手动采集数据耗时费力且效率低下,而且容易被网站封禁。 我之前使用过一个爬虫工具,亮数据(Bright Data) ,是一款低…

LLM生成模型在生物蛋白质应用:ESM3

参考: https://github.com/evolutionaryscale/esm 通过GPT模型原理,输入蛋白质序列等模态输出预测的蛋白质序列及结构 使用 参考:https://colab.research.google.com/github/evolutionaryscale/esm/blob/main/examples/generate.ipynb#sc…

进阶篇08——MySQL管理

系统数据库 常用工具 mysql 客户端工具 mysqladmin 执行管理操作 mysqlbinlog 数据库二进制日志转成文本 mysqlshow 数据库查找 mysqldump 数据库备份 mysqlimport/source 数据库导入

SSH的基本使用

文章目录 1. SSH使用介绍2. 如何配置OpenSSH Client和OpenSSH Server2.1 Windows系统配置2.2 Linux系统配置2.2.1. 安装OpenSSH服务2.2.2. 启动和检查SSH服务 3. SSH具体使用方式4. vscode中使用ssh远程连接 1. SSH使用介绍 SSH 最常见的用途是通过加密连接在不安全的网络中进…

qt pro文件常用配置

概述 记录一下常用的项目pro文件的一些常用配置 常用配置 QT core gui concurrent#添加concurrent并行处理模块 CONFIG windeployqt#打包部署,项目->构建步骤->Make参数 添加windeployqt,编译自动打包greaterThan(QT_MAJOR_VERSION, 4):…

VSCode安装并配置java环境

注:本文不包含jdk安装教程,还没安装jdk的先去安装jdk并配置好环境变量 目录 一、参考博客二、下载VSCode2.1 下载地址 三、安装VSCode四、安装插件4.1 安装中文包4.2 安装java相关插件 五、创建并运行java项目 一、参考博客 https://blog.csdn.net/wei…

这几个PR小技巧你Get到了吗?

学习是永无止境的,需要不间断地学习,获取新知识。今天带来了5个PR小技巧,可以先收藏起来Adobe Premiere Pro 2024的获取查看Baidu Cloud 1、双倍稳定画面更舒适 一般来说大型电视剧、电影使用的拍摄设备都是非常高端的,不像我们…

北大医院副院长李建平:用AI解决临床心肌缺血预测的难点、卡点和痛点

2024年6月14日,第六届北京智源大会在中关村展示中心开幕,海内外的专家学者围绕人工智能关键技术路径和应用场景,展开了精彩演讲与尖峰对话。在「智慧医疗和生物系统:影像、功能与仿真」论坛上,北京大学第一医院副院长、…

每日一题——力扣100. 相同的树(举一反三+思想解读+逐步优化)四千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码分析 时间复杂度分析 空间复杂度分析 总结 我要更强 时间复杂度和空…

阿尔兹海默症-图像分类数据集

阿尔兹海默症-图像分类数据集 数据集: 链接:https://pan.baidu.com/s/1gSUT74XrnHmg2Z11oZNd6A?pwdwphh 提取码:wphh 数据集信息介绍: 文件夹 健康 中的图片数量: 8000 文件夹 早期轻度认知障碍 中的图片数量: 10000 文件夹 …

RabbitMQ中lazyqueue队列

lazyqueue队列非常强悍 springboot注解方式开启 // 使用注解的方式lazy.queue队列模式 非常GoodRabbitListener(queuesToDeclare Queue(name "lazy.queue",durable "true",arguments Argument(name "x-queue-mode",value "lazy&…

【MySQL进阶之路 | 高级篇】InnoDB存储结构(页的内部结构)

1. 数据库的存储结构 : 页 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的.确切说是存储在页结构中.另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入操作.不同的存…

【前后端实现】AHP权重计算

AHP权重计算: 需求:前端记录矩阵维度、上三角值,后端构建比较矩阵、计算权重值并将结果返回给前端 比较矩阵构建 如果你想要根据上三角(不包括对角线)的值来构建对称矩阵,那么你可以稍作修改上述的generate…

窗口控制

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 海龟绘图窗口就是在运行了导入turtle模块并调用了绘图方法的Python文件后,打开的窗口。该窗口默认的宽度为屏幕的50%,高度为屏…

怎么样才能让老旧的和颜色受损、丢失的照片重新上色呢?

怎么样才能让老旧的和颜色受损、丢失的照片重新上色呢?大家有时候在家中打扫卫生的时候,偶然发现了自己爸爸妈妈以前拍的照片,但是照片颜色已经受损的很严重了,几乎就是黑白的颜色,很难看清楚爸爸妈妈年轻时候的样子&a…

OpenAI开发者大会:OpenAI如何再次掀起AI领域的浪潮

对于AI行业的从业者来说,他们可能度过了一个不眠之夜。 北京时间2023年11月7日凌晨,美国人工智能公司OpenAI的开发者大会隆重举行。OpenAI的创始人Sam Altman与同事仅用短短45分钟的时间,在台上发布了他们团队的最新成果——GPT-4 Turbo。这一…

【React】portal

createPortal 允许你将 JSX 作为 children 渲染至 DOM 的不同部分。 createPortal(children, domNode, key?) 使用 portal 渲染模态对话框 import NoPortalExample from "./components/NoPortalExample"; import PortalExample from "./components/PortalEx…

学法减分题库最新版,分享几个简单试用的学习和搜题工具 #微信#经验分享#知识分享

告别繁琐的查询步骤,用我们的拍照搜题功能,只需几秒钟,答案就出现在你眼前,让学习变得更加高效便捷。 1.减分侠 这是个辅助学分减分的公众号 根据新的学法减分考试大纲,涵盖小车、客车、货车、摩托车,各…

放弃 VS Code:新代码编辑器 Zed 的时代已经到来(附使用感受)

1.Zed 是什么? Zed 由 Nathan Sobo 和一个曾在 GitHub 开发 Atom 和 Tree-sitter 的团队开发。他们的目标是创建一个快速、简单且用户友好的代码编辑器,以提升开发人员的编码体验。以下是关于 Zed 历史的一些关键点: 起源:团队利…

菲律宾媒体PR发稿:谷歌SEO优化.关键词排名.谷歌收录

1. 引言 在菲律宾,媒体行业的发展日新月异,尤其是在线媒体。为了在这个竞争激烈的市场中脱颖而出,各家媒体纷纷寻求谷歌SEO优化、提升关键词排名和增加谷歌收录的方法。本文将围绕菲律宾的几大主要在线媒体,如菲律宾在线日志Jour…