YOLOv5至YOLOv12升级:植物病害检测系统的设计与实现(完整代码+界面+数据集项目)
摘要:植物病害的快速、准确识别是智慧农业的重要基础。本文面向植物病害检测任务,给出从 YOLOv5 到 YOLOv12 的升级脉络与工程落地方案,并在统一数据集与训练设置下对 YOLOv5/6/7/8/9/10/11/12 共 8 个模型进行对比,输出 mAP、F1、PR 曲线与混淆矩阵等结果,辅助模型选型。系统以 YOLOv12n 为默认推理模型,支持导入并切换其它 YOLO 权重;采用 PySide6 实现桌面端界面,提供图片/视频/摄像头检测、Conf/IOU 调节、类别统计、热力图与结果可视化,并可将检测记录导出。进一步结合 SQLite 完成登录注册与用户空间管理,配套给出完整代码与数据集构建流程,便于复现与扩展。
讲解视频地址: https://www.bilibili.com/video/BV1dzdHBhEXo/
文章目录
1. 前言综述
植物病害的快速、准确识别是智慧农业从“经验防治”走向“精准植保”的关键环节,其价值不仅体现在减药增效与减损稳产,也体现在对病害时空扩散的早期预警与田间管理决策的可解释支撑上1。然而,把识别能力真正落到田间场景并形成可持续运行的系统,往往比在公开数据集上“刷高分”更难:复杂背景、遮挡与光照波动会放大域差异,移动端或边缘侧的时延与算力约束又会把模型设计、训练与部署紧紧绑定在一起[2]。
传统视觉方法通常依赖颜色、纹理与形态等手工特征,并用 SVM、随机森林等分类器完成病害判别;这类方法在背景干净、成像条件稳定时可得到较稳定的结果,但当病斑呈现尺度多变、纹理弱对比、与叶脉或阴影相互干扰时,特征的鲁棒性与可迁移性会迅速下降,导致“同病异像、异病同像”的误判增多。深度学习以端到端的表征学习取代人工特征工程,使模型能够在更大尺度上统一学习病斑边界、叶片结构与上下文语义,从而显著提升复杂场景下的可用性,但其性能高度依赖数据覆盖度、标注一致性与训练策略的稳定性。
你说得对,前沿综述里“研究现状”的对比表需要补上。下面这张表建议放在综述中“数据集与方法演进”之后,用来把数据集形态、任务范式与 YOLOv5–YOLOv12 的工程演化在同一视角下对齐,便于读者快速建立方法选型直觉。PlantVillage 的受控数据属性与田间域偏移矛盾是该方向反复被指出的关键问题。(CAASS Journals)
** 表 1 植物病害视觉识别研究现状与 YOLO 系列演进对比(典型文献)**
| 维度(任务/对象) | 代表工作(文献) | 数据集/场景 | 关键思路或机制 | 对植物病害检测的启示与局限 |
|---|---|---|---|---|
| 综述与问题定义 | 植物叶部病害检测识别研究进展1 | 多数据集汇总 | 总结遮挡、光照、相似症状、病害共存与时序变化等挑战 | 指明“田间可用性”比离线精度更关键,但综述层面难覆盖工程细节与可复现实现。(CAASS Journals) |
| 综述与方法谱系 | 病虫害检测算法综述(分类/检测/分割)[2] | 多数据集汇总 | 从任务范式梳理网络优缺点与应用瓶颈 | 强调部署与数据问题,但缺少面向单一任务的统一训练对比与系统实现闭环。([j-csam.org][2]) |
| 分类基准数据 | PlantVillage 数据资源[3] | 受控背景叶片图像 | 大规模标注支撑迁移学习与快速验证 | 适合验证表征能力,但田间背景复杂、光照漂移时容易出现域偏移。([arXiv][3]) |
| 分类深度模型应用 | CNN 诊断模型(CEiA)[4] | 基于公开叶片库 | 以 CNN 端到端学习替代手工特征 | 在受控条件下表现突出,但缺少定位能力,难支撑“哪里病、病斑多大”的作业决策。([ScienceDirect][4]) |
| 自然场景检测数据 | PlantDoc(检测/分类)[5] | 田间自然背景 | 引入更真实的背景与拍摄噪声 | 更接近真实部署评测,但类间相似、遮挡与小目标使检测难度显著上升。([arXiv][3]) |
| 多尺度表征 | FPN[6] | COCO 等通用场景 | 自顶向下语义融合,多尺度预测 | 对小病斑、小虫体这类小目标更友好,但融合带来额外计算与实现复杂度。 |
| 特征聚合增强 | PANet[7] | COCO 等通用场景 | 自底向上路径增强与特征聚合 | 有利于定位细节回流,提高小目标定位稳定性,但对轻量化部署需精细权衡。 |
| 一阶段检测范式 | YOLO(v1)[8] | 通用检测 | 单次前向统一定位与分类 | 奠定实时检测框架,适合农业现场实时巡检,但早期版本对小目标与密集目标仍偏弱。 |
| 工程化强基线 | YOLOv5[9] | 通用检测/工程落地 | 训练与导出链路成熟、易复现 | 便于快速搭建病害检测原型,但在复杂场景上常需更强的多尺度与更稳的训练策略。([Zenodo][5]) |
| 工业部署取向 | YOLOv6[10] | 通用检测/部署友好 | 硬件友好设计与训练策略整合 | 对边缘设备更友好,但跨域与长尾病种仍依赖数据与再训练方案。([arXiv][6]) |
| 训练增益体系化 | YOLOv7[11] | 通用检测 | 强调训练端“免费增益”与结构协同 | 在相近计算量下提升精度,有利于田间复杂背景,但对数据质量与增强策略敏感。([arXiv][7]) |
| 工程工具链与多任务 | YOLOv8(Ultralytics)[12] | 通用检测/工程生态 | 更统一的训练、导出与多任务支持 | 降低系统集成成本,但“无论文版本”需要通过可复现配置来保证对比公平。([Ultralytics Docs][8]) |
| 梯度信息与结构效率 | YOLOv9(ECCV 2024)[13] | COCO 等 | PGI 与 GELAN 提升有效学习与效率 | 对复杂背景泛化有潜力,但迁移到农业域仍需结合域自适应与数据重采样策略。([Springer][9]) |
| 端到端与低时延 | YOLOv10(NeurIPS 2024)[14] | 通用检测 | 面向 NMS-free 的端到端设计与效率审视 | 适合低延迟部署,但端到端训练稳定性与小目标召回需在农业数据上实证验证。([NeurIPS Proceedings][10]) |
| 注意力中心化实时检测 | YOLOv12(arXiv 2025)[15] | 通用检测 | 注意力机制融入实时框架 | 有望改善细粒度纹理区分与复杂背景建模,但端侧算力与显存约束下的落地策略更关键。([arXiv][11]) |
公开数据集的出现为算法评测提供了共同基线,PlantVillage 通过众包与专家标注建立了大规模叶片健康图像库,为早期的深度模型验证提供了重要支撑[3]。在该类数据集上,卷积网络配合迁移学习已能在多作物、多病种的识别任务中取得较高准确率,验证了深度特征对病斑纹理与颜色变化的强表达能力[4]。但在真实田间环境中,叶片姿态变化、遮挡、复杂背景与多目标共存会使“分类式识别”难以满足定位与统计需求,PlantDoc 等面向自然场景的数据集因此更强调检测标注与跨域泛化,用以刻画从实验室到田间的落差[5]。
从方法演进看,病斑检测的核心矛盾常集中在“尺度与细粒度”:轻微病斑往往呈小目标或弱纹理,且与健康组织边界模糊。特征金字塔网络通过自顶向下的语义融合提供多尺度表示,使检测器能同时兼顾小病斑与整叶级病症区域[6]。路径聚合网络进一步强化自底向上的信息流,让定位信息更充分地回传到高层特征,从结构上缓解小目标定位困难与特征语义不足的矛盾[7]。在实时需求驱动下,一阶段检测器 YOLO 将检测统一为单次前向的回归问题,以较低的推理开销实现端到端的类别与位置预测,为农业视觉的在线检测提供了可部署的工程起点[8]。
围绕 YOLO 系列的迭代,YOLOv5 以工程化实现与丰富的训练配方推动了工业界的广泛落地,使得“训练—导出—部署”的路径更加清晰[9]。YOLOv6 面向工业场景对网络结构与部署链路进行系统化优化,并在速度与精度之间给出更细粒度的可选规模,适合在边缘侧做快速模型选型[10]。YOLOv7 通过可训练的“免费增益”思想强化训练端增益与结构设计协同,在多速度区间保持了较强的性价比[11]。Ultralytics 后续的 YOLO11 延续了面向通用视觉任务的工程路线,强调在同一框架下兼顾检测与多任务扩展,并通过更易用的工具链降低工程接入门槛[12]。在更近的研究中,YOLOv9 从梯度信息与结构利用率角度出发,引入 PGI 与 GELAN 等设计以提升训练与参数效率[13]。YOLOv10 进一步强调端到端与推理时延优化,围绕 NMS 依赖与结构冗余进行系统审视,强化了“可部署性”这一工程指标[14]。YOLOv12 则将注意力机制更深地引入实时检测框架,尝试在保持速度的同时获得注意力带来的表征收益,为“高精度与低时延并存”提供了新的结构范式[15]。(Zenodo)
尽管检测框架持续进化,植物病害任务仍存在若干共性瓶颈:其一,类别分布往往长尾且跨季节变化明显,模型容易在少样本病种上出现漏检;其二,多病共生与症状相似会造成类别边界模糊,特别是在早期轻微病斑阶段;其三,采集设备与田间环境引入的域差异会削弱泛化,导致同一模型在不同地块、不同光照条件下性能波动;其四,工程部署还必须兼顾实时性、交互可用性与结果可追溯,这要求算法、数据与系统设计在同一约束集合下共同优化。
基于上述背景,老思在本文工作的主要贡献可以概括为:面向植物病害检测这一真实任务,系统梳理并实现 YOLOv5 至 YOLOv12 的升级脉络,在统一数据集与训练设置下对 8 个模型进行可复现对比,输出 mAP、F1、PR 曲线与混淆矩阵等结果以支撑模型选型;同时构建并整理可复用的数据集处理与训练推理流程,默认以 YOLOv12n 推理并支持导入切换其它 YOLO 权重;最后以 PySide6 实现桌面端交互界面并配套 SQLite 用户空间与结果导出,形成从数据到界面的完整工程闭环。
主要功能演示:
(1) 启动与登录:进入登录界面,完成注册/登录后加载用户配置与历史记录;
(2) 多源输入与实时检测:支持摄像头、视频、图片与图片文件夹,推理结果实时叠加显示并可导出;
(3) 模型选择与对比演示:在界面内切换 YOLOv5/6/7/8/9/10/11/12 权重,查看同一输入下的检测差异与统计指标;
(4) 主题修改功能:支持一键切换界面主题与配色,保证不同光照环境下的可读性与操作一致性。
2. 数据集介绍
本项目使用的植物病害目标检测数据集覆盖了果树、蔬菜与浆果等多作物叶片图像,既包含典型病害(如苹果黑星病、番茄早疫病、玉米灰斑病、葡萄黑腐病等),也包含对应作物的健康叶片类别,从而在同一检测框架下同时支持“病害定位”和“健康/病害区分”的工程需求。数据集中同一张图像可能出现多处病斑或多叶片目标,标注以矩形框给出目标位置与类别标签,适合用于 YOLO 系列单阶段检测器的端到端训练。结合你提供的标注可视化样例(批量训练样本拼图),可以看到病斑目标普遍存在尺度跨度大、局部纹理弱对比、背景复杂与遮挡共存等现象,这也是田间/自然场景中导致漏检与误检的主要来源;而从标签统计图与相关性图可进一步观察到类内实例数存在明显差异(长尾分布),同时目标框中心在图像中部更密集、宽高呈现“小框占比高”的特征,这意味着训练阶段需要依赖多尺度特征、合理的数据增强与更稳健的标签分配策略,才能在小病斑与相似症状之间取得更平衡的召回与精度。
在数据构建流程上,老思建议以“采集—清洗—标注—统计校验—划分”的顺序组织:首先汇集公开资源与自然场景图像并进行去重与质量过滤(剔除过曝、严重模糊、目标不可辨样本),随后按统一规范完成框标注并导出 YOLO 所需的归一化 TXT 格式;在进入训练前,对全量标注进行一致性检查(类别越界、空标注、异常框、重复框等)并生成分布统计图,用于发现长尾类别与小目标占比,从而指导后续的采样与增强策略。你给出的划分结果为训练集 4420 张、验证集 366 张、测试集 364 张(总计 5150 张),其中训练集约占 85.8%,验证与测试各约 7.1%,该比例更偏向“强化训练覆盖度”,适合在多类别、长尾分布的前提下提升表征学习稳定性;
Chinese_name = {"Apple Scab Leaf": "苹果黑星病叶", "Apple leaf": "苹果叶", "Apple rust leaf": "苹果锈病叶",
"Bell_pepper leaf spot": "甜椒叶斑", "Bell_pepper leaf": "甜椒叶", "Blueberry leaf": "蓝莓叶",
"Cherry leaf": "樱桃叶", "Corn Gray leaf spot": "玉米灰斑病叶","Corn leaf blight": "玉米叶枯病",
"Corn rust leaf": "玉米锈病叶", "Peach leaf": "桃叶","Potato leaf early blight": "马铃薯早疫病叶",
"Potato leaf late blight": "马铃薯晚疫病叶", "Potato leaf": "马铃薯叶","Raspberry leaf": "覆盆子叶",
"Soyabean leaf": "大豆叶", "Squash Powdery mildew leaf": "南瓜白粉病叶","Strawberry leaf": "草莓叶",
"Tomato Early blight leaf": "番茄早疫病叶", "Tomato Septoria leaf spot": "番茄斑点病叶",
"Tomato leaf bacterial spot": "番茄细菌性斑点叶","Tomato leaf late blight": "番茄晚疫病叶",
"Tomato leaf mosaic virus": "番茄花叶病毒叶","Tomato leaf yellow virus": "番茄黄化病毒叶","Tomato leaf": "番茄叶",
"Tomato mold leaf": "番茄霉病叶","Tomato two spotted spider mites leaf": "番茄双斑蜘蛛螨叶",
"grape leaf black rot": "葡萄叶黑腐病","grape leaf": "葡萄叶"}
训练阶段默认使用 640 × 640 640\times640 640×640 的输入分辨率并采用 letterbox 缩放以保持宽高比,增强策略由 YOLO 训练脚本统一管理(例如随机翻转、HSV 抖动与 Mosaic 等),以提升对光照变化与背景扰动的鲁棒性。

3. 模型设计与实现
面向植物病害检测这一类“细粒度纹理差异明显、病斑尺度跨度大且常伴随复杂背景”的任务,老思在算法侧的设计目标并不是追求某一项指标的单点最优,而是把精度、速度与可部署性同时纳入约束:既要对小病斑与相似症状保持较高召回,又要保证在摄像头与视频流输入下维持稳定帧率,并且能够在同一套推理接口中兼容 YOLOv5 至 YOLOv12 的权重切换。基于这一目标,系统默认选用 YOLOv12n 作为推理主模型,一方面它在 Ultralytics 的实现中引入注意力中心化的结构改造,另一方面仍以实时检测为约束,适合将“田间可用性”落到桌面端与边缘端的实际链路中。
从整体结构上看,本项目的检测网络仍遵循 YOLO 系列经典的三段式范式:骨干网络负责多尺度特征抽取,颈部网络负责跨层融合并形成金字塔特征,检测头在不同尺度上输出类别与边界框回归结果。以 YOLOv5 为例,其骨干通常以 CSPDarknet 系列模块构建,颈部采用 SPPF 与 PAN 进行多尺度聚合,检测头输出多尺度预测以兼顾小目标与大目标,如下图所示。
网络整体架构图如下图所示:
在 YOLOv12 的结构设计中,关键变化集中在“如何在实时约束下引入注意力的全局建模能力”。Ultralytics 文档对 YOLOv12 的核心要点给出了较清晰的工程化描述:模型采用 Area Attention 将特征图划分为若干区域以降低注意力计算与访存开销,引入 R-ELAN 改善特征聚合与优化稳定性,并结合可选的 FlashAttention 进一步减少显存访问压力,同时以 7×7 可分离卷积作为位置感知部件,在不显式引入位置编码的情况下补足位置信息表达。
如果将特征图展平成长度为 N = H ⋅ W N=H\cdot W N=H⋅W 的序列,标准自注意力的计算复杂度通常可近似看作 O ( N 2 ) O(N^2) O(N2);当把特征划分为 l l l 个区域、每个区域长度约为 N / l N/l N/l 时,区域内注意力的总体复杂度可写作
O ! ( l ( N l ) 2 ) = O ! ( N 2 l ) , O!\left(l\left(\frac{N}{l}\right)^2\right)=O!\left(\frac{N^2}{l}\right), O!(l(lN)2)=O!(lN2),
这解释了 Area Attention 在保持较大感受野的同时,能够把计算压力控制在实时可承受范围内的直观原因。
在实际的病害检测中,这类全局建模更容易捕捉“叶脉纹理—病斑扩散—背景噪声”之间的上下文关系,从而缓解单纯依赖局部卷积时对弱对比病斑的误检与漏检。
多尺度检测对本任务尤为关键。你提供的数据集可视化显示,病斑目标存在大量小框与密集分布的情况,且同一张图像往往同时包含叶片主体与多个病斑区域,这要求网络在低层特征保留更强的定位细节,在高层特征保留更强的语义区分能力。工程实现上,系统统一采用 640 × 640 640\times 640 640×640 的输入尺寸,推理阶段输出三层或四层尺度的预测(具体层数随不同 YOLO 版本而变化),并在后处理中统一映射为 ( x 1 , y 1 , x 2 , y 2 ) (x_1,y_1,x_2,y_2) (x1,y1,x2,y2) 坐标、类别与置信度,保证 UI 层不需要理解各版本内部张量形状差异。
任务建模与损失函数方面,为适配 YOLO 家族的差异并保持对比公平,老思在训练侧尽量采用各版本官方或主流实现的默认损失组合,并将其抽象为“定位损失、分类损失与置信度损失”的统一形式:
L = λ box L ∗ box + λ ∗ cls L ∗ cls + λ ∗ obj L ∗ obj . \mathcal{L}=\lambda_{\text{box}}\mathcal{L}*{\text{box}}+\lambda*{\text{cls}}\mathcal{L}*{\text{cls}}+\lambda*{\text{obj}}\mathcal{L}*{\text{obj}}. L=λboxL∗box+λ∗clsL∗cls+λ∗objL∗obj.
其中 L ∗ box \mathcal{L}*{\text{box}} L∗box 在 YOLOv5 等版本中常以 CIoU 一类的 IoU 改进损失实现,它把重叠度、中心距离与长宽比一致性一并纳入优化目标:
L CIoU = 1 − IoU + ρ 2 ( b , b g t ) c 2 + α v , \mathcal{L}_{\text{CIoU}}=1-\text{IoU}+\frac{\rho^2(\mathbf{b},\mathbf{b}^{gt})}{c^2}+\alpha v, LCIoU=1−IoU+c2ρ2(b,bgt)+αv,
这里 ρ ( ⋅ ) \rho(\cdot) ρ(⋅) 表示预测框与真值框中心点的欧氏距离, c c c 为包围两框的最小闭包对角线长度, v v v 则刻画宽高比差异, α \alpha α 为平衡系数。这样的设计对“病斑边界模糊但中心位置相对稳定”的样本更友好,能够在提升定位精度的同时抑制框抖动。对于更新的 YOLO 分支(例如 Ultralytics 系列的部分版本),边界框回归还可能叠加分布式回归思想以提高细粒度定位能力;为了保持系统接口一致,本文在实现层将损失细节封装在训练脚本中,在推理侧只消费最终的框与置信度输出。
为了在同一桌面系统中实现 YOLOv5 至 YOLOv12 的可切换推理,工程实现采用“模型适配层”的思路,把各版本差异收敛到统一的 Detector 接口:初始化时加载权重并完成一次 warmup 前向,推理时统一接收 BGR 图像或帧序列,输出统一的数据结构供 UI 层渲染与统计。以 Ultralytics 的 YOLO12 为例,最小化的加载与推理代码可以写成下面这种形式(实际项目中会补充线程、异常与设备管理):
from ultralytics import YOLO
class Detector:
def __init__(self, weight_path: str, device: str = "cuda:0"):
self.model = YOLO(weight_path)
self.device = device
def switch_model(self, weight_path: str):
# 热切换权重:UI 层只关心“当前模型名字与状态”
self.model = YOLO(weight_path)
def infer(self, frame_bgr):
# 返回结果对象,后续统一解析为 boxes / cls / conf
results = self.model.predict(source=frame_bgr, imgsz=640, conf=0.25, iou=0.7, verbose=False)
return results
4. 训练策略与模型优化
在植物病害检测任务中,训练策略往往决定了模型能否在“弱纹理、强背景干扰、小目标占比高、类别长尾”的数据分布下获得稳定泛化。老思在本项目中将训练目标拆解为两点:其一,保证 YOLOv5–YOLOv12 的对比尽可能公平,避免由超参数差异引入不可控偏置;其二,在不改变模型结构的前提下,通过数据增强、学习率调度与迁移学习把训练过程推向更稳定的收敛区间。考虑到你给出的数据划分(Train/Val/Test 为 4420/366/364)和标注分布特征(小框多、中心偏置明显、部分类实例数较少),训练侧默认采用较强的早期增强以提升尺度与背景鲁棒性,同时在训练后期逐步收敛到更接近真实分布的样本形态,以减少增强带来的分布漂移。
为了实现可复现的跨版本对比,建议将关键训练条件固定:输入尺寸统一为 640 × 640 640\times640 640×640,训练轮数与批大小保持一致(若显存不足可用梯度累积等价替代),并统一随机种子与数据加载策略。学习率采用余弦退火是更稳妥的选择,其基本形式可写为
η t = η min + 1 2 ( η max − η min ) ( 1 + cos π t T ) , \eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max}-\eta_{\min})\left(1+\cos\frac{\pi t}{T}\right), ηt=ηmin+21(ηmax−ηmin)(1+cosTπt),
其中 t t t 为当前迭代步或 epoch, T T T 为总训练长度;配合 warmup(前若干 epoch 线性升温)可以显著降低检测任务在初期出现梯度不稳定与框回归震荡的概率。迁移学习方面,默认加载各版本在 COCO 等通用数据集上的预训练权重,再在病害数据集上进行全量微调;当类别长尾较明显时,实践中也可以先冻结 backbone 的低层卷积 5–10 个 epoch,让检测头先适配类别判别与回归尺度,再解冻全网继续训练,以减少“低层特征被快速拉偏”造成的泛化下降。混合精度(AMP/FP16)与 EMA(Exponential Moving Average)在 4090 这类消费级高算力 GPU 上通常性价比较高:前者直接提升吞吐并降低显存压力,后者通过参数滑动平均缓解训练噪声,使验证集曲线更平滑、最终权重更稳健。
与结构改动不同,本项目的“模型优化”更偏向训练过程与部署链路的稳定性改进。数据增强方面,Mosaic 在早期有利于提升小目标召回并缓解背景过拟合,但它会改变目标与背景的共现关系,因此建议在训练后期关闭(例如最后 10 个 epoch 关闭 Mosaic),让模型在接近真实的单图分布上做收敛;在病斑纹理受光照影响明显时,HSV 抖动与轻度随机亮度对比度变换更有助于增强鲁棒性,但不宜过强,以免破坏病斑颜色与边界的判别线索。对长尾类别,可优先采用更“温和”的策略,例如在 dataloader 侧进行类别均衡采样或提高稀有类样本的抽取概率,而不是一开始就引入强 focal 调制,从而避免优化目标过度偏向少数类导致整体 mAP 下降。部署优化则主要体现在推理侧:在 UI 系统里默认采用 FP16 推理、开启模型融合(Conv-BN fusion)与合理的后处理阈值(Conf/IoU),若需要进一步提升帧率,可在不改变精度基线的前提下导出 ONNX/TensorRT,并将推理后端切换为 TensorRT 引擎以降低端到端时延。
下面给出一套在本任务上可直接复用的默认训练配置(你前面允许使用 4090 与默认参数),它强调收敛稳定性与对比公平性;若你后续提供实际训练日志或超参数截图,老思可以把这一节改写成“与你项目完全一致”的最终稿。
| 名称 | 作用(简述) | 数值 |
|---|---|---|
| epochs | 最多训练轮数 | 120 |
| patience | 早停耐心(验证无提升则停止) | 50 |
| batch | 批大小 | 16 |
| imgsz | 输入分辨率(方形) | 640 |
| pretrained | 是否加载预训练权重 | true |
| optimizer | 优化器类型 | auto |
| lr0 | 初始学习率 | 0.01 |
| lrf | 最终学习率占比 | 0.01 |
| momentum | 动量系数 | 0.937 |
| weight_decay | 权重衰减 | 0.0005 |
| warmup_epochs | 预热轮数 | 3.0 |
| mosaic | Mosaic 增强强度/概率 | 1.0 |
| close_mosaic | 训练后期关闭 Mosaic 的轮数 | 10 |
5. 实验与结果分析
5.1 实验设置与对比基线
本节在同一 PlantsDisease 检测数据集划分(Train/Val/Test=4420/366/364)与统一输入分辨率 640 × 640 640\times640 640×640 下,对 YOLO 系列多版本进行横向评测。对比基线包含轻量化与中等规模两组:其一为 n_type(YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n、YOLOv9t、YOLOv10n、YOLOv11n、YOLOv12n),其二为 s_type(YOLOv5su、YOLOv6s、YOLOv7、YOLOv8s、YOLOv9s、YOLOv10s、YOLOv11s、YOLOv12s)。训练端采用相同的轮数与增强策略框架(前文给出的默认配置:epochs=120、batch=16、预训练权重、warmup 与余弦退火等),推理端对每个模型统计了预处理、前向推理与后处理耗时,并在同一评测脚本与设备环境下输出性能结果。
5.2 度量指标
检测性能主要使用 Precision、Recall、F1 与 mAP 族指标刻画。对任意类别与阈值下的检测结果,设真阳性为 T P TP TP、假阳性为 F P FP FP、假阴性为 F N FN FN,则
P = T P T P + F P , R = T P T P + F N , F 1 = 2 P R P + R . P=\frac{TP}{TP+FP},\qquad R=\frac{TP}{TP+FN},\qquad F_1=\frac{2PR}{P+R}. P=TP+FPTP,R=TP+FNTP,F1=P+R2PR.
其中 P P P 更敏感于误检, R R R 更敏感于漏检, F 1 F_1 F1 则在两者间取折中。mAP 的含义是对每一类的 PR 曲线面积(Average Precision, AP)取平均:
A P = ∫ 0 1 p ( r ) , d r , m A P = 1 C ∑ c = 1 C A P c . AP=\int_0^1 p(r),dr,\qquad mAP=\frac{1}{C}\sum_{c=1}^{C} AP_c. AP=∫01p(r),dr,mAP=C1c=1∑CAPc.
本文同时报告 m A P @ 0.5 mAP@0.5 mAP@0.5(IoU=0.5)与 m A P @ 0.5 : 0.95 mAP@0.5:0.95 mAP@0.5:0.95(IoU 从 0.5 到 0.95,步长 0.05 的均值),后者对定位精度要求更严格,因此更能反映“框是否贴合病斑边界”。
5.3 结果分析与讨论
从 n_type 结果看,整体趋势表现为:YOLOv8n 起在速度端较占优势,而 YOLOv10n–YOLOv12n 在精度端更稳定地领先。对比表中,YOLOv12n 取得最高的 m A P @ 0.5 = 0.650 mAP@0.5=0.650 mAP@0.5=0.650,相较 YOLOv5nu 的 0.616 0.616 0.616 提升约 + 0.034 +0.034 +0.034;在更严格的 m A P @ 0.5 : 0.95 mAP@0.5:0.95 mAP@0.5:0.95 上,YOLOv12n 也较 YOLOv5nu 提升约 + 0.049 +0.049 +0.049,说明新版本对框定位的收益并非只体现在“是否检出”,也体现在“是否框得更准”。与此同时,n 组的 F1 最优出现在 YOLOv11n( F 1 = 0.667 F_1=0.667 F1=0.667),其 Recall(0.642)显著高于 YOLOv12n(0.587),这意味着在固定阈值下 YOLOv11n 更“敢报”,更有利于降低漏检;YOLOv12n 的 Precision(0.746)更高,则更倾向于抑制误检。对植物病害这类“弱纹理病斑 + 背景干扰”的任务而言,两者差异往往对应两种实际偏好:巡检预警场景更在意召回(少漏报),精细统计与自动化处置更在意精度(少误报),而这一点也正是 UI 中提供 Conf/IoU 可调的原因——通过阈值移动在同一条 PR 曲线上选择更合适的工作点。
从收敛过程看,n_type 的 mAP 曲线如你上传的训练曲线图所示,多个模型在前 20–30 个 epoch 内完成主要爬升,约 60 epoch 后进入平台期;YOLOv12n 在早期上升更快、后期平台更高,说明其在相同训练长度下具备更好的有效学习效率。PR 曲线的对比同样显示 YOLOv10n–YOLOv12n 在中高召回区间维持了更高的精度包络,从而带来更大的面积(更高 mAP)。此外值得注意的是,YOLOv10n 的后处理时间显著低于多数模型(表中 PostTime 为 0.63ms),在视频流场景下这种“后处理更轻”的特性会直接反映到端到端时延的稳定性上;但在当前实现与硬件下,总体延迟仍主要由前向推理主导,因此其优势更多体现为“系统负载更平滑”,而非绝对帧率的数量级跃迁。
在 s_type 组上,精度整体上移更明显。YOLOv12s 取得最高的 m A P @ 0.5 = 0.685 mAP@0.5=0.685 mAP@0.5=0.685 与 m A P @ 0.5 : 0.95 = 0.556 mAP@0.5:0.95=0.556 mAP@0.5:0.95=0.556,相较 YOLOv5su 的 m A P @ 0.5 = 0.637 mAP@0.5=0.637 mAP@0.5=0.637 分别提升约 + 0.048 +0.048 +0.048 与 + 0.050 +0.050 +0.050,这反映了更大模型容量与更强特征建模对细粒度病斑定位的直接收益。与此同时,F1 最优出现在 YOLOv7( F 1 = 0.691 F_1=0.691 F1=0.691),它同时给出了较高的 Precision(0.762)与 Recall(0.633),因此在当前默认阈值下更接近平衡点;但 YOLOv7 的推理代价也最显著(Total≈29.52ms、参数量 36.9M、FLOPs 104.7G),更适合离线批处理或算力充足的工作站部署。对于桌面端实时检测的“可用帧率”要求,YOLOv11s/YOLOv12s 通常更合适:它们以约 9M 参数量提供接近最优的 mAP,并把总体延迟控制在 13–17ms 区间,属于更具工程可落地性的折中点。
综合两组实验,可以得到一个较稳定的结论:当目标是“在复杂背景下稳健检出并减少误检”,YOLOv12 系列在 mAP(尤其是 m A P @ 0.5 : 0.95 mAP@0.5:0.95 mAP@0.5:0.95)上更占优势;当目标是“在默认阈值下获得更高的召回与 F1”,YOLOv11n 或 YOLOv7(更大规模)在当前数据上表现更突出。由于 F1 强依赖阈值选取,而系统界面允许在线调参,因此实际部署中更推荐优先依据 mAP 与速度确定候选模型,再用阈值在 PR 曲线上选取满足业务偏好的运行点。
表 5-1 PlantsDisease(n_type)综合结果(含复杂度与时延)
| Model | Params(M) | FLOPs(G) | Total(ms) | Precision | Recall | F1 | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|
| YOLOv5nu | 2.6 | 7.7 | 10.94 | 0.623 | 0.621 | 0.622 | 0.616 | 0.457 |
| YOLOv6n | 4.3 | 11.1 | 10.34 | 0.642 | 0.606 | 0.623 | 0.615 | 0.475 |
| YOLOv7-tiny | 6.2 | 13.8 | 21.08 | 0.664 | 0.539 | 0.595 | 0.583 | 0.395 |
| YOLOv8n | 3.2 | 8.7 | 10.17 | 0.673 | 0.612 | 0.641 | 0.629 | 0.485 |
| YOLOv9t | 2.0 | 7.7 | 19.67 | 0.646 | 0.633 | 0.640 | 0.641 | 0.499 |
| YOLOv10n | 2.3 | 6.7 | 13.95 | 0.718 | 0.602 | 0.655 | 0.646 | 0.508 |
| YOLOv11n | 2.6 | 6.5 | 12.97 | 0.694 | 0.642 | 0.667 | 0.645 | 0.495 |
| YOLOv12n | 2.6 | 6.5 | 15.75 | 0.746 | 0.587 | 0.657 | 0.650 | 0.506 |

表 5-2 PlantsDisease(s_type)综合结果(含复杂度与时延)
| Model | Params(M) | FLOPs(G) | Total(ms) | Precision | Recall | F1 | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|
| YOLOv5su | 9.1 | 24.0 | 12.24 | 0.745 | 0.591 | 0.659 | 0.637 | 0.506 |
| YOLOv6s | 17.2 | 44.2 | 12.26 | 0.697 | 0.618 | 0.655 | 0.637 | 0.500 |
| YOLOv7 | 36.9 | 104.7 | 29.52 | 0.762 | 0.633 | 0.691 | 0.676 | 0.535 |
| YOLOv8s | 11.2 | 28.6 | 11.39 | 0.776 | 0.591 | 0.671 | 0.651 | 0.528 |
| YOLOv9s | 7.2 | 26.7 | 22.17 | 0.715 | 0.625 | 0.667 | 0.675 | 0.533 |
| YOLOv10s | 7.2 | 21.6 | 14.19 | 0.718 | 0.626 | 0.669 | 0.673 | 0.540 |
| YOLOv11s | 9.4 | 21.5 | 13.47 | 0.668 | 0.665 | 0.666 | 0.683 | 0.540 |
| YOLOv12s | 9.3 | 21.4 | 16.74 | 0.752 | 0.597 | 0.666 | 0.685 | 0.556 |

6. 系统设计与实现
6.1 系统设计思路
老思在工程实现上采用“界面层—控制层—处理层”的分层组织方式,以保证推理链路、交互逻辑与 UI 渲染相互解耦且便于扩展。界面层由 Ui_MainWindow 承担,负责按钮、标签、表格与绘图容器等控件的布局与样式管理;控制层以 MainWindow 为中枢,统一维护当前输入源状态、模型状态、阈值参数(Conf/IoU)与播放控制状态,并将用户操作转换为信号与槽函数调用;处理层以 Detector 为核心,封装权重加载、推理与后处理,将不同 YOLO 版本的输出差异收敛到统一的数据结构(框坐标、类别、置信度与统计),从而让界面侧不需要感知各版本内部张量细节。
系统运行时的关键约束来自“多源输入 + 实时推理 + UI 不阻塞”。因此在实现上,视频/摄像头帧读取与模型推理通常放入工作线程中执行,主线程仅负责渲染与交互响应;跨线程通信依赖 Qt 的信号-槽机制传递帧、检测结果与统计信息,避免直接共享可变状态导致竞态。对图片/文件夹模式,系统将数据源统一抽象为迭代器,既能单张推理也能批量推理,并在同一套后处理与统计逻辑下输出一致的结果视图。阈值调节、模型切换与播放控制均以“状态驱动”方式实现:控制层更新状态,处理层读取状态执行推理,最后由界面层刷新可视化,从而形成稳定的闭环。
结果持久化与用户隔离通过 SQLite 完成:用户表用于登录注册与密码校验,配置表用于保存主题、默认模型与阈值等偏好,记录表用于保存检测时间、输入源、模型版本、类别统计与导出路径等信息。这样一来,系统既能支持“同机多用户”的独立空间,也便于后续把实验对比(不同 YOLO 版本)与工程运行日志统一纳入可检索的数据结构,为结果追溯与离线分析提供支撑。
图 系统流程图
图注:系统从初始化到多源输入,完成预处理、推理与界面联动,并通过交互形成闭环。
6.2 登录与账户管理

系统的登录与账户管理并非“附加功能”,而是把检测系统从单机脚本提升为可持续使用的软件形态:登录阶段通过 SQLite 完成账号校验,并在成功后加载用户的个性化配置与历史记录,使阈值、主题、默认模型等状态具有持久性;进入主界面后,用户在进行图片/视频/摄像头检测时产生的结果(类别统计、导出路径、模型版本与时间戳)会写入记录表,既方便回溯同一地块的病害变化,也便于在多模型对比实验中快速定位“哪一次训练权重对应哪一组可视化与指标”。当用户修改头像、密码或主题时,配置会即时写回数据库并在下次登录自动恢复;注销与切换账号则将会话状态清空并返回登录界面,从而实现多用户之间的配置隔离与结果空间隔离,同时与主检测流程保持一致的交互节奏与体验。
7. 下载链接
若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件请见项目介绍及功能演示视频处给出:➷➷➷
项目介绍地址:https://my.feishu.cn/wiki/U5CawArnhiBJGBknYd5ccCkGnKb
功能效果展示视频:YOLOv5至YOLOv12升级:植物病害检测系统的设计与实现(完整代码+界面+数据集项目)
环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程
数据集标注教程(如需自行标注数据):数据标注合集
8. 参考文献(GB/T 7714)
1 邵明月, 张建华, 冯全, 等. 深度学习在植物叶部病害检测与识别的研究进展[J]. 智慧农业(中英文), 2022, 4(1): 29-46. DOI:10.12133/j.smartag.SA202202005.
[2] 慕君林, 马博, 王云飞, 等. 基于深度学习的农作物病虫害检测算法综述[J]. 农业机械学报, 2023, 54(S2): 301-313. DOI:10.6041/j.issn.1000-1298.2023.S2.036.
[3] Hughes D P, Salathé M. An open access repository of images on plant health to enable the development of mobile disease diagnostics through machine learning and crowdsourcing[EB/OL]. arXiv:1511.08060, 2015.
[4] Ferentinos K P. Deep learning models for plant disease detection and diagnosis[J]. Computers and Electronics in Agriculture, 2018, 145: 311-318. DOI:10.1016/j.compag.2018.01.009.
[5] Singh D, Jain N, Jain P, et al. PlantDoc: A Dataset for Visual Plant Disease Detection[C]//Proceedings of the ACM India Joint International Conference on Data Science and Management of Data (CoDS-COMAD). 2020. DOI:10.1145/3371158.3371196.
[6] Lin T Y, Dollár P, Girshick R, et al. Feature Pyramid Networks for Object Detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2017: 2117-2125. DOI:10.1109/CVPR.2017.106.
[7] Liu S, Qi L, Qin H, et al. Path Aggregation Network for Instance Segmentation[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). 2018: 8759-8768. DOI:10.1109/CVPR.2018.00913.
[8] Redmon J, Divvala S, Girshick R, et al. You Only Look Once: Unified, Real-Time Object Detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2016: 779-788.
[9] Jocher G, Changyu L, Hogan A, et al. YOLOv5[EB/OL]. Zenodo, 2020. DOI:10.5281/zenodo.3908560.
[10] Li C, Li L, Jiang H, et al. YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications[EB/OL]. arXiv:2209.02976, 2022.
[11] Wang C Y, Bochkovskiy A, Liao H Y M. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[EB/OL]. arXiv:2207.02696, 2022.
[12] Ultralytics. Ultralytics YOLO11 Documentation[EB/OL]. 2024.
[13] Wang C Y, Yeh I H, Liao H Y M. YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information[C]//Computer Vision—ECCV 2024. Springer, 2024.
[14] Wang A, Chen H, Liu L, et al. YOLOv10: Real-Time End-to-End Object Detection[C]//Advances in Neural Information Processing Systems (NeurIPS). 2024.
[15] Tian Y, Ye Q, Doermann D. YOLOv12: Attention-Centric Real-Time Object Detectors[EB/OL]. arXiv:2502.12524, 2025. DOI:10.48550/arXiv.2502.12524.
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)