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

相关推荐
大象机器人5 小时前
交互式乘法 myCobot 让学习充满乐趣!
人工智能·python·学习·yolo·机械臂·具身智能
阿_旭21 小时前
基于YOLOv10深度学习的CT扫描图像肾结石智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测
人工智能·python·深度学习·yolo·yolov10
FL16238631291 天前
[数据集][目标检测]桥梁检测数据集VOC+YOLO格式1116张1类别
深度学习·yolo·目标检测
唐豆豆*2 天前
将深度相机的实时三维坐标数据保存为excel文档
数码相机·yolo
FL16238631292 天前
[数据集][目标检测]水面垃圾水面漂浮物检测数据集VOC+YOLO格式3749张1类别
人工智能·yolo·目标检测
今天炼丹了吗2 天前
YOLOv10改进教程|C2f-CIB加入注意力机制
yolo
大霸王龙2 天前
YOLO在目标检测与视频轨迹追踪中的应用
大数据·人工智能·python·yolo·目标检测·目标跟踪
Papicatch2 天前
人工智能--目标检测
人工智能·python·yolo·目标检测·r-cnn
FL16238631293 天前
[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式4599张2类别
人工智能·yolo·目标检测
1037号森林里一段干木头3 天前
yolov8对新的数据集自动标注
开发语言·python·yolo