基于 YOLOv8 深度学习的农作物检测系统
一、项目概述
本项目是一个基于YOLOv8深度学习框架的农作物与杂草目标检测系统,采用PyQt5构建图形化交互界面,能够对图片、视频流以及摄像头实时画面中的农作物和杂草进行快速、精准的识别与定位。系统支持单张检测、批量检测、视频检测、摄像头实时检测以及检测结果保存等多种功能,适用于智慧农业场景下的作物识别与杂草监测需求。
二、数据集介绍
2.1 数据来源与规模
本项目使用的数据集为CWC(Common Weed and Crop)数据集,共包含2750 张高质量农作物与杂草图像,图像分辨率约为800×600像素。数据集按照8:2:0.5的比例划分为训练集、验证集和测试集:
| 数据集 | 数量 | 路径 |
|---|---|---|
| 训练集(Train) | 2200 张 | CWC dataset/YOLO_txt/train/images |
| 验证集(Val) | 440 张 | CWC dataset/YOLO_txt/val/images |
| 测试集(Test) | 110 张 | CWC dataset/YOLO_txt/test/images |
数据集同时提供了VOC XML和YOLO TXT两种标注格式,方便适配不同的检测框架。
2.2 识别类别
数据集涵盖11 种农作物与杂草类别,兼顾常见经济作物与田间杂草,具体类别如下:
| 编号 | 英文名称 | 中文名称 | 类别类型 |
|---|---|---|---|
| 0 | bluegrass | 蓝草 | 杂草 |
| 1 | chenopodium_album | 藜麦(藜) | 杂草 |
| 2 | cirsium_setosum | 菊苣(刺儿菜) | 杂草 |
| 3 | corn | 玉米 | 农作物 |
| 4 | sedge | 莎草 | 杂草 |
| 5 | cotton | 棉花 | 农作物 |
| 6 | nightshade | 茄(龙葵) | 杂草 |
| 7 | tomato | 番茄 | 农作物 |
| 8 | velvet | 天鹅绒(苘麻) | 杂草 |
| 9 | lettuce | 生菜 | 农作物 |
| 10 | radish | 萝卜 | 农作物 |
其中农作物5 类(玉米、棉花、番茄、生菜、萝卜),杂草6 类(蓝草、藜、菊苣、莎草、茄、天鹅绒),覆盖了农业生产中常见的作物与杂草种类。
三、模型训练配置
系统基于YOLOv8n(Nano 版本)预训练模型进行迁移学习,训练参数配置如下:
| 参数 | 配置值 |
|---|---|
| 模型架构 | YOLOv8n |
| 训练轮数(Epochs) | 200 |
| 批次大小(Batch Size) | 8 |
| 输入图像尺寸 | 640×640 |
| 优化器 | SGD |
| 初始学习率 | 0.01 |
| 最终学习率因子 | 0.01 |
| 动量(Momentum) | 0.937 |
| 权重衰减 | 0.0005 |
| IOU 阈值 | 0.7 |
| 数据增强 | Mosaic、FlipLR、Random Scale、HSV 变换等 |
| 早停策略 | Patience = 100 |
训练过程中采用了丰富的数据增强策略,包括 Mosaic 数据增强(概率 1.0)、水平翻转(概率 0.5)、随机缩放(0.5)、HSV 颜色空间变换等,有效提升了模型的泛化能力。
四、系统技术架构
4.1 技术栈
| 组件 | 技术 | 版本 |
|---|---|---|
| 编程语言 | Python | 3.8+ |
| 深度学习框架 | PyTorch | 1.9.0 |
| 目标检测框架 | Ultralytics YOLO | 8.0.199 |
| 图像处理 | OpenCV | 4.8.1.78 |
| GUI 框架 | PyQt5 | 5.15.2 |
| 科学计算 | NumPy / SciPy | 1.26.1 / 1.11.3 |
| 可视化 | Matplotlib / Seaborn | 3.8.0 / 0.13.0 |
4.2 核心模块
- MainProgram.py:主程序入口,基于 PyQt5 构建 GUI 界面,集成模型加载、推理、结果展示等核心逻辑。
- Config.py:全局配置文件,定义模型路径、类别名称(中英文)、保存路径等参数。
- detect_tools.py:检测工具模块,封装图像读取、坐标转换、绘制标注框、颜色管理等通用功能。
- UIProgram/:界面设计模块,包含 Qt Designer 设计的 UI 文件、QSS 样式表、进度条组件等。
五、系统功能与界面展示
5.1 系统主界面
系统启动后呈现绿色主题风格的主界面,布局清晰、功能分区明确:
- 顶部标题栏:显示"基于 YOLOv8 深度学习的农作物检测系统"。
- 左侧显示区域:用于展示检测图像及标注结果,下方为检测结果与位置信息表格。
- 右侧控制面板:包含文件导入、检测结果、目标位置、操作等四个功能区。
图1:系统初始界面,左侧显示 AI 芯片图标,右侧为文件导入与参数调节面板,下方为检测结果表格。
5.2 功能模块
(1)文件导入
- 图片检测:支持
.jpg、.jpeg、.png格式图片的单张检测。 - 视频检测:支持
.avi、.mp4格式视频的逐帧检测与结果保存。 - 摄像头实时检测:支持调用本地摄像头进行实时目标检测。
- 批量检测:支持选择文件夹对其中所有图片进行批量检测。
(2)参数调节
- 置信度阈值(Confidence):滑动条调节,默认 0.25,范围 0~1。
- IOU 阈值:滑动条调节,默认 0.45,范围 0~1。
(3)检测结果展示
- 实时显示检测用时和目标数目。
- 支持通过下拉框选择单个目标查看其详细信息。
- 显示每个目标的置信度和边界框坐标(xmin、ymin、xmax、ymax)。
- 检测结果表格包含:序号、文件路径、类别(中文)、置信度、坐标位置。
(4)结果保存
- 图片检测结果可保存为带标注的图片文件。
- 视频检测结果可保存为
.avi格式视频,带进度条显示处理进度。 - 批量检测结果自动保存到
save_data目录。
5.3 检测效果展示
以棉花(cotton)图片检测为例,系统成功识别出图像中的棉花植株,检测结果如下:
- 识别类别:棉花(cotton)
- 置信度:94.30%
- 检测用时:0.043 秒
- 目标数目:1
- 边界框坐标:[0, 162, 599, 505]
图2:棉花检测效果,系统以粉色标注框精准定位棉花植株,置信度高达 94.30%,检测用时仅 0.043 秒,体现了 YOLOv8 模型的高效推理能力。
六、项目结构
CWCDetection/ ├── CWC dataset/ # 数据集目录 │ ── CWC dataset/ │ ├── VOC_xml/ # VOC 格式标注(XML) │ │ ├── Annotations/ # 标注文件(2750个) │ │ ├── ImageSets/Main/ # 数据集划分 │ │ └── JPEGImages/ # 原始图像(2750张) │ ── YOLO_txt/ # YOLO 格式标注(TXT) │ ├── train/ # 训练集 │ ├── val/ # 验证集 │ ├── test/ # 测试集 │ └── data.yaml # 数据配置文件 ├── models/ # 训练好的模型权重 │ └── Common-Weed-and-Crop.pt ├── 农作物模型/ # 训练过程输出(曲线、混淆矩阵等) ├── UIProgram/ # GUI 界面模块 │ ├── UiMain.py / UiMain.ui # 主界面 │ ├── QssLoader.py # QSS 样式加载器 │ ├── precess_bar.py # 进度条组件 │ ── style.css # 界面样式表 ── Font/ # 中文字体文件 ├── MainProgram.py # 主程序入口 ├── Config.py # 全局配置 ├── detect_tools.py # 检测工具函数 ├── train.py # 训练脚本 ├── requirements.txt # 依赖清单 └── setup.py # 安装配置七、总结与展望
本项目基于 YOLOv8 深度学习框架,构建了一套功能完善的农作物与杂草检测系统。系统具备以下特点:
- 高精度检测:基于 2750 张图像、11 个类别的数据集训练,模型对各类农作物和杂草均具有良好的识别能力。
- 实时推理:YOLOv8n 轻量级模型在单张图片上的推理时间仅为0.043 秒,满足实时检测需求。
- 友好交互:PyQt5 图形界面设计简洁直观,支持图片、视频、摄像头、批量等多种检测模式。
- 灵活配置:置信度和 IOU 阈值可通过滑动条实时调节,方便用户根据场景需求优化检测效果。
未来可进一步扩展的方向包括:
- 引入更多农作物与杂草类别,扩大数据集规模。
- 部署到边缘设备(如 Jetson Nano),实现田间实时检测。
- 结合 GIS 系统,实现作物分布的可视化地图展示。
- 增加模型对比实验(YOLOv5/v7/v8),分析不同架构的检测性能差异。
八、代码下载路径
有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码
项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷
https://www.bilibili.com/video/BV16JaS6sEGj/