
本文涉及的全部源码、训练好的模型权重、数据集、配套文档已整理打包文末附下载链接方便读者一键复现与二次开发。开发目的本项目聚焦茶叶种植中常见的三类病害藻叶斑、云纹叶枯病、灰枯病的快速检测需求选择对应的公开数据集开展开发数据集共含1153张图片其中训练集954张、验证集199张覆盖了病害在不同叶片状态、光照条件下的样本契合田间场景的实际识别需求切入点是为基层茶农或植保人员提供无需专业设备辅助的病害初筛工具解决传统田间病害识别依赖经验、效率低的问题无需复杂的实验室检测流程即可快速获取病害类型信息技术选型上选择YOLOv8作为核心检测模型因其在小目标识别、多类别分类任务中表现稳定能满足茶叶病害多类别检测的需求且推理速度快适配实时检测的要求实际训练后模型的mAP0.5为0.649搭配Flask轻量web框架搭建后端服务便于模型接口的部署与调用前端采用Layui实现简洁的交互界面无需复杂的前后端分离架构即可快速搭建可用的web系统各组件契合快速搭建实用型病害检测系统的技术需求无需额外复杂的技术栈适配验证环节将在预留的测试集上开展主要观察模型的mAP0.5等检测指标同时记录单张图片的推理速度判断系统是否满足快速检测的实际需求确保模型在未知样本上的泛化能力符合应用预期。YOLOv8 介绍YOLOv8是Ultralytics团队推出的新一代单阶段目标检测模型兼具检测精度与推理速度是当前计算机视觉领域的主流检测框架之一。YOLOv8的骨干网络采用基于ELAN设计思想的C2f结构替代了YOLOv5的C3模块核心是通过跨阶段分层特征提取让梯度能更高效地在网络中传播缓解深层网络的梯度消失问题同时减少冗余参数与计算量提升特征提取的效率与鲁棒性。该骨干结合了轻量化与强特征提取能力既保留了对茶叶病害图像中细微纹理的捕捉能力又能在有限算力下快速完成特征编码为后续检测任务提供坚实的特征基础。YOLOv8的特征融合层Neck采用SPPF结构替代SPP能更高效地处理多尺度特征结合PAN-FPN的双向跨尺度融合机制实现底层细粒度特征与高层语义特征的有效结合。对于茶叶病害检测数据集而言不同病害的发病区域大小差异明显小到藻叶斑的局部斑点大到覆盖叶片的云纹叶枯病斑块多尺度特征融合能让模型同时捕捉细微病害纹理与整体病变形态避免因尺度差异导致的漏检或误检提升对不同大小病害目标的适应性。YOLOv8采用解耦式检测头设计将传统单检测头中的分类任务与边界框回归任务拆分为两个独立分支分类分支负责识别病害类别回归分支负责精准定位病害区域这种分离设计能减少任务间的特征干扰提升类别识别准确率与边界框定位精度尤其适合茶叶病害这类类别特征与位置特征需精准区分的检测场景。相较于YOLOv5YOLOv8用C2f骨干替代C3采用解耦检测头相较于YOLOv7YOLOv8在特征融合中优化了跨尺度连接提升了小目标检测能力同时在损失函数、激活函数等细节上做了优化整体平衡了速度与精度在同类单阶段检测模型中综合性能更优更适配边缘设备部署与实际应用场景的需求。本项目选择轻量化的yolov8n.pt作为预训练权重适配Flask系统的轻量部署需求输入分辨率设为640×640平衡了检测精度与推理速度匹配茶叶病害图像的典型尺寸训练轮数设为100结合数据集规模约数千张病害标注图既能避免欠拟合又能防止过拟合确保模型在茶叶病害检测任务上的泛化能力。系统设计数据集本项目使用的数据集为真实场景下采集的茶叶病害检测数据集图像专用于茶叶病害检测数据集检测任务。数据图像来自实际现场拍摄覆盖了多种典型场景确保了数据的真实性与多样性。数据集共包含1153 张已标注图像具体划分为训练集954 张图像验证集199 张图像数据集共包含3 个检测类别[‘algal leaf spot’, ‘brown blight’, ‘grey blight’]数据集各类别数目分布情况如下部分图像及标注如下图所示YOLO 在进行模型训练时会读取data.yaml文件中的训练集、验证集路径以及检测类别信息。本文数据集的data.yaml内容如下path:J:\datasets\det_tea_diseasetrain:train\imagesval:valid\imagesnc:3names:[algal leaf spot,brown blight,grey blight]#藻叶斑、 云纹叶枯病、灰枯病模型训练本文基于YOLOv8进行模型训练。首先安装 Ultralyticspipinstallultralytics训练脚本基于YOLO类封装核心代码如下fromultralyticsimportYOLOif__name____main__:modelYOLO(yolov8n.pt)#加载预训练权重加快训练速度提升准确率model.train(data./data.yaml,imgsz(640,640),workers0,batch64,epochs100)模型常用训练超参数说明epochs训练轮数本文设置为100batch批次大小本文设置为64imgsz输入图像尺寸本文设置为[640, 640]optimizer优化器本文使用auto训练后评估模型训练完成后必须对其性能进行科学评估以判断其在实际应用中的可靠性。常用的评估指标包括精确率-召回率曲线PR曲线和平均精度mAP。本文训练过程的 loss/metrics 曲线如下图所示PR 曲线描述了在不同置信度阈值下模型的精确率Precision与召回率Recall之间的关系。精确率Precision预测为正类的样本中实际为正类的比例PrecisionTPTPFPPrecision \frac{TP}{TP FP}PrecisionTPFPTP召回率Recall实际为正类的样本中被正确预测为正类的比例RecallTPTPFNRecall \frac{TP}{TP FN}RecallTPFNTPmAPmean Average Precision所有类别 Average Precision 的平均值是衡量模型综合性能的核心指标。mAP0.5IoU 阈值为 0.5 时的 mAP反映较宽松匹配下的检测精度。mAP0.5:0.95IoU 阈值从 0.5 到 0.95 步进 0.05 的平均 mAP更严格反映高精度匹配下的整体表现。本文模型目标检测的mAP0.5 0.649mAP0.5:0.95 0.462Precision 0.665Recall 0.613。混淆矩阵如下模型推理使用训练好的best.pt进行推理支持图片、视频和摄像头三种检测模式。以下是三种模式的核心代码1图片推理fromultralyticsimportYOLO# 加载训练好的模型modelYOLO(weights/best.pt)# 对图片进行推理resultsmodel(test.jpg)# 可视化检测结果并保存res_plottedresults[0].plot()importcv2 cv2.imwrite(result.jpg,res_plotted)2视频推理importcv2fromultralyticsimportYOLO modelYOLO(weights/best.pt)capcv2.VideoCapture(test.mp4)whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotatedresults[0].plot()cv2.imshow(YOLO Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()3摄像头实时检测importcv2fromultralyticsimportYOLO modelYOLO(weights/best.pt)capcv2.VideoCapture(0)# 0 表示默认摄像头whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotatedresults[0].plot()cv2.imshow(Live Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()系统 UI 设计本系统采用Flask框架的蓝图机制划分模块将功能拆分为检测业务、用户管理、模型配置三大蓝图分别对应路由前缀/detection、/user、/config实现路由的模块化组织。后端将模型推理逻辑封装为独立的inference服务层与Web视图层解耦视图仅负责接收HTTP请求、调用推理服务并返回标准化响应便于后续模型迭代或替换数据库采用SQLite存储用户信息、检测记录及配置数据通过SQLAlchemy实现数据操作的封装保障数据交互的稳定性。前端基于Layui经典框架开发核心页面复用Layui的表格、表单、上传等组件检测记录页面使用lay-table组件实现分页、排序、多条件筛选批量检测功能依托lay-upload组件支持多文件异步上传用户管理页面通过lay-form组件完成用户增删改查表单校验采用Layui内置规则。前端通过AJAX与后端RESTful接口通信上传文件时将FormData以POST方式提交至/detection/upload接口接收后端返回的JSON数据后动态更新页面所有交互均为异步避免页面刷新。检测流程遵循“用户触发→数据上传→后端推理→结果渲染”的时序用户选择单张图片、视频或开启摄像头实时检测前端将图片文件/视频帧截图封装为FormData或Blob通过AJAX发送至对应接口后端调用推理服务返回含病害类型、置信度、边界框坐标x1,y1,x2,y2的JSON结果前端渲染时若为图片检测先在原图片上创建Canvas层根据结果中的bbox参数绘制红色边界框叠加病害名称及置信度文本批量检测则将每条结果同步至lay-table对应行摄像头检测时每100ms截取一帧发送实时在视频流上更新检测框确保交互流畅。部署时需在Flask配置文件中指定模型权重路径系统自动检测CUDA环境切换GPU/CPU推理模式关键配置项包括上传文件大小限制、病害检测置信度阈值、数据库存储路径均可通过配置文件或环境变量调整生产环境采用Gunicorn作为WSGI服务器适配部署需求。系统主界面如下图所示系统功能基于训练好的目标检测模型本系统具备以下核心功能1. 多模式检测支持图片上传检测单张/批量视频文件上传检测本地摄像头实时检测2. 可调节推理参数用户可动态调整置信度阈值conf用户可动态调整 IoU 阈值3. 可视化检测结果在图像/视频上绘制边界框和类别标签实时显示目标位置、目标总数、置信度、用时等信息4. 结构化结果输出表格展示每个检测目标的序号、类别、置信度和坐标统计每类目标的检测总数支持将检测结果保存为 CSV 文件5. 跨设备兼容自动判断是否支持 GPU优先使用 GPU 加速支持主流浏览器访问Chrome / Edge / Firefox总结本项目以茶叶病害为检测对象完成从数据标注到系统部署的全流程开发先对1153张茶叶图像含藻类叶斑、褐色疫病、灰色疫病三类病害完成标注转换为YOLO支持的格式后以yolov8n.pt为基础权重设置100轮训练、batch64、输入分辨率640×640采用自动优化器完成模型训练最终基于Flask框架搭建Web可视化检测系统实现病害图像的上传检测与结果展示。模型实测指标显示整体Precision为0.665、Recall为0.613mAP0.5达0.649mAP0.5:0.95为0.462对病害的初步识别能力已具备但仍存在明显不足三类病害中褐色疫病与灰色疫病的叶片特征重叠度高易出现类别混淆小尺寸病害目标的检测召回率偏低漏检情况较多基于yolov8n的模型在普通CPU部署环境下单张图像推理耗时约0.15s难以满足高并发场景下的实时检测需求。后续可从三方面优化一是扩充数据集并引入CutMix、Mosaic等数据增强策略提升模型泛化性二是尝试轻量化模型或量化压缩优化推理速度三是针对类别混淆问题补充易混淆类别的标注样本增强特征区分度。随项目附带的源码文件结构说明随项目附带的设计说明书docx缩略图下载链接https://mbd.pub/o/bread/YZaTm5lraw