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

    1. crops
    2. --images
    3. ----train
    4. ------1.jpg
    5. ------2.jpg
    6. ----test
    7. ------1.jpg
    8. ------2.jpg
    9. ----vaildation
    10. ------1.jpg
    11. ------2.jpg
    12. --labels
    13. ----train
    14. ------1.txt
    15. ------2.txt
    16. ----test
    17. ------1.txt
    18. ------2.txt
    19. ----vaildation
    20. ------1.txt
    21. ------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表示批量大小。

    1. from ultralytics import YOLO
    2. from swanlab.integration.ultralytics import add_swanlab_callback
    3. import swanlab
    4. def main():
    5. swanlab.init(project="YOLOv8_Crop_Detection", experiment_name="YOLOv8n",)
    6. model = YOLO("ultralytics/cfg/models/v8/yolov8n.yaml")
    7. add_swanlab_callback(model)
    8. model.train(data="./crops/crop.yaml", epochs=100, imgsz=640, batch=16)
    9. if __name__ == "__main__":
    10. 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. 推理部分

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

    5. Gradio演示

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

    1. import gradio as gr
    2. from ultralytics import YOLO
    3. from PIL import Image
    4. def yolov8_inference(
    5. model_name: gr.inputs.Dropdown = "best.pt(1)",
    6. image: gr.inputs.Image = None,
    7. image_size: gr.inputs.Slider = 640,
    8. conf_threshold: gr.inputs.Slider = 0.25,
    9. iou_threshold: gr.inputs.Slider = 0.45,
    10. ):
    11. """
    12. YOLOv8 inference function
    13. Args:
    14. image: Input image
    15. model_name: Name of the model
    16. image_size: Image size
    17. conf_threshold: Confidence threshold
    18. iou_threshold: IOU threshold
    19. Returns:
    20. Rendered image
    21. """
    22. global model
    23. model_name_true = model_name.split("(")[0]
    24. model = YOLO(model_name_true)
    25. model.overrides["conf"] = conf_threshold
    26. model.overrides["iou"] = iou_threshold
    27. results = model.predict(source=image, imgsz=image_size)
    28. im_array = results[0].plot()
    29. pil_img = Image.fromarray(im_array[..., ::-1])
    30. return pil_img
    31. if __name__ == "__main__":
    32. model_name = ["best.pt(1)", "yolov8.pt"]
    33. inputs = [
    34. gr.inputs.Radio(model_name, label="选择模型权重", default="best.pt(1)"),
    35. gr.Image(type="filepath", label="Input Image"),
    36. gr.Slider(minimum=320, maximum=1280, value=640, step=32, label="Image Size"),
    37. gr.Slider(minimum=0.0, maximum=1.0, value=0.25, step=0.05, label="Confidence Threshold"),
    38. gr.Slider(minimum=0.0, maximum=1.0, value=0.45, step=0.05, label="IOU Threshold"),
    39. ]
    40. outputs = gr.Image(type="filepath", label="Output Image")
    41. title = "Crop detection and counting"
    42. examples = [
    43. ["best.pt(1)", "./image/wheat.jpg", 640, 0.25, 0.45],
    44. ["best.pt(1)", "./image/maize.jpg", 640, 0.25, 0.45],
    45. ["best.pt(1)", "./image/rice.jpg", 640, 0.25, 0.45],
    46. ["best.pt(1)", "./image/chili.jpg", 640, 0.25, 0.45],
    47. ["best.pt(1)", "./image/beet.jpg", 640, 0.25, 0.45],
    48. ["best.pt(1)", "./image/cotton.jpg", 640, 0.25, 0.45],
    49. ]
    50. # 创建Gradio界面
    51. demo_app = gr.Interface(
    52. fn=yolov8_inference,
    53. inputs=inputs,
    54. outputs=outputs,
    55. title=title,
    56. examples=examples,
    57. theme=gr.themes.Base()
    58. )
    59. # 启动界面
    60. 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博客​​​​​​​

  • 相关阅读:
    PHP表单token验证防CSRF攻击
    设计模式理论(一)软件设计原则
    每天五分钟深度学习pytorch:训练神经网络模型的基本步骤
    java毕业设计Web产品管理系统源码+系统+数据库+lw文档+调试运行
    LeetCode算法二叉树—222. 完全二叉树的节点个数
    Go与C/C++中的堆和栈比较
    大数据面试重点之kafka(六)
    Mac搭建Jmeter分布式加压步骤
    ubuntu安装docker
    [附源码]计算机毕业设计JAVA企业公开招聘系统
  • 原文地址:https://blog.csdn.net/weixin_44813538/article/details/139860520