YOLOv5至YOLOv12升级:稻田虫害检测系统的设计与实现(完整代码+界面+数据集项目)

摘要 :稻田虫害的快速、准确检测是保障粮食安全与推进智慧农业落地的关键环节,但田间场景存在光照剧烈变化、目标尺度小且密集、遮挡与背景纹理复杂、虫体形态差异细微等挑战,传统人工巡检与基于手工特征的方法难以在效率与鲁棒性上同时满足需求。本文围绕"YOLOv5 至 YOLOv12 升级:稻田虫害检测系统的设计与实现"展开,系统性梳理并实现 YOLO 系列多版本(YOLOv5--YOLOv12,共 8 种模型) 在稻田虫害任务上的训练与部署流程,给出统一的数据处理、推理接口与可复现实验配置。面向工程应用,本文基于 PySide6 构建可交互的桌面端检测平台,支持图片/视频/摄像头多源输入,提供检测框与类别置信度展示、阈值参数(Conf/IoU)调节、类别统计与可视化分析等功能,并结合 SQLite 设计用户注册登录、个性化配置与结果持久化存储/导出机制,实现从数据集管理、模型选择切换到结果分析的完整闭环。文末提供 完整项目代码、界面工程与数据集构建与标注说明,并对不同 YOLO 版本的精度与速度表现进行对比分析,为稻田虫害智能监测的工程落地与相关研究复现提供可直接使用的参考。


文章目录

  • [1. 前言综述](#1. 前言综述)
  • [2. 数据集介绍](#2. 数据集介绍)
  • [3. 模型设计与实现](#3. 模型设计与实现)
  • [4. 训练策略与模型优化](#4. 训练策略与模型优化)
  • [5. 实验与结果分析](#5. 实验与结果分析)
  • [6. 系统设计与实现](#6. 系统设计与实现)
    • [6.1 系统设计思路](#6.1 系统设计思路)
    • [6.2 登录与账户管理](#6.2 登录与账户管理)
  • [7. 下载链接](#7. 下载链接)
  • [8. 参考文献(GB/T 7714)](#8. 参考文献(GB/T 7714))

➷点击跳转至文末所有涉及的完整代码文件下载页☇


1. 前言综述

稻田虫害监测的核心矛盾在于"防控要早、用药要准、现场要快":若仍以人工巡田与经验施药为主,往往难以兼顾覆盖范围、响应时效与用药精度,而基于视觉的自动检测在精准农业中已被反复证明具有替代高强度人工识别的现实价值与工程可落地性1。在这一背景下,将深度学习目标检测引入稻田虫害场景,不仅是"能不能识别"的算法问题,更牵涉到数据采集与标注体系、跨季节跨地块的泛化、边缘侧实时推理的稳定性以及面向非算法用户的交互式软件系统设计等一系列工程约束。

从研究对象看,稻田虫害呈现出典型的"小目标、密集、遮挡、背景相似、类间细粒度差异显著"的复合难点:虫体尺度在高分辨率图像中仍可能只占极少像素,群聚与黏连导致边界不清,叶片纹理与虫体颜色相近易引发误检漏检,同时虫龄与姿态变化又会放大类内差异。面向这类问题,数据基准的推动作用尤为关键,例如 Pest24 以"超小目标、多实例密集分布、高相似外观"为主要特征,为多目标虫害检测提供了标准化评测入口,也直观暴露了传统检测器在相对尺度、实例数量与目标黏连三类因素下的性能脆弱性2。与多目标检测互补,IP102 以大规模多类别昆虫害虫识别为目标,为虫害类别体系构建与长尾分布评估提供了更细粒度的参照框架[3];这两类数据范式共同指向一个结论:稻田虫害"可用数据的组织方式"本身就是方法学的一部分,直接决定了模型在真实生产场景中的可迁移性与可解释性。

在国内外研究进展方面,近年来工作逐步从"实验室条件下的虫体分类"转向"田间复杂背景下的检测与统计",并呈现出两条并行主线:其一是面向稻田场景构建多源异构数据与端到端识别管线,通过融合不同采集渠道、不同成像条件的数据来缓解单一数据源带来的域偏移问题[4];其二是围绕 YOLO 系列的轻量化与小目标增强展开结构改造与后处理优化,例如在 YOLOv5s 上引入位置感知卷积、注意力与 Soft-NMS 以改善遮挡与相邻目标的漏检问题[5]。更靠近工程应用的研究则强调在保证高帧率的同时提升小目标与遮挡条件下的鲁棒性,典型做法包括减少检测头以降低细粒度信息丢失、引入 CBAM 等注意力以抑制背景干扰、以及用更适配类别不均衡的回归/分类损失来稳定训练与提升召回[6]。与此同时,也有工作从数据层面对遮挡进行显式建模,通过随机裁剪与遮挡框模拟虫体重叠,并在特征融合阶段引入更强的多尺度表征模块来提升小目标分辨能力[7]。总体而言,研究重心已从单点指标最优逐步转向"数据---模型---部署"的一致性:同一检测器在不同采集设备、不同光照季节、不同虫害密度下是否仍能稳定输出,正在成为比离线 mAP 更具工程意义的评价维度。

研究现状对比表(稻田/农田虫害检测相关)

代表性路线 典型数据与场景 方法侧重点 优势 主要局限
标准化多虫害多目标数据集 自动虫情测报灯/诱捕器,多实例密集、小目标为主 数据基准 + 多检测器对比评测 促进算法横向可比、暴露小目标与黏连难点 与真实稻田冠层视角仍存在域差异
大规模多类别虫害识别基准 多类别昆虫害虫图像(偏识别/分类范式) 类别体系与长尾评估 有利于细粒度类别建模与类别扩展 对"检测+计数+定位"的支撑不足
多源异构稻田虫害数据与识别 田间/设备多源采集,跨条件分布 数据组织与域差异缓解 更贴近真实部署的泛化需求 标注成本高、数据清洗与对齐复杂
YOLOv5 系小目标与遮挡增强 稻田虫害图像,遮挡/相邻目标显著 注意力、位置建模、后处理优化 对小目标与黏连漏检更友好 结构改造后超参敏感、迁移到新地块需再调参
YOLOv8 系轻量化与高帧率 稻田虫害检测,强调实时性 精简结构、检测头重配、损失改造 速度快、便于边缘侧落地 类别不均衡与长尾仍需数据侧配合
数据增强驱动的小目标提升 遮挡模拟、跨源采集与更强特征融合 以遮挡与多尺度为核心的训练策略 对重叠与复杂背景更稳健 训练流程更复杂、对标注一致性要求更高
YOLO 系列持续升级(v9--v12) 通用实时检测基准向任务迁移 训练目标、结构效率、注意力引入 为"精度---速度"再平衡提供新工具箱 在农业长尾与极小目标下仍需任务化改造

面向"YOLOv5 至 YOLOv12"的方法演进,工程界之所以持续采用 YOLO 路线,本质在于其单阶段范式对实时性与部署复杂度更友好,而 YOLOv5 通过成熟的工程化训练/导出链路与可复现的开源发布,成为大量行业检测系统的事实基线[8]。在此之后,YOLO 的升级不再仅是堆叠卷积模块,而是更强调训练信息流与结构效率的系统性重构:例如 YOLOv9 以可编程梯度信息与更高效的层聚合网络为核心,试图从信息瓶颈与梯度可靠性角度提升从零训练的可达性能上限[9]。进一步地,YOLOv10 将端到端部署视角前置,通过 NMS-free 训练与组件级效率审视来降低推理时延与冗余计算,使"实时检测"更贴近可直接上线的工程形态[10]。在 Ultralytics 体系内,YOLO11 则以更统一的任务接口与训练策略迭代强化通用可用性,并为多任务扩展与部署提供更稳健的模型族支持[11];而 YOLOv12 开始系统性引入注意力机制,在尽量维持实时性的前提下增强全局建模能力,反映出实时检测从"纯卷积效率优化"走向"注意力可用化"的技术趋势[12]。对稻田虫害而言,这一演进意味着:模型侧可获得更强的长程依赖建模与更灵活的特征交互,但其能否在极小目标、强遮挡、强类不均衡的数据分布下兑现优势,仍取决于任务化的数据构建、训练策略与后处理设计是否匹配。

综合来看,稻田虫害检测系统的关键技术难点可以归纳为三类:第一,检测器需同时面对极端小目标与密集黏连,传统两阶段检测在精度上具备优势但难以满足端侧实时闭环的时延约束[13];第二,多尺度表征与特征融合决定了小目标信息能否在深层语义中被保留并可回传到检测头,因而特征金字塔式的多尺度建模仍是构建鲁棒检测器的基本手段[14];第三,端到端集合预测与注意力结构为复杂遮挡与全局上下文提供了新的建模路径,但其训练稳定性与计算开销需要与农业场景的部署条件共同权衡[15]。因此,老思在这篇博客中将问题定义为"可复现、可交互、可部署"的稻田虫害检测工程:以统一的数据集构建与评测协议为前提,将 YOLOv5--YOLOv12 置于同一任务域中做系统对比,并在此基础上实现包含完整训练代码、可视化界面与数据管理能力的稻田虫害检测系统原型;同时面向小目标与遮挡等关键失效模式,给出可解释的训练与结构侧改造方案,并提供可直接复用的项目级资源包,便于读者在真实地块与自有数据上二次开发。
主要功能演示:

(1)启动与登录:系统启动后进入登录界面,支持注册/登录/记住账号等基础能力;登录校验通过后自动加载该用户的历史检测记录与个性化配置(如默认模型、阈值与主题)。登录状态与用户信息由 SQLite 持久化,确保不同用户之间的模型偏好与结果空间相互隔离。

(2)多源输入与实时检测(摄像头/视频/图片/文件夹):主界面提供统一的数据入口,用户可一键切换摄像头实时流、导入本地视频、单张图片或图片文件夹;系统对多源输入采用同一推理管线,实时叠加检测框、类别与置信度,并同步展示 FPS 与类别计数。对于视频/摄像头可支持播放控制(开始/暂停/停止),并将检测结果按帧或按批次导出保存。

(3)模型选择与对比演示:界面提供 YOLOv5--YOLOv12 模型下拉选择,支持"同一输入源下快速切换权重并复现推理",以便直观看到不同版本在小目标、遮挡与背景干扰条件下的差异。对比模式下可在界面侧展示关键指标汇总(如 mAP、F1、推理耗时/FPS、参数量等)及推理结果并排查看,便于做工程选型与部署权衡。

(4)新增主题修改功能:系统内置多套主题(如浅色/深色/高对比度等),支持一键切换界面配色、字体与控件风格,并可联动替换图标与背景图,保证在不同光照与屏幕条件下的可读性。主题设置随用户账号保存,重新登录可自动恢复上次的界面外观,实现"同一套系统,多用户不同视觉偏好"的体验。


2. 数据集介绍

本项目面向稻田虫害的田间复杂背景检测需求,构建了一个包含 6 类典型害虫的目标检测数据集,覆盖叶片纹理干扰、遮挡黏连、尺度极小以及光照变化等常见现场因素。数据集总计 5,229 张图像,其中训练集 4,178 张、验证集 546 张、测试集 505 张,划分比例约为 79.9%/10.4%/9.7%,能够在保证训练充分性的同时,为超参数选择与最终泛化评估保留稳定的独立样本。类别体系采用英文标签与中文名一一对应:brown-planthopper(褐飞虱)、green-leafhopper(绿叶蝉)、leaf-folder(卷叶螟)、rice-bug(水稻飞虱)、stem-borer(稻杆螟)、whorl-maggot(稻纵卷叶螟)。标注采用矩形框形式,使用 LabelImg 完成逐图框选,并导出为 YOLO TXT 归一化格式(以 ( x c , y c , w , h ) (x_c,y_c,w,h) (xc,yc,w,h) 表示,均归一化到 [ 0 , 1 ] [0,1] [0,1]),从而与 YOLOv5--YOLOv12 的训练/推理管线保持一致。

python 复制代码
Chinese_name = {'brown-planthopper': "褐飞虱", "green-leafhopper": "绿叶蝉", "leaf-folder": "卷叶螟", "rice-bug": "水稻飞虱", "stem-borer": "稻杆螟", "whorl-maggot": "稻纵卷叶螟"}

从统计特征看,类别实例数整体较为均衡,但仍存在一定幅度的长尾倾向:褐飞虱与稻纵卷叶螟实例相对更多,而绿叶蝉与稻杆螟略少;这意味着模型训练中需要同时关注"高频类的误检抑制"与"低频类的召回稳定性"。标签空间分布上,目标中心点在图像中部区域更密集,反映了田间拍摄/采集时的对焦与构图习惯;宽高分布明显偏向小尺度目标,尤其在较小宽度与高度区域密度最高,说明该任务天然更接近"小目标密集检测"而非一般尺度目标检测。基于上述特性,训练阶段通常采用 640 × 640 640\times 640 640×640 的输入尺寸以兼顾速度与小目标可分辨性,并配合尺度扰动与拼接类增强(如 Mosaic)来提升不同虫体大小、姿态与遮挡条件下的鲁棒性(示例批次可视化中已能观察到多实例、遮挡与背景纹理对比带来的挑战)。

📊 数据集规格说明 (Dataset Specification)

维度 参数项 详细数据
基础信息 标注软件 LabelImg
标注格式 YOLO TXT (Normalized)
数量统计 训练集 (Train) 4,178 张 (79.9%)
验证集 (Val) 546 张 (10.4%)
测试集 (Test) 505 张 (9.7%)
总计 (Total) 5,229 张
类别清单 Class ID: 0 brown-planthopper(褐飞虱)
Class ID: 1 green-leafhopper(绿叶蝉)
Class ID: 2 leaf-folder(卷叶螟)
Class ID: 3 rice-bug(水稻飞虱)
Class ID: 4 stem-borer(稻杆螟)
Class ID: 5 whorl-maggot(稻纵卷叶螟)
图像规格 输入尺寸 640 * 640
数据来源 实地拍摄 / 诱捕器采集 / 公开图像清洗融合(以项目实际采集为准)

3. 模型设计与实现

稻田虫害检测在视觉上天然"刁钻":目标往往尺度小、纹理弱、与稻叶背景颜色相近,且田间采集存在强光、逆光、阴影、运动模糊与遮挡并存的情况。老思在系统侧把任务拆成两个必须同时满足的约束:其一,检测框要"准",尤其要守住小目标召回;其二,推理要"快",因为 UI 需要覆盖摄像头/视频的实时流,而不是只做离线评测。基线模型因此采用 YOLOv12n(nano)作为默认推理骨干,并在界面中保留 YOLOv5--YOLOv12 的权重切换入口,用同一套推理后处理与可视化链路完成公平对比;这样既能利用 YOLO 家族单阶段检测的低延迟优势,又能把模型演进带来的结构差异映射到同一任务上,便于解释性能变化的来源。YOLOv12 以"注意力为中心"的设计切入,并明确引入区域注意力(Area Attention)、R-ELAN 等组件以在保持实时性的前提下提升表征能力,同时允许可选 FlashAttention 加速但默认并不强依赖。(Ultralytics Docs)

从网络拓扑上看,系统仍遵循 YOLO 系列最稳定的工程范式:Backbone 负责多层特征提取,Neck 负责跨层/跨尺度融合,Head 在多个尺度上同时输出分类置信度与边界框回归量。对虫害这种小目标占比高的场景,Backbone 输出的高分辨率特征层(例如 P 3 P3 P3,必要时扩展到更浅层的 P 2 P2 P2)更关键;Neck 通过自顶向下与自底向上的融合路径把语义信息回灌到高分辨率层,从而降低"虫体被叶脉纹理淹没"的概率。整体架构的典型示意可以参考下图(以 YOLOv5 架构图作为通用骨架示例,便于对照理解 backbone--neck--head 的数据流)。

在 YOLOv12 的实现里,最值得强调的是其注意力机制并非简单堆叠"标准自注意力",而是通过区域划分的方式在较大感受野与计算效率之间做折中:将特征图按水平或垂直方向划分为若干区域,在区域内完成注意力计算,避免全局注意力带来的二次方复杂度膨胀;同时,R-ELAN 以残差与更利于优化的聚合结构缓解"大模型注意力化"带来的训练不稳定问题,并通过"position perceiver"的 7 × 7 7\times 7 7×7 可分离卷积为注意力模块提供隐式位置信息,而不是依赖显式位置编码。对稻田虫害而言,这类设计的直观收益是:注意力更容易把"虫体---稻叶---背景"的关系作为整体去建模,从而在强背景干扰与局部遮挡下保持更稳的判别线索。(Ultralytics Docs)

检测头与后处理部分,为了在 UI 侧保持统一体验,系统把不同 YOLO 版本的输出都规约到同一抽象:每个候选框包含类别置信度 p p p、边界框 b = ( x , y , w , h ) b=(x,y,w,h) b=(x,y,w,h)(归一化或像素尺度由框架内部处理)、以及可选的类别分数向量。边界框质量用 IoU 度量:
I o U ( B , B ∗ ) = ∣ B ∩ B ∗ ∣ ∣ B ∪ B ∗ ∣ , \mathrm{IoU}(B, B^*)=\frac{|B\cap B^*|}{|B\cup B^*|}, IoU(B,B∗)=∣B∪B∗∣∣B∩B∗∣,

推理阶段通常仍采用 NMS(或版本自带的等价抑制机制)去除高度重叠候选框:对同类别候选按置信度排序,若 I o U ( B i , B j ) > τ \mathrm{IoU}(B_i,B_j)>\tau IoU(Bi,Bj)>τ 则抑制较低分者。对于小目标密集出现的叶面区域, τ \tau τ 的选择会显著影响"漏检/重检"的权衡,因此在 UI 里保留 IoU 阈值滑条,便于现场根据虫害密度与画面分辨率做快速调参。

训练目标函数层面,工程上更倾向采用"分类损失 + 回归损失 + 分布回归"的组合,以便同时优化类别可分性与定位精度。以 Ultralytics 生态常用写法为例,可把总体损失写成:
L = λ box L IoU + λ cls L cls + λ dfl L dfl , L = \lambda_{\text{box}}L_{\text{IoU}}+\lambda_{\text{cls}}L_{\text{cls}}+\lambda_{\text{dfl}}L_{\text{dfl}}, L=λboxLIoU+λclsLcls+λdflLdfl,

其中 L cls L_{\text{cls}} Lcls 多为二元交叉熵(多标签形式)或等价实现, L IoU L_{\text{IoU}} LIoU 采用 IoU/CIoU 等改进项以提升收敛稳定性, L dfl L_{\text{dfl}} Ldfl(Distribution Focal Loss)用于把边界框回归从"点估计"转为"离散分布估计",在小目标与边界模糊时通常更稳。实际工程中这三项的权重常随版本默认超参设定而变化,但系统在代码层把它们保留为可覆写配置,确保后续做虫害小目标专项改进(例如更强的浅层特征、或更细粒度的框回归)时不必重构训练管线。

实现上,模型侧封装为 Detector 类:负责权重加载、设备选择(CPU/GPU)、批量推理、结果解析与绘制信息的输出。核心接口只保留两个动作:load(model_path)infer(frame),使其能被 MainWindow 的信号槽统一调度,从而支持"同一输入流切换不同权重"并即时刷新检测框、类别与置信度统计。下面给出一个与 UI 解耦的最小推理骨架(示意性代码,便于对照你的项目结构做落地),其中 results 统一转成 UI 侧可消费的数据结构(框坐标、类别名、置信度):(GitHub)

python 复制代码
from ultralytics import YOLO

class Detector:
    def __init__(self, device="cuda:0", conf=0.25, iou=0.45):
        self.device = device
        self.conf = conf
        self.iou = iou
        self.model = None

    def load(self, weights_path: str):
        # 支持 yolov5~yolov12 的 *.pt,统一走 YOLO() 入口
        self.model = YOLO(weights_path)

    def infer(self, bgr_img):
        assert self.model is not None, "Call load() before infer()."
        preds = self.model.predict(
            source=bgr_img,
            conf=self.conf,
            iou=self.iou,
            device=self.device,
            verbose=False
        )[0]

        dets = []
        for box in preds.boxes:
            x1, y1, x2, y2 = box.xyxy[0].tolist()
            cls_id = int(box.cls[0].item())
            score = float(box.conf[0].item())
            dets.append({"xyxy": (x1, y1, x2, y2), "cls": cls_id, "score": score})
        return dets

4. 训练策略与模型优化

稻田虫害检测的训练策略,老思建议从"数据分布的真实性"和"端侧部署的可用性"两条线同时约束:前者强调小目标、密集、遮挡与光照变化要在训练中被充分暴露,避免模型只在干净样本上得到虚高指标;后者强调推理链路的稳定性与时延可控,因此训练阶段就需要明确输入尺寸、后处理阈值范围以及导出格式的约束,尽量减少"训练看起来很好、上线完全不对味"的落差。基于本数据集目标宽高分布偏小、中心分布相对集中(但仍存在大范围离散)的特点,训练中既要保留小目标的像素细节,又要提高模型对不同拍摄距离与虫体姿态的尺度鲁棒性,因此默认以 640 × 640 640\times640 640×640 作为兼顾速度与效果的起点,并通过多尺度扰动与拼接增强扩展有效尺度空间;如果后续发现极小目标召回不足,再考虑将输入提升到 960 960 960 或 1280 1280 1280,但要同步评估显存占用与实时帧率下降带来的工程代价。

在训练流程上,推荐采用"预训练权重迁移 + 分阶段微调"的稳健路径:首先加载通用检测预训练权重,快速对齐低层纹理与边缘表征;随后在验证集指标进入平台期后,逐步放开更深层参数并降低学习率,以避免小数据场景下出现明显的灾难性遗忘与过拟合。考虑到田间背景纹理强、虫体与叶面颜色相近,数据增强不宜只做"强随机",而应围绕真实成像退化建模:色彩扰动(HSV/亮度对比度)、轻度模糊与噪声用于模拟阴影与运动模糊;随机仿射与透视用于覆盖拍摄角度变化;Mosaic 通过拼接构造密集场景并提高小目标出现频率,但在训练后期应逐步关闭(例如最后 10 个 epoch 关闭)以缩小训练分布与验证分布之间的差距,从而稳定定位精度与置信度标定。对于类别实例数存在差异的情况,可在训练采样或损失权重上做轻度均衡(避免对少样本类的召回过度牺牲),并在验证阶段以每类 AP 与召回曲线监控"是否某一类被系统性忽略"。

优化器与学习率策略的选择,核心目标是让收敛过程"快而不躁"。在 YOLO 系列的工程实践中,SGD 与 AdamW 都能工作,但在数据增强较强、batch 较小且训练轮数较有限的情况下,采用带 warmup 的余弦退火或多段下降更容易获得稳定的最终性能;warmup 的作用在于避免前几个 epoch 的梯度波动把预训练特征破坏得太厉害。为了提高训练效率并降低显存压力,建议默认开启 AMP 混合精度训练与 EMA(指数滑动平均)权重,这两者通常能在不增加推理开销的前提下改善训练稳定性与验证集波动;同时配合早停(patience)在验证集长期无提升时终止训练,以节约算力并减少过拟合风险。若训练中出现"训练损失继续下降但验证指标下降"的典型过拟合迹象,优先从减弱增强强度、提高权重衰减、缩短训练轮数或适度冻结骨干网络入手,而不是盲目加大模型规模。

在模型部署优化方面,训练阶段就应同步考虑导出与推理引擎的可用性。常见做法是训练完成后导出 ONNX,并进一步使用 TensorRT 进行图优化与半精度(FP16)推理,以满足摄像头实时检测的延迟需求;同时在推理侧固定输入尺寸与 batch 策略,避免 UI 中频繁动态 shape 造成的编译/缓存抖动。对界面交互而言,置信度阈值(Conf)与 IoU 阈值(NMS)并不只是"可调参数",它们直接决定密集虫体场景下的漏检与重检平衡,因此建议在验证阶段统计不同阈值组合下的召回---精度变化,并把"可用范围"固化为 UI 滑条的合理上下限,降低非专业用户调参导致的极端输出。

下表给出本文默认采用的一组可复现实验配置(GPU 以 RTX 4090 为基准),后续在对比 YOLOv5--YOLOv12 时保持除模型结构外的训练策略尽量一致,以保证对比公平性。

名称 作用(简述) 数值
epochs 最多训练轮数 120
patience 早停耐心(验证无提升则停止) 50
batch 每次迭代的总批大小 16
imgsz 网络输入分辨率(方形) 640
pretrained 是否加载预训练权重 true
optimizer 优化器类型(auto 由框架选择) auto
lr0 初始学习率 0.01
lrf 最终学习率占比(余弦/多段下降底值) 0.01
momentum 动量/一阶动量系数 0.937
weight_decay 权重衰减(L2 正则) 0.0005
warmup_epochs 学习率预热轮数 3.0
mosaic Mosaic 数据增强强度/概率 1.0
close_mosaic 训练后期关闭 Mosaic 的轮数 10

5. 实验与结果分析

为保证不同 YOLO 版本之间的对比具有可解释性,本文在同一数据集划分(Train/Val/Test = 4178/546/505)与统一训练策略(imgsz=640,epochs=120,batch=16,加载预训练权重,后期关闭 Mosaic 等)下,分别训练并评估 YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n、YOLOv9t、YOLOv10n、YOLOv11n、YOLOv12n 等轻量模型族,同时给出 s 规格模型(YOLOv5su、YOLOv6s、YOLOv7、YOLOv8s、YOLOv9s、YOLOv10s、YOLOv11s、YOLOv12s)的精度与速度表现。推理耗时统计来自同一硬件环境(CSV 记录为 NVIDIA GeForce RTX 3070 Laptop GPU,8GB),以单张输入为单位分解为预处理、推理与后处理时间,从而更贴近 PySide6 实时界面中的端到端响应。

评价指标采用目标检测常规定义:精确率 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP、召回率 R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP,以及综合指标
F 1 = 2 P R P + R , F1=\frac{2PR}{P+R}, F1=P+R2PR,

精度以 m A P @ 0.5 \mathrm{mAP@0.5} mAP@0.5 与 m A P @ 0.5 : 0.95 \mathrm{mAP@0.5:0.95} mAP@0.5:0.95(下文记作 mAP50 与 mAP50-95)衡量,其中 mAP50 更敏感于"是否检出",mAP50-95 对定位误差更苛刻,更能反映小目标框回归是否稳定。

在单模型训练过程中,box/cls/dfl 三项损失均呈现稳定下降并在中后期逐步收敛,precision 与 recall 在前 10--20 个 epoch 快速上升,之后进入缓慢爬升阶段;mAP50 很早达到较高水平,而 mAP50-95 的增长更"慢热",体现了稻田虫害小目标定位精细度需要更长时间被优化。整体曲线未出现明显震荡回落,说明当前增强强度与学习率策略对该数据分布是相对匹配的,训练过程具有良好的可复现性与可控性。

从 PR 曲线可见,整体 mAP@0.5 达到 0.954,曲线在高召回区域仍能维持较高精确率,说明在 conf 阈值合理时,系统能够在"尽量不漏检"的同时抑制背景误检。分类别看,green-leafhopper、leaf-folder、stem-borer 三类的 AP 值接近 0.98,表明其外观或上下文差异更利于学习;brown-planthopper 的 AP 为 0.885,为各类中相对最低,老思更倾向将其归因于"背景同质化+目标更小/更易遮挡"的叠加效应:褐飞虱常与稻叶纹理、阴影边缘混淆,且密集分布时相邻框更容易互相抑制,导致召回与精确率在高阈值区间下降更早。

F1-Confidence 曲线给出了阈值选取的直接依据:全类别最优点出现在 conf≈0.505,峰值 F1≈0.93。曲线在 conf 继续升高(约 0.8 之后)明显下坠,反映阈值过严会快速牺牲召回;而 conf 过低虽能提高召回,但会引入更多背景误检,使精确率下降并拉低 F1。基于该结果,本文在 UI 默认参数上采用"conf 约 0.5、IoU 约 0.45"的组合更合理:既贴合整体最优点,也能为不同地块、不同虫害密度下的人工调参保留空间。


5.1 轻量模型族(n / tiny / t)对比:精度--速度权衡

轻量模型的整体差距并非"代际碾压",而更像是在同一上限附近做取舍:mAP50 分布在 0.871--0.942,F1 分布在 0.843--0.922。YOLOv12n 取得最高 F1(0.922),说明其在 precision 与 recall 的平衡上更占优;YOLOv9t 的 mAP50(0.942)与 mAP50-95(0.690)在 n 族中最高,说明其对定位精度(尤其是小目标边界)更敏感,但其推理时间明显更长(后文见表),更接近"精度优先"的选择。YOLOv7-tiny 在精度与速度两端都不占优势,且后处理耗时显著偏高,说明其在该数据与当前推理链路下并不适合作为实时系统默认模型。

从收敛过程看,多数模型在前 10 个 epoch 后迅速进入有效学习区间,40--60 个 epoch 之后 mAP50 基本趋于平台。曲线间的早期差异通常反映了优化稳定性与"冷启动"速度:例如个别模型在早期出现短暂的低谷或爬升更慢,往往与其默认训练超参、结构梯度流动方式或正则项更敏感有关;但进入平台期后,各模型的最终上限更依赖特征融合与小目标表征能力,而不是单纯"学得快"。平均 PR 曲线进一步印证了上述结论:YOLOv9t、YOLOv12n、YOLOv8n 在高召回区域的精确率维持更稳,体现为曲线在接近 Recall→1.0 时下坠更晚,意味着当场景中虫体密集、需要尽量不漏检时,这三者更容易保持"可用的误检水平"。相对地,YOLOv6n 与 YOLOv7-tiny 的曲线更早下沉,说明其在提高召回时更容易以误检为代价。

下表汇总了 n 型模型的关键指标(端到端耗时为 Pre+Inf+Post,FPS 由 1000 / T o t a l ( m s ) 1000/\mathrm{Total(ms)} 1000/Total(ms) 计算):

Model Params(M) FLOPs(G) Precision Recall F1 Score mAP50 mAP50-95 Total(ms) FPS
YOLOv5nu 2.6 7.7 0.918 0.904 0.911 0.938 0.665 10.94 91.4
YOLOv6n 4.3 11.1 0.903 0.878 0.890 0.909 0.624 10.34 96.7
YOLOv7-tiny 6.2 13.8 0.848 0.839 0.843 0.871 0.534 21.08 47.4
YOLOv8n 3.2 8.7 0.926 0.909 0.918 0.940 0.668 10.17 98.3
YOLOv9t 2.0 7.7 0.919 0.920 0.920 0.942 0.690 19.67 50.8
YOLOv10n 2.3 6.7 0.895 0.883 0.889 0.927 0.668 13.95 71.7
YOLOv11n 2.6 6.5 0.926 0.899 0.912 0.938 0.672 12.97 77.1
YOLOv12n 2.6 6.5 0.936 0.907 0.922 0.939 0.678 15.75 63.5

从系统落地角度,若优先考虑"摄像头实时流的稳定帧率",YOLOv8n 在保持高精度(mAP50=0.940)的同时达到最高 FPS(约 98),更适合作为默认实时模型;若优先考虑"密集小目标的定位精细度",YOLOv9t 的 mAP50-95 最佳,但代价是端到端时延显著增加,更适合离线批处理或算力更宽裕的端侧;而 YOLOv12n 更像是"整体平衡点",F1 最高且 mAP50-95 也处于前列,在需要兼顾召回与误检的现场巡检中更稳。


5.2 s 规格模型对比:更高上限与可接受实时性

当模型容量提升到 s 规格后,精度上限确有提升,但幅度并不夸张:最佳 mAP50 从 n 族的约 0.942 提升到 0.954,F1 从约 0.922 提升到 0.929。YOLOv12s 在 mAP50(0.954)与 mAP50-95(0.697)上均为最高,同时 precision/recall 也保持较高水平,表现出更强的综合泛化;YOLOv11s 以更快的推理速度接近该精度上限,属于"高性价比的大一点"选择。s 规格模型的收敛轨迹更平滑,平台期更稳定,说明更高容量在复杂背景下能提供更冗余的表征空间;但早期阶段也更依赖合理的正则与增强控制,否则更容易把背景纹理当作"捷径特征"。本文的曲线未出现明显回落,意味着增强与学习率退火对 s 规格同样适配。

平均 PR 曲线显示 YOLOv12s 在高召回区域下坠最晚,说明当需要尽可能完整统计虫害密度时,它更不容易因为阈值调低而引入大量误检;YOLOv8s 依旧保持了非常好的实时性特征,在曲线形态与端到端延迟之间达到了较好的折中。

s 型模型汇总如下:

Model Params(M) FLOPs(G) Precision Recall F1 Score mAP50 mAP50-95 Total(ms) FPS
YOLOv5su 9.1 24.0 0.909 0.905 0.907 0.931 0.671 12.24 81.7
YOLOv6s 17.2 44.2 0.909 0.910 0.909 0.929 0.670 12.26 81.6
YOLOv7 36.9 104.7 0.890 0.889 0.890 0.914 0.621 29.52 33.9
YOLOv8s 11.2 28.6 0.911 0.912 0.912 0.933 0.676 11.39 87.8
YOLOv9s 7.2 26.7 0.915 0.906 0.911 0.944 0.689 22.17 45.1
YOLOv10s 7.2 21.6 0.905 0.908 0.907 0.941 0.684 14.19 70.5
YOLOv11s 9.4 21.5 0.918 0.931 0.924 0.948 0.689 13.47 74.2
YOLOv12s 9.3 21.4 0.931 0.926 0.929 0.954 0.697 16.74 59.7

综合精度、定位严格度与实时性三者,老思更倾向给出两条工程建议:若系统以"实时巡检与快速告警"为核心(摄像头为主),YOLOv8n/YOLOv11s 这类高 FPS 且精度不低的模型更稳;若系统以"精确统计与高召回"为核心(图片/视频离线或算力更充裕的端侧),YOLOv12s 在 mAP50 与 mAP50-95 上更具上限,更适合作为最终部署版本或高精度对照模型。


6. 系统设计与实现

6.1 系统设计思路

本系统以"可切换 YOLOv5--YOLOv12 权重的稻田虫害实时检测"为中心任务,在工程上采用分层与对象组合相结合的组织方式:界面层仅负责展示与交互,控制层负责状态机与资源调度,处理层专注于模型推理与后处理,使得多源输入、模型热切换、阈值调参等高频交互不会反复侵入推理代码。老思在实现时将 UI 事件统一抽象为"输入源事件、推理事件、显示事件、存储事件"四类,分别由 Qt 信号槽连接到控制层的槽函数,避免跨线程直接操作控件导致的卡顿与崩溃。

在多源输入方面,系统将摄像头、视频、图片、文件夹四种入口规约到同一帧级数据流接口,确保预处理(Resize/Letterbox、归一化、颜色空间转换)与推理后处理(置信度筛选、NMS/IoU 抑制)完全一致,从而保证不同输入源下的结果可比性。实时流采用"采集线程/解码线程 + 推理线程 + UI 主线程"分工:采集/解码负责稳定供帧,推理线程负责批内推断与结果解析,UI 线程只做绘制与文本刷新,以降低界面抖动并维持稳定 FPS。

在结果管理与可追溯性方面,系统将"检测结果、用户配置、模型偏好、导出记录"统一落库到 SQLite:每个用户拥有独立的配置与历史空间,界面侧可按时间、类别、置信度阈值等条件检索与回放;导出模块支持将可视化结果(带框图像/视频)与结构化结果(CSV/JSON)同步保存,使得现场巡检与离线分析之间能够无缝衔接。由于推理端封装为独立 Detector 类,后续若需要替换为 TensorRT/ONNXRuntime 或引入蒸馏、剪枝后的权重,也只需替换处理层实现而不影响 UI 与数据库结构。

图 系统流程图

图注:系统从初始化到多源输入,完成预处理、推理与界面联动,并通过交互形成闭环。

6.2 登录与账户管理

登录与账户管理模块以"身份校验---个性化加载---结果持久化"为主线:用户在登录界面完成注册或登录后,系统通过 SQLite 对账号状态与口令哈希进行校验,校验通过即加载该用户的阈值参数、主题样式、默认模型与历史检测记录,保证进入主界面后可直接延续上一次工作状态;在检测过程中产生的导出文件、结构化结果与统计信息同样写入该用户的记录空间,使得现场巡检与后续复盘不依赖临时文件。资料修改(头像、密码、偏好)在主界面内以轻量交互完成并即时落库,注销/切换账号会释放摄像头与推理资源、清理会话状态并返回登录页,从而在多用户共用设备的场景下实现稳定隔离与一致体验。


7. 下载链接

若您想获得博文中涉及的实现完整全部资源文件 (包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频:➷➷➷

详细介绍文档博客: YOLOv5至YOLOv12升级:稻田虫害检测系统的设计与实现(完整代码+界面+数据集项目)

环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程

或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程

数据集标注教程(如需自行标注数据):数据标注合集


8. 参考文献(GB/T 7714)

1 BADGUJAR C M, POULOSE A, GAN H. Agricultural object detection with You Only Look Once (YOLO) Algorithm: A bibliometric and systematic literature review[J]. Computers and Electronics in Agriculture, 2024, 223: 109090. DOI:10.1016/j.compag.2024.109090.

2 WANG Q-J, ZHANG S-Y, DONG S-F, et al. Pest24: A large-scale very small object data set of agricultural pests for multi-target detection[J]. Computers and Electronics in Agriculture, 2020, 175: 105585. DOI:10.1016/j.compag.2020.105585.

3\] WU X, ZHAN C, LAI Y-K, et al. IP102: A large-scale benchmark dataset for insect pest recognition\[C\]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). 2019: 8787-8796. \[4\] 梁勇, 杨成, 张英, 等. 主要稻田虫害多源异构数据集构建与识别方法研究\[J\]. *农业机械学报*, 2022, 53(7): 198-206. DOI:10.6041/j.issn.1000-1298.2022.07.026. \[5\] 王泰华, 郭亚州, 张家乐, 张晨阳. 基于改进YOLO v5s的水稻害虫识别研究\[J\]. *农业机械学报*, 2024, 55(11): 39-48. DOI:10.6041/j.issn.1000-1298.2024.11.004. \[6\] 谭思桥, 李政, 孙京栾, 等. 基于改进YOLOv8m的稻田害虫识别方法\[J\]. *农业工程学报*, 2025, 41(2): 185-195. DOI:10.11975/j.issn.1002-6819.202406125. \[7\] QIANG J, ZHAO L, WANG H, et al. YOLO-PEST: a novel rice pest detection approach based on YOLOv5s\[J\]. *Plant Methods*, 2025, 21: 121. DOI:10.1186/s13007-025-01438-w. \[8\] JOCHER G, CHUARASIA A, STOKEN A, et al. ultralytics/yolov5: Initial Release\[EB/OL\]. Zenodo, 2020. DOI:10.5281/zenodo.3908560. \[9\] 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. Lecture Notes in Computer Science. Cham: Springer, 2024. \[10\] 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). 2024. \[11\] Ultralytics. Ultralytics YOLO11\[EB/OL\]. Ultralytics YOLO Docs, 2024. \[12\] TIAN Y, YE Q, DOERMANN D. YOLOv12: Attention-Centric Real-Time Object Detectors\[EB/OL\]. arXiv:2502.12524, 2025. \[13\] REN S, HE K, GIRSHICK R, SUN J. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks\[C\]//Advances in Neural Information Processing Systems (NeurIPS). 2015: 91-99. \[14\] 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. \[15\] CARION N, MASSA F, SYNNAEVE G, et al. End-to-End Object Detection with Transformers\[C\]//Computer Vision -- ECCV 2020. Lecture Notes in Computer Science. Cham: Springer, 2020: 213-229.

相关推荐
前网易架构师-高司机2 小时前
带标注的起重机手势信号识别数据集,识别率97.9%,8848张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·数据集·手势·起重机·吊车
思绪无限2 小时前
YOLOv5至YOLOv12升级:番茄成熟度识别系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·yolov12·yolo全家桶·番茄成熟度识别
长沙红胖子Qt3 小时前
深度学习开发笔记(一):跨平台纯C++训练和推理框架LibTorch介绍、开发环境搭建和Demo
pytorch·深度学习·c++深度学习·纯c++训练
盼小辉丶3 小时前
Transformer实战(40)——Transformer时间序列数据建模
深度学习·transformer·时间序列预测
思绪无限3 小时前
YOLOv5至YOLOv12升级:自动驾驶目标检测系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·自动驾驶·yolov12·yolo全家桶
思绪无限3 小时前
YOLOv5至YOLOv12升级:草莓成熟度检测系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·草莓成熟度检测·yolov12·yolo全家桶
思绪无限3 小时前
YOLOv5至YOLOv12升级:吸烟行为检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·深度学习·yolo·目标检测·yolov12·yolo全家桶·吸烟行为检测
<-->3 小时前
【tuner passes compile compress autotp】
人工智能·python·深度学习
m0_564876843 小时前
提示词应用
深度学习·学习·算法