项目编号:
一,环境介绍
语言环境:Python3.8
数据库:Mysql: mysql5.7
开发技术:YOLOv8深度学习框架+Python+PyQT5
开发工具:IDEA或PyCharm
二,项目简介
摘要:
智能小麦害虫检测与识别
对于农业领域有着举足轻重的意义。它有助于农民及时了解田间小麦害虫的种类与分布情况,从而做出迅速有效的决策来防治害虫,最小化作物产量损失和质量下降的风险。本文基于YOLOv8深度学习框架
,通过633张图片
,训练了一个进行智能小麦害虫检测识别
的目标检测模型。并基于此模型开发了一款带UI界面的智能小麦害虫检测识别系统
,可用于实时检测场景中的小麦害虫类别,更方便进行功能的展示。该系统是基于python
与PyQT5
开发的,支持图片
、视频
以及摄像头
进行目标检测
,并保存检测结果
。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习,完整的代码资源文件获取方式见文末。
麦害虫检测与识别
对于农业领域有着举足轻重的意义。主要表现在以下几个方面:
它有助于农民及时了解田间小麦害虫的种类与分布情况,从而做出迅速有效的决策来防治害虫,最小化作物产量损失和质量下降的风险。通过精确识别害虫种类,可以采用更为针对性的防控措施,包括选择合适的农药和调整施药量。这样不仅提高了农药的使用效率,同时减少了对环境的污染和对人体的潜在健康风险。
此外,智能小麦害虫检测与识别系统可以实时监控大面积的作物,为精准农业和智能化管理提供数据支撑。它在经济作物健康管理、农业灾害评估、以及农业科学研究等场景中具有广泛应用。比如,在智能农业领域,该系统可以集成到无人机或自动化巡检机器人中,对大面积田地进行高效率的监测,提供大数据支持智能决策系统。在科研领域,研究人员可以利用该系统收集害虫发生和繁殖规律的数据,对害虫防控技术进行研究和优化。
综上所述,智能小麦害虫检测与识别系统对于保障粮食安全、提升农业生产效率、促进使用环境友好型的农业实践以及推进现代农业技术的发展具有非常重要的作用.
软件主要功能
1. 可进行9种小麦害虫的检测与识别,分别为:['英国谷蚜', '绿盲椿象', '鸟樱桃蚜虫', '小麦花蚜', '蓟马', '长腿蜘蛛螨', '小麦百合蓟马', '小麦锯螟', '玉米天蛾']
;
2.支持图片、视频及摄像头
进行检测,同时支持图片的批量检测
;
3.界面可实时显示目标位置
、目标总数
、置信度
、用时
等信息;
4.支持图片
或者视频
的检测结果保存
;
YOLOv8是一种前沿的目标检测技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行
。其主要网络结构如下:
编辑
三,系统展示
通过网络上搜集关于不同小麦害虫的各类图片
,并使用LabelMe标注工具对每张图片中的目标边框(Bounding Box)及类别进行标注。一共包含633张图片
,其中训练集包含506张图片
,验证集包含127张图片
,部分图像及标注如下图所示。
编辑
编辑
各损失函数作用说明:
定位损失box_loss
:预测框与标定框之间的误差(GIoU),越小定位得越准;
分类损失cls_loss
:计算锚框与对应的标定分类是否正确,越小分类得越准;
动态特征损失(dfl_loss)
:DFLLoss是一种用于回归预测框与目标框之间距离的损失函数。在计算损失时,目标框需要缩放到特征图尺度,即除以相应的stride,并与预测的边界框计算Ciou Loss,同时与预测的anchors中心点到各边的距离计算回归DFLLoss。这个过程是YOLOv8训练流程中的一部分,通过计算DFLLoss可以更准确地调整预测框的位置,提高目标检测的准确性。本文训练结果如下:
编辑
我们通常用PR曲线
来体现精确率和召回率的关系,本文训练结果的PR曲线如下。mAP
表示Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值。mAP@.5:表示阈值大于0.5的平均mAP,可以看到本文模型两类目标检测的mAP@0.5
平均值为0.735
,结果还是很不错的。
我们通常用PR曲线
来体现精确率和召回率的关系,本文训练结果的PR曲线如下。mAP
表示Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值。mAP@.5:表示阈值大于0.5的平均mAP,可以看到本文模型两类目标检测的mAP@0.5
平均值为0.735
,结果还是很不错的。
编辑
软件初始界面如下图所示:
编辑
检测结果界面如下:
编辑

编辑
四,核心代码展示
# 加载模型
model = YOLO("yolov8n.pt") # 加载预训练模型
# Use the model
if __name__ == '__main__':
# Use the model
results = model.train(data='datasets/WheatInsectData/data.yaml', epochs=250, batch=4) # 训练模型
# 将模型转为onnx格式
# success = model.export(format='onnx')
# 所需加载的模型目录
path = 'models/best.pt'
# 需要检测的图片地址
img_path = "TestFiles/IP027000305.jpg"
# 加载预训练模型
# conf 0.25 object confidence threshold for detection
# iou 0.7 intersection over union (IoU) threshold for NMS
model = YOLO(path, task='detect')
# model = YOLO(path, task='detect',conf=0.5)
# 检测图片
results = model(img_path)
res = results[0].plot()
cv2.imshow("YOLOv8 Detection", res)
cv2.waitKey(0)