Python基于改进YOLOv5的烟叶病害检测系统(附带源码)

效果展示图.png

1.背景

烟草作为我国重要的经济作物之一,在国民经济中占据着重要地位。同时,烟草病害严重威胁烟叶质量,制约卷烟质量,给农业生产造成严重损失。因此,烟草病害防治是一个亟需解决的问题。
传统的烟草病害诊断方法不能及时,准确地解决实际栽培中遇到的病害种类识别问题,这就可能错失了防治病害的最佳时期。

2.前言

前言环境安装图.png

Python、Anacanda、Pycharm、CUDA和cuDNN等基础的环境安装部署可以参考博主的B站视频教程
[2022手把手教学版]Python&Anacanda&Pycharm安装,虚拟环境配置
[CUDA&cuDNN]炼丹师手把手带你安装CUDA&cuDNN(win10)

3.烟叶数据集的采集

采集的烟叶的数据集.png

4.烟叶数据集的标注

labelimg是一款开源的图像标注工具,标签可用于分类和目标检测,它是用python写的,并使用Qt作为其图形界面,简单好用(虽然是英文版的)。其注释以 PASCAL VOC格式保存为XML文件,这是ImageNet使用的格式。此外,它还支持 COCO数据集格式。
labelimg的使用可以参考:
LabelImg(目标检测标注工具)的安装与使用教程

数据集的标注.png

5.烟叶检测训练&识别效果

训练的教程可以参考博主的博文:

Python基于深度学习yolov5的扑克牌识别

烟叶识别效果.png

6.病害数据集的采集

采集的病害的数据集.png

7.病害数据集的标注

病害数据集的标注.png

8.YOLOv5网络的改进

由于病害目标非常的小,原始的YOLOv5的最小的检测头的感受野依旧大于目标的尺寸,所以有必要对原始网络进行改进
通常目标检测的结构包含下图的模块

可以改进的网络结构.png

我们可以从上面的每个模块入手提出改进的点,例如我们从优化算法下手,Yolov5的作者提供了两个优化函数Adam和SGD(默认),并且都预设了匹配的训练超级参数。
我建议,如果您需要训练较小的自定义数据集,则Adam是更合适的选择。如果训练了较大的数据集,SGD对于Yolov5比Adam更好。
事实上,学术界还没有关于SGD和Adam之间哪个更好的统一结论,这取决于实际项目情况。
同时我们可以改进激活函数,Yolov5的作者使用leaky-relu 和 sigmoid激活函数。在Yolov5中,中间/隐藏层使用泄漏relu激活函数,最后一个检测层使用S形激活函数。Yolov4使用mish激活功能。

激活函数.png

我们可以改进损失函数,Yolo级数的损失计算基于目标得分、类概率得分和边界框区域得分
Yolo V5使用GIOU损失作为边界框的损失。
Yolo V4使用CIOU损失作为边界框的损失。与上述其他方法相比,CIOU损失带来更快的收敛速度和更好的性能

损失函数的改进.png

9.如何通过代码修改模型

(1)首先,您需要在models/common.py中实现mobilenetv2的瓶颈和PW_ Conv。


1.png

(2)然后,您需要更改代码(models/yolo.py的parse_model函数),以读取yolo V5中的模型配置文件,从而调用上述模块。


2.png

(3)并且PW_ Conv瓶颈MOB需要在导入参考处添加,



(4)然后,我们构建模型配置文件,我在yolov5s.yaml的基础上对其进行了修改

10.病害检测训练&识别效果

病害检测效果.png

11.系统整合

最终我们将烟叶检测和病害检测的系统整合到一起,实现操作者只需看一眼,就可以对所有烟叶的健康状况有所知悉,同时,每一片烟叶的病害种类、位置和数量都很清晰的标注在叶片上。鲁棒性好、识别率高、准确性强。

效果展示图.png

PPT资源

[PPT]Python基于改进YOLOv5的烟叶病害检测系统PPT

相关完整源码代码

[YOLOv5烟叶病害识别]完整源码(带安装教程&数据集&演示视频)

你可能感兴趣的:(Python基于改进YOLOv5的烟叶病害检测系统(附带源码))