基于深度学习的作物检测通过精准管理和数据驱动决策,能够提高作物产量和质量,优化农业资源利用,推动农业自动化进程,从而保障粮食安全。目前,作物检测领域大多针对单类作物进行检测。因此,本项目基于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
项目团队:新疆大学大数据挖掘和智能计算实验室
安装以下3个库
ultralytics swanlab gradio
安装命令:
pip install ultralytics swanlab gradio
多类作物数据集(小麦、玉米、水稻、辣椒、甜菜苗、棉铃):链接:作物数据集
提取码: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文件夹:该文件夹用于保存训练、测试、验证标签文件夹。
模型链接:YOLOv8模型
解压后得到ultralytics-main文件夹。
在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:保存数据集中训练、测试、验证集的绝对路径,以及类别。
首先将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粘贴即可登录。
训练过程实时查看:作物检测-swanlab
yolov8结合swalab训练过程详细信息如图所示。
分别使用yolov8n和yolov8s两个模型进行实验,epoch=100,通过下图可以轻松对比出两种模型间的训练结果。在相同条件下,yolov8s模型的指标相对更好。
新手在刚接触swanlab时,可能不太了解swanlab中的一些简单部件以及如何更快捷的使用。以下将会对swanlab界面中的一些常用部件以及功能进行简单介绍。
创建项目:在swanlab.init中进行创建,其中,project为项目名称。
点击如图所示小方框即可删除实验。
在实验中可能会出现终止实验的情况,如上图YOLOv8n_Jun06_21-30-14实验正在运行,点击进入实验;如图所示,点击“运行中”后的终止按钮即可。
在实验过程中,可能需要对多次实验的训练进行对比,swanlab的图表视图可以方便的展示多次实验的训练情况。
值得注意的是,在对比时可能只需对特定的某几个实验进行比较,因此就需要进行选择,如下图所示。
- from ultralytics import YOLO
-
- # 载入训练好的模型
- model = YOLO("./best.pt")
- model.predict(source="crops/images/test", save_txt=True)
在创建的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作物检测演示
Ultralytics x SwanLab:可视化YOLO模型训练_yolov10 ultralytics-CSDN博客
SwanLab入门深度学习:YOLOv8自定义数据集检测_swamlab训练yolo-CSDN博客
YOLOv8猫狗检测:从SwanLab可视化训练到Gradio Demo网站_yolov8 可视化训练软件-CSDN博客
YOLOv8(Ultralytics)集成SwanLab进行训练监控和可视化_swanlab yolov8-CSDN博客