【YOLO 系列】基于YOLO V8的27类蔬菜水果检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

前言:

蔬菜水果的种类繁多,是人们日常生活中不可或缺的一部分。然而,在蔬菜水果的生产、销售和储存过程中,往往面临着诸多挑战,如品质检测、分类等问题。为了提高蔬菜水果行业的生产效率和产品质量,我们提出了基于深度学习技术的蔬菜水果检测系统。

本项目采用了Yolov8算法,这是一种高效的目标检测算法,能够在图像中快速准确地检测出各种目标。我们将其应用于蔬菜水果的检测,旨在实现对蔬菜水果的自动化检测和识别。

数据集的选择是本项目成功的关键之一。我们收集了大量的蔬菜水果图像,并对其进行了详细的标注,涵盖了27种常见蔬菜水果的不同品种和形态。这些数据为模型的训练提供了充分的支持,确保了模型在各种情况下的准确性和稳定性。

在训练过程中,我们采用了迁移学习的方法,利用预训练的Yolov8模型,并结合我们的蔬菜水果数据集进行了进一步的微调和优化。通过这种方式,我们成功地提高了模型在蔬菜水果检测任务上的性能和准确率。

本项目的最终目标是将训练好的模型应用于实际场景中,帮助蔬菜水果行业实现自动化生产和管理,提高产品品质和市场竞争力。我们相信,这一技术的应用将为蔬菜水果行业带来新的发展机遇,并推动行业向智能化、高效化方向迈进。

基于此项目,设计一个使用Pyqt5库来搭建页面展示系统。本系统支持的功能包括训练模型的导入、初始化;置信度与IOU阈值的调节、图像上传、检测、可视化结果展示、结果导出与结束检测;视频的上传、检测、可视化结果展示、结果导出与结束检测;摄像头的上传、检测、可视化结果展示与结束检测;已检测目标信息列表、位置信息;以及推理用时。本博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接

优势:

  1. 多样性和准确性: 使用27类蔬菜水果数据集进行训练,使得模型能够准确识别各种形态和品种的蔬菜水果,具有较高的检测准确性和覆盖范围。

  2. 应用广泛: 本项目不仅限于某一特定品种或场景,而是涵盖了蔬菜水果行业的广泛领域,可应用于农业生产、仓储物流、超市零售等多个环节。

  3. 智能化管理: 将蔬菜水果检测技术应用于生产和销售环节,可以实现自动化检测和管理,提高生产效率和产品质量,降低人力成本和风险。

应用前景:

  1. 农业生产: 在蔬菜水果的种植和采摘过程中,利用检测技术进行品质检测和分类,提高农产品的品质和市场竞争力。

  2. 仓储物流: 在蔬菜水果的仓储和物流环节中,通过检测技术实现自动化分类和管理,提高仓储效率和产品保鲜度。

  3. 超市零售: 在超市销售环节中,利用检测技术对蔬菜水果进行品质检测和分类,提高产品陈列和销售效率,增强顾客体验和满意度。


一、软件核心功能介绍及效果演示

软件主要功能

  1. 支持图片、图片批量、视频及摄像头进行检测,同时摄像头可支持内置摄像头和外设摄像头

  2. 可对检测结果进行单独分析,并且显示单个检测物体的坐标、置信度等;

  3. 界面可实时显示目标位置检测结果检测时间置信度检测结果回滚等信息;

  4. 支持图片视频摄像头的结果保存,将检测结果保持为excel文件;

界面参数设置说明

  1. 标签4 摄像头源/相机/网络源

  2. 标签5 交并比阈值:目标检测时的iou参数,只有目标检测框的交并比大于该值,结果才会显示;

  3. 标签6 置信度阈值:目标检测时的conf参数,只有检测出的目标置信度大于该值,结果才会显示;

  4. 标签7 显卡选择:在进行推理时是否使用显卡,默认勾选(使用显卡);

  5. 标签8 半精度选择:启用半精度(FP16)推理,可加快支持的 GPU 上的模型推理速度,同时将对精度的影响降至最低,默认不勾选(不适应半精度);

  6. 标签9 图片推理尺寸: 在推理时将推理图片固定的尺寸;

  7. 标签10 数据集的配置文件:数据集在训练时的配置文件(.yaml);

  8. 标签11 训练好的模型:最终要进行推理的模型,一般选择最优的一个模型;

  9. 标签12 类别名:该项目的所有类别,可以方便在后续查看某一个类别。

视频演示

https://www.bilibili.com/video/BV1Ym421p7BC/

图片检测演示

  1. 点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹,操作演示如下:

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

视频检测演示

  1. 点击视频按钮图标,打开选择需要检测的视频,在点击开始运行会自动显示检测结果。再次点击停止按钮,会停止检测视频。

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

摄像头检测演示

  1. 选择相机源中输入需要检测的摄像头(可以是电脑自带摄像头,也可以是外接摄像头,视频流等方式),然后点击摄像头图标来固定选择的推理流方式,最后在点击开始运行即可开始检测,当点击停止运行时则关闭摄像头检测。

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

检测结果保存

点击导出数据按钮后,会将当前选择的图片【含批量图片】、视频或者摄像头的检测结果进行保存为excel文档,结果会存储在output目录下。

环境搭建

创建专属环境

conda create -n yolo python==3.8

 激活专属环境

conda activate yolo

安装torch-GPU库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torch-2.0.1+cu118-cp38-cp38-win_amd64.whl"

安装torchvision-GPU库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torchvision-0.15.2+cu118-cp38-cp38-win_amd64.whl"

安装ultralytics库

测试环境

yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

此时就表明环境安装成功!!!

安装图形化界面库 pyqt5

pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

算法原理

YOLOv8是一种前沿的深度学习技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。

YOLOv8目标检测算法具有如下的几点优势:

(1)更友好的安装/运行方式;

(2)速度更快、准确率更高;

(3)新的backbone,将YOLOv5中的C3更换为C2F;

(4)YOLO系列第一次使用anchor-free;

(5)新的损失函数。

YOLO各版本性能对比

网络结构

YOLOv8模型的整体结构如下图所示:

YOLOv8与YOLOv5模型最明显的差异是使用C2F模块替换了原来的C3模块;另外Head 部分变化最大,从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free

YOLOv8的网络架构包含了多个关键组件,这些组件共同工作以实现快速而准确的目标检测。首先是其创新的特征提取网络(Backbone),YOLOv8的Backbone采用了最新的网络设计理念,通过深层次的特征融合和精细的特征提取策略来增强对目标的识别能力。这一策略的成功关键在于其特征提取器能够充分捕获目标的细微特征,同时保持计算效率。

YOLOv8在训练策略上也进行了优化。与YOLOv7相比,YOLOv8采用了SPFF(Spatial Pyramid Fusion Fast)策略,该策略通过高效的多尺度特征融合提高了模型对不同大小目标的检测能力。此外,YOLOv8在训练过程中引入了一种名为Task Aligned Assigner的新技术,这种技术能够更精准地将预测框与真实目标对齐,从而提高检测的准确率。

在损失函数的设计上,YOLOv8进行了创新,采用了JFL(Joint Family Losses),这是一种集成了多个损失函数的复合损失函数,能够同时优化目标检测的多个方面。这些损失函数包括用于提升模型对目标位置和大小预测准确性的CIOU Loss,以及优化分类准确性的分类损失函数。JFL的设计允许YOLOv8更全面地考虑检测任务中的不同需求,通过协调各种损失来提升总体的性能。

YOLOv8的原理不仅在于其创新的技术点,更在于这些技术如何被综合应用于解决实际的目标检测问题。通过其精心设计的网络架构、高效的训练策略以及综合的损失函数设计,YOLOv8实现了在保持实时性的同时,提高了在复杂场景下的检测准确率。这些改进使得YOLOv8成为了一个强大的工具,适用于从自动驾驶到智能视频监控等多种应用场景。

四、模型的训练、评估与推理

数据集准备

本文使用的蔬菜水果数据集共包含2013张图片,一共有27类,分别为['黑葡萄', '绿葡萄', '樱桃', '西瓜', '龙眼', '香蕉', '芒果', '菠萝', '柚子', '草莓', '苹果', '柑橘', '火龙果', '梨子', '花生', '黄瓜', '土豆', '大蒜', '茄子', '白萝卜', '辣椒', '胡萝卜', '花菜', '白菜', '番茄', '西蓝花', '橙子']。部分数据集及类别信息如下:

图片数据集的存放格式如下,在项目目录中新建VOCData目录,同时将图片放入images目录下。

  1. 运行splitDataset.py,用于划分数据集;

  2. 运行xml2txt.py,用于得到训练标注文件;

  3. 运行ViewCategory.py,用于查看一共有那些类别;

  4. mydata.yaml,用于填写模型训练的数据配置文件。

注意:在xml2txt.py和mydata.yaml中的类别名称的顺序要一致。

模型训练

数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,代码如下:

yolo detect train data=./VOCData/myvoc.yaml model=yolov8n.yaml pretrained=./weights/yolov8n.pt epochs=100 imgsz=640
from ultralytics import YOLO

# build from YAML and transfer weights
model = YOLO('yolov8n.yaml').load('./weights/yolov8n.pt')

# Train the model
results = model.train(data='./VOCData/myvoc.yaml', epochs=100, imgsz=640)

训练结果分析

YOLOv8在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:

P_curve.png

confusion_matrix_normalized.png

训练 batch

验证 batch

模型推理

模型训练完成后,可以得到一个最佳的训练结果模型best.pt文件,在runs/trian/weights目录下。我们通过使用该文件进行后续的推理检测。

图片检测代码如下:

yolo detect predict model=./runs/detect/train/weights/best.pt source=./img save=True device=0
from ultralytics import YOLO

# Load a model
model = YOLO('./runs/detect/train/weights/best.pt')

# Run batched inference on a list of images
model("./img", imgsz=640, save=True, device=0)

执行上述代码后,会将执行的结果直接标注在图片上,结果如下:

  

关于该系统涉及到的完整源码、UI界面代码、数据集、训练代码、测试图片视频等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。

五、获取方式

本文涉及到的完整全部程序文件:包括 python源码、数据集、训练好的结果文件、训练代码、UI源码、测试图片视频等(见下图),获取方式见文末:

注意:该代码基于Python3.8开发,运行界面的主程序为GUI.py,其他测试脚本说明见上图。为确保程序顺利运行,请按照requirements.txt配置软件运行所需环境。

关注下方公众号:【AI算法与电子竞赛】,发送【YOLO系列源码】即可获取下载方式

六、链接作者

欢迎关注我的公众号:@AI算法与电子竞赛

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-03 23:28:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-03 23:28:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-03 23:28:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-03 23:28:04       18 阅读

热门阅读

  1. Golang 设计模式(行为型)

    2024-05-03 23:28:04       14 阅读
  2. 互斥关系和同步关系

    2024-05-03 23:28:04       10 阅读
  3. SDWebImage源码分析

    2024-05-03 23:28:04       11 阅读
  4. TypeScript 的 interface

    2024-05-03 23:28:04       10 阅读
  5. Qt :浅谈在大型项目中使用信号管理器

    2024-05-03 23:28:04       17 阅读
  6. Python的主要应用领域

    2024-05-03 23:28:04       12 阅读
  7. windows qt sdk 安装

    2024-05-03 23:28:04       15 阅读
  8. 数据结构---查找法

    2024-05-03 23:28:04       12 阅读
  9. Vue表单项赋值后无法输入问题解决

    2024-05-03 23:28:04       11 阅读
  10. Arrays

    2024-05-03 23:28:04       10 阅读
  11. Linux 内核 delayacct 原理分析

    2024-05-03 23:28:04       11 阅读
  12. 《人大金仓数据库》未来发展的展望

    2024-05-03 23:28:04       9 阅读
  13. 笨蛋学C++【C++基础第九弹】

    2024-05-03 23:28:04       10 阅读
  14. Kafka如何将消息发送到指定分区

    2024-05-03 23:28:04       12 阅读
  15. 学习,工作与生活,怎么平衡?

    2024-05-03 23:28:04       10 阅读