作物检测:YOLOv8+SwanLab

1. 项目介绍

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

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

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

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

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.pytrain.pypredict.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 swanlab

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

def 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 function
    Args:
        image: Input image
        model_name: Name of the model
        image_size: Image size
        conf_threshold: Confidence threshold
        iou_threshold: IOU threshold
    Returns:
        Rendered image
    """
    global model
    model_name_true = model_name.split("(")[0]
    model = YOLO(model_name_true)
    model.overrides["conf"] = conf_threshold
    model.overrides["iou"] = iou_threshold
    results = model.predict(source=image, imgsz=image_size)
    im_array = results[0].plot()
    pil_img = Image.fromarray(im_array[..., ::-1])
    return pil_img

if __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作物检测演示

相关推荐
Katecat9966324 分钟前
YOLOv8-MambaOut在电子元器件缺陷检测中的应用与实践_1
yolo
工程师老罗1 小时前
YOLOv1 核心知识点笔记
笔记·yolo
工程师老罗6 小时前
基于Pytorch的YOLOv1 的网络结构代码
人工智能·pytorch·yolo
学习3人组9 小时前
YOLO模型集成到Label Studio的MODEL服务
yolo
孤狼warrior10 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
水中加点糖12 小时前
小白都能看懂的——车牌检测与识别(最新版YOLO26快速入门)
人工智能·yolo·目标检测·计算机视觉·ai·车牌识别·lprnet
前端摸鱼匠1 天前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测
2501_941329721 天前
改进YOLOv8-seg-act__鸡只计数检测实战
yolo
weixin_395448911 天前
mult_yolov5_post_copy.c_cursor_0205
c语言·python·yolo
王锋(oxwangfeng)1 天前
YOLOWorld 实现开集障碍物检测
yolo