Python基于改进YOLOv5的烟叶病害检测系统(附带源码)
1.背景
烟草作为我国重要的经济作物之一,在国民经济中占据着重要地位。同时,烟草病害严重威胁烟叶质量,制约卷烟质量,给农业生产造成严重损失。因此,烟草病害防治是一个亟需解决的问题。
传统的烟草病害诊断方法不能及时,准确地解决实际栽培中遇到的病害种类识别问题,这就可能错失了防治病害的最佳时期。
2.前言
Python、Anacanda、Pycharm、CUDA和cuDNN等基础的环境安装部署可以参考博主的B站视频教程
[2022手把手教学版]Python&Anacanda&Pycharm安装,虚拟环境配置
[CUDA&cuDNN]炼丹师手把手带你安装CUDA&cuDNN(win10)
3.烟叶数据集的采集
4.烟叶数据集的标注
labelimg是一款开源的图像标注工具,标签可用于分类和目标检测,它是用python写的,并使用Qt作为其图形界面,简单好用(虽然是英文版的)。其注释以 PASCAL VOC格式保存为XML文件,这是ImageNet使用的格式。此外,它还支持 COCO数据集格式。
labelimg的使用可以参考:
LabelImg(目标检测标注工具)的安装与使用教程
5.烟叶检测训练&识别效果
训练的教程可以参考博主的博文:
Python基于深度学习yolov5的扑克牌识别
6.病害数据集的采集
7.病害数据集的标注
8.YOLOv5网络的改进
由于病害目标非常的小,原始的YOLOv5的最小的检测头的感受野依旧大于目标的尺寸,所以有必要对原始网络进行改进
通常目标检测的结构包含下图的模块
我们可以从上面的每个模块入手提出改进的点,例如我们从优化算法下手,Yolov5的作者提供了两个优化函数Adam和SGD(默认),并且都预设了匹配的训练超级参数。
我建议,如果您需要训练较小的自定义数据集,则Adam是更合适的选择。如果训练了较大的数据集,SGD对于Yolov5比Adam更好。
事实上,学术界还没有关于SGD和Adam之间哪个更好的统一结论,这取决于实际项目情况。
同时我们可以改进激活函数,Yolov5的作者使用leaky-relu 和 sigmoid激活函数。在Yolov5中,中间/隐藏层使用泄漏relu激活函数,最后一个检测层使用S形激活函数。Yolov4使用mish激活功能。
我们可以改进损失函数,Yolo级数的损失计算基于目标得分、类概率得分和边界框区域得分
Yolo V5使用GIOU损失作为边界框的损失。
Yolo V4使用CIOU损失作为边界框的损失。与上述其他方法相比,CIOU损失带来更快的收敛速度和更好的性能。
9.如何通过代码修改模型
(1)首先,您需要在models/common.py中实现mobilenetv2的瓶颈和PW_ Conv。
(2)然后,您需要更改代码(models/yolo.py的parse_model函数),以读取yolo V5中的模型配置文件,从而调用上述模块。
(3)并且PW_ Conv瓶颈MOB需要在导入参考处添加,
(4)然后,我们构建模型配置文件,我在yolov5s.yaml的基础上对其进行了修改
10.病害检测训练&识别效果
11.系统整合
最终我们将烟叶检测和病害检测的系统整合到一起,实现操作者只需看一眼,就可以对所有烟叶的健康状况有所知悉,同时,每一片烟叶的病害种类、位置和数量都很清晰的标注在叶片上。鲁棒性好、识别率高、准确性强。
PPT资源
[PPT]Python基于改进YOLOv5的烟叶病害检测系统PPT
相关完整源码代码
[YOLOv5烟叶病害识别]完整源码(带安装教程&数据集&演示视频)
版权归原作者 群马视觉 所有, 如有侵权,请联系我们删除。