基于YOLO深度学习的柑橘黄龙病智能检测系统:从模型训练到桌面端部署的全栈实践
gz-AI算法爱好者角落
摘要:柑橘黄龙病(HuangLongBing, HLB)被称为柑橘产业的"癌症",目前尚无有效治疗方法,早期精准检测是防控的关键。本文介绍一套完整的柑橘病虫害智能检测系统,基于 YOLOv8/v10/v26 三种最新目标检测模型,覆盖 15 类柑橘病虫害及营养失调症状,在 RTX 3090 上实现 mAP@0.5 最高 0.972 的检测精度,并构建了功能完善的 PySide6 桌面端应用,支持图片、视频、摄像头、RTSP 网络流及文件夹批量检测,为智慧农业提供了可落地的技术方案。
一、研究背景:柑橘黄龙病的全球威胁

柑橘是全球第一大水果作物,年产量超过 1.4 亿吨。中国作为世界最大的柑橘生产国,种植面积超过 300 万公顷,年产量逾 5000 万吨。然而,柑橘黄龙病(HuangLongBing, HLB) 自 20 世纪初在华南地区首次发现以来,已成为威胁全球柑橘产业最具毁灭性的病害。
黄龙病由韧皮部杆菌属细菌(Candidatus Liberibacter spp.)引起,通过亚洲柑橘木虱(Diaphorina citri)传播。一旦感染,树木将出现叶片斑驳黄化、果实畸形("红鼻果")、植株衰退等症状,目前尚无有效治疗手段——病树只能砍伐销毁。在佛罗里达州,黄龙病已导致柑橘产量从 2003-04 产季的 2.42 亿箱暴跌至 2022-23 产季的不足 1600 万箱,降幅超过 **90%**。
早期检测是防控黄龙病的核心难题:传统方法依赖植保专家田间巡查和 PCR 分子检测,前者主观性强、效率低下,后者成本高昂、无法大规模推广。基于计算机视觉的自动化检测技术,尤其是深度学习目标检测,为破解这一难题提供了全新路径。
二、技术前沿:YOLO 系列在农业检测中的演进
2.1 从传统方法到深度学习
早期的植物病害检测主要依赖图像处理和传统机器学习:
-
手工特征提取:颜色直方图、纹理特征(LBP、GLCM)、形状特征
-
传统分类器:SVM、随机森林、KNN
-
局限性:泛化能力弱、对光照/背景敏感、无法处理多目标重叠场景
2015 年 YOLO(You Only Look Once)的诞生标志着目标检测进入实时端到端时代。此后 YOLO 系列经历了快速迭代:
| 版本 | 年份 | 核心创新 |
|---|---|---|
| YOLOv5 | 2020 | 工程化成熟、部署友好、社区广泛 |
| YOLOv8 | 2023 | Anchor-Free、解耦头、C2f 模块 |
| YOLOv10 | 2024 | NMS-Free 端到端、双重分配策略 |
| YOLOv26 | 2025 | 架构优化、更低计算量 |
2.2 YOLOv10 的革命性突破:告别 NMS
传统的 YOLO 检测器在推理时依赖 NMS(非极大值抑制)来去除重复检测框,但 NMS 引入了额外的计算开销和超参数敏感性。YOLOv10 提出了双重分配策略:
-
一对多(One-to-Many, OM)训练头:每个真实框匹配多个预测框,提供丰富的监督信号
-
一对一(One-to-One, OO)训练头:每个真实框仅匹配一个最佳预测框,训练出无需 NMS 的推理能力
在推理阶段仅使用 OO 头,实现了真正的端到端检测——这是 YOLOv10 相比前代最核心的架构创新。
2.3 智慧农业中的 AI 视觉:当下发展格局
当前,AI+农业已从实验室走向田间地头:
-
国际趋势:John Deere 的 See & Spray 精准除草、Blue River Technology 的智能间苗
-
国内政策:农业农村部《"十四五"全国农业农村信息化发展规划》明确将 AI 病虫害识别列为重点方向
-
技术成熟度:边缘计算设备(Jetson Orin、华为 Atlas)使深度学习模型可在田间实时运行
-
数据驱动:PlantVillage、Kaggle 等开源数据集的丰富,降低了模型开发门槛
然而,从模型训练到可用的桌面端软件,仍存在巨大的工程鸿沟——这正是本项目着力解决的问题。
三、研究技术:多模型融合的智能检测架构
3.1 系统整体架构
本系统采用 PySide6 + PyTorch + Ultralytics 技术栈,构建了分层、可扩展的桌面端应用:

┌─────────────────────────────────────────────┐
│ 表现层 (PySide6 GUI) │
│ 图片检测 │ 视频检测 │ 摄像头 │ RTSP │ 历史 │
├─────────────────────────────────────────────┤
│ 桥接层 (6个 Bridge 类) │
│ 信号/槽连接 │ 参数同步 │ 结果格式化 │
├─────────────────────────────────────────────┤
│ 引擎层 (YOLOSHOW) │
│ 模型管理 │ 线程调度 │ 检测路由 │
├─────────────────────────────────────────────┤
│ 检测层 (QThread 子线程) │
│ YOLOv8Thread │ YOLOv10Thread │ YOLOv26Thread│
├─────────────────────────────────────────────┤
│ 模型层 (AutoBackend) │
│ PyTorch 模型加载 │ 推理优化 │ 后处理 │
└─────────────────────────────────────────────┘

3.2 三款 YOLO 模型对比
本系统同时集成三款主流 YOLO 模型,用户可一键切换:
| 特性 | YOLOv8s | YOLOv10s | YOLOv26s |
|---|---|---|---|
| 参数量 | 11.13M | 8.05M | 9.47M |
| 计算量 (GFLOPs) | 28.5 | 24.5 | 20.6 |
| mAP@0.5 | 0.968 | 0.972 | 0.972 |
| mAP@0.5:0.95 | 0.920 | 0.918 | 0.917 |
| 推理速度 | 1.1ms | 1.9ms | 1.0ms |
| 权重大小 | 22.5MB | 16.5MB | 20.3MB |
| 核心创新 | Anchor-Free 解耦头 | NMS-Free 双重分配 | 架构极致优化 |
| 是否需要 NMS | ✅ 需要 | ❌ 不需要 | ✅ 需要 |
关键发现: 三款模型在本次柑橘 HLB 数据集上均达到了 mAP@0.5 > 0.96 的优异表现。YOLOv10 和 YOLOv26 在精度上略胜一筹(0.972 vs 0.968),但 YOLOv8 在 mAP@0.5:0.95(更严格的指标)上反而最优(0.920)。这启示我们:在不同应用场景下应灵活选择模型——追求 NMS-Free 端到端部署选 YOLOv10,追求最高定位精度选 YOLOv8,追求边缘设备部署最小计算量选 YOLOv26。
3.3 训练策略与超参数
所有模型采用统一的训练配置以确保公平对比:
| 超参数 | 值 | 说明 |
|---|---|---|
| 图像尺寸 | 640×640 | 平衡精度与速度 |
| 优化器 | SGD | 动量 0.937 |
| 初始学习率 | 0.01 | 余弦衰减 |
| 训练轮次 | 300 | 早停 patience=100 |
| 数据增强 | Mosaic + RandAugment + HSV + 翻转 | 全面增强 |
| 硬件 | NVIDIA RTX 3090 24GB | 单卡训练 |
YOLOv8 的最佳 epoch 仅 87(早停提前终止),而 YOLOv10 训练到了 epoch 121,反映了不同模型架构对同一数据集的收敛特性差异。
四、使用数据:15 类柑橘病虫害综合数据集
# 柑橘病虫害 - YOLO 数据集配置
# 数据集根目录 (train/val/test 的相对基准)
path: /datasets/citrus_hlb/
# 训练集 验证集 测试集
train: images/train
val: images/val
test: test/images
# 类别数
nc: 15
# 类别名称
names:
0: S0 others
1: S1 Healthy fruit
2: S2 Healthy leaf
3: S3 Blotchy mottling
4: S4 Red nose fruit
5: S5 Zinc deficiency
6: S6 Vein yellowing
7: S7 Uniform yellowing
8: S8 Magnesium deficiency
9: S9 Boron deficiency
10: S10 Anthracnose
11: S11 Citrus greasy spot
12: S14 Canker
13: S13 Sooty mould
14: S12 Algal spot and moss
chinesenames: ['其他', '健康果实', '健康叶片', '斑驳黄化状', '红鼻果', '缺锌状',
'叶脉黄化状', '均匀黄化状', '缺镁状', '缺硼状', '炭疽病', '脂点黄斑病', '青苔', '煤烟病', '溃疡病']
# 数据集划分
train_data_number:
train: 7192
val: 898
test: 1806
4.1 数据规模与划分
| 数据集 | 图片数量 | 占比 |
|---|---|---|
| 训练集 (train) | 7,192 | 80% |
| 验证集 (val) | 898 | 10% |
| 测试集 (test) | 1,806 | 10% |
| 总计 | 9,896 | 100% |
4.2 15 类目标详解
本数据集不仅涵盖黄龙病典型症状,还包含了与其易混淆的营养失调和常见病害,这是本项目数据集的核心特色:
**健康类别 (2类)**:
| 编号 | 类别 | 说明 |
|---|---|---|
| S1 | 健康果实 | 正常柑橘果实 |
| S2 | 健康叶片 | 正常绿色叶片 |
**黄龙病相关症状 (3类)**:
| 编号 | 类别 | 说明 |
|---|---|---|
| S3 | 斑驳黄化状 | HLB 最典型症状——叶片呈现不对称的黄绿斑驳 |
| S4 | 红鼻果 | HLB 标志性果实症状——果实着色不均、果蒂端呈红色 |
| S6 | 叶脉黄化状 | 叶片主脉和侧脉变黄,也是 HLB 的常见症状 |
**营养失调症状 (4类,易与 HLB 混淆)**:
| 编号 | 类别 | 说明 |
|---|---|---|
| S5 | 缺锌状 | 小叶簇生、脉间黄化——与 HLB 斑驳症状极易混淆 |
| S7 | 均匀黄化状 | 整片叶均匀变黄——常被误判为 HLB 早期 |
| S8 | 缺镁状 | 老叶"V"形黄化——营养缺乏的典型表现 |
| S9 | 缺硼状 | 叶片变厚、卷曲——缺硼的独特症状 |
**常见病害 (4类)**:
| 编号 | 类别 | 说明 |
|---|---|---|
| S10 | 炭疽病 | 叶片出现圆形褐色病斑 |
| S11 | 脂点黄斑病 | 叶面出现黄色油脂状斑点 |
| S12 | 溃疡病 | 叶面隆起、木栓化病斑 |
| S13 | 煤烟病 | 叶面覆盖黑色煤灰状霉层 |
**其他 (2类)**:
| 编号 | 类别 | 说明 |
|---|---|---|
| S0 | 其他 | 非以上类别的目标 |
| S14 | 青苔 | 叶面附着绿色藻类 |
数据集设计亮点:将 HLB 症状与缺锌、缺镁等营养失调症状纳入训练,使模型能够**区分"真 HLB"和"假 HLB"**——这正是田间检测中最有价值的能力。传统单一病害检测器常将缺锌误判为 HLB,导致大量误报。
4.3 各类别检测性能
三款模型在 15 个类别上的 mAP@0.5 表现优异且稳定:
类别 YOLOv8 YOLOv10 YOLOv26
S3 斑驳黄化 0.991 0.992 0.993 ← 黄龙病关键指标
S4 红鼻果 0.907 0.928 0.941 ← YOLOv26 显著更优
S7 均匀黄化 0.995 0.995 0.993
S10 炭疽病 0.995 0.995 0.995
S13 煤烟病 0.995 0.995 0.995
──────────────────────────────────────────
平均 0.968 0.972 0.972
关键洞察:在最具挑战性的"红鼻果"(S4)类别上,YOLOv26 达到了 0.941,相比 YOLOv8 的 0.907 提升了 3.4 个百分点——这在需要精准识别 HLB 果实症状的场景中意义重大。
五、系统功能:六大检测模式全覆盖
本系统实现了六大核心功能模块,覆盖从单张检测到批量处理、从离线分析到实时监控的完整业务闭环:
5.1 📷 图片/视频检测(主检测页)

| 功能 | 实现 |
|---|---|
| 支持格式 | JPG / PNG / BMP / MP4 / AVI / MKV / FLV |
| 双面板对比 | 左:原图/原视频 |
| 实时统计 | FPS / 累计检测数 / 当前帧检测数 / 类别数 |
| 目标明细表 | 逐目标的类别名、置信度、边界框坐标 |
| 类别统计表 | 各类检测数量及占比 |
| 可调参数 | 置信度阈值(0.01-1.00)、IoU阈值、线条粗细 |
| 导出功能 | 标注图片 + CSV 检测报表 |
5.2 📁 文件夹批量检测

-
自动扫描文件夹内全部支持的图片/视频文件
-
进度条实时反馈处理进度
-
汇总统计:总文件数、累计检测目标数、涉及类别数
-
逐文件明细:每张图的检测数、类别数
-
支持暂停/继续,大批量处理时不中断
5.3 📹 摄像头实时检测
-
自动枚举系统 0-7 号摄像头设备
-
实时动态柱状图(QChartView):各类别累计检测数量
-
可调节帧间隔(1-1000ms)
-
录制开关:一键保存检测视频
5.4 🌐 RTSP 网络流检测

-
支持 RTSP / HTTP / HTTPS 视频流
-
URL 弹窗配置,灵活切换监控源
-
实时统计:当前帧检测数 / 累计总数 / 类别数 / 帧计数
-
适用于果园远程监控摄像头接入
5.5 📊 检测历史记录

-
SQLite 数据库持久化存储所有检测记录
-
多维度筛选:按类型(图片/视频/文件夹/摄像头/RTSP)、按文件名搜索
-
点击历史记录行,自动加载并显示原图 + 检测结果图
-
一键导出 CSV 报表
5.6 📈 训练指标可视化

-
自动读取
results/目录下的训练输出 - 4 张 QtCharts 交互式折线图:
-
训练损失(Box / Cls / DFL)
-
验证损失
-
mAP 指标(mAP@0.5 & mAP@0.5:0.95)
-
精确率 & 召回率
-
-
模型元数据展示:网络结构、超参数、数据集配置
-
支持 YOLOv8/v10/v26 三种模型一键切换,自动适配不同 CSV 列名格式
5.7 🔐 用户系统与安全

-
PBKDF2-HMAC-SHA256 密码加密(10 万次迭代 + 随机盐)
-
图形验证码(4 位随机彩色字符)
-
7 天会话有效期
-
完整审计日志(登录/登出/异常)
-
用户偏好持久化(模型类型、置信度阈值、语言、主题)
六、模型深度解析
6.1 YOLOv8s:均衡之选

YOLOv8 是 Ultralytics 在 2023 年推出的里程碑版本,其关键架构创新包括:
-
Anchor-Free 检测头:摒弃传统的 Anchor Box 预设,直接预测目标中心点和宽高,减少超参数
-
解耦头(Decoupled Head):分类和回归分支独立,避免任务冲突
-
C2f 模块:改进的 CSP 结构,融合更多梯度流信息
-
Task-Aligned Assigner:联合考虑分类分数和定位质量分配正样本
在本项目中,YOLOv8s 以 0.920 mAP@0.5:0.95 在定位精度上领先,且拥有最大的参数量(11.13M),提供了更丰富的特征表示能力。
6.2 YOLOv10s:端到端革命
YOLOv10 是 2024 年清华大学与 Ultralytics 联合推出的版本,其NMS-Free 训练范式是最大亮点:

训练阶段:OM Head (一对多, topk=10) + OO Head (一对一, topk=1)
└─ 总损失 = Loss_OM + Loss_OO
推理阶段:仅 OO Head → 无需 NMS → 真正端到端
-
一致性双重分配:OM 头提供丰富的训练梯度,OO 头学习无 NMS 推理
-
效率-精度驱动设计:精简冗余模块,参数仅 8.05M(比 v8s 少 28%)
-
Holistic Efficiency-Accuracy Driven:以整体效率-精度最优为优化目标
本项目训练中,YOLOv10s 的最佳 checkpoint 出现在 epoch 121(较晚收敛),mAP@0.5 达 0.972。
6.3 YOLOv26s:轻量高效

YOLOv26 是较新的迭代版本,在保持高精度的同时大幅降低计算量(仅 20.6 GFLOPs,比 v8s 的 28.5 低 28%):
-
参数 9.47M,推理仅需 1.0ms/图
-
在"红鼻果"(S4)类别上 mAP@0.5 达 0.941,远超其他模型
-
适合边缘设备(Jetson、树莓派+NPU)部署
6.4 模型选择
开始
│
┌──────────┴──────────┐
▼ ▼
需要 NMS-Free 推理? 边缘设备部署?
┌──────┴──────┐ ┌──────┴──────┐
▼ ▼ ▼ ▼
YOLOv10 取决于 YOLOv26 取决于
(端到端) 精度需求 (最轻量) 精度需求
┌─┴─┐ ┌─┴─┐
▼ ▼ ▼ ▼
YOLOv8 YOLOv26 YOLOv10 YOLOv8
(最准) (轻量) (平衡) (最准)
七、工程实践:系统开发的深度思考

7.1 性能优化的 7 项关键措施
在实时检测场景(摄像头/RTSP)中,系统经历了多轮性能优化:
-
QTimer 堆积修复:避免定时器回调堆积导致 UI 冻结
-
智能跳帧机制:检测跟不上帧率时自动丢弃非关键帧,保持 UI 流畅
-
数据库批量提交:检测结果积累到阈值后一次性写入,减少 IO
-
图像零拷贝传递:通过信号传递内存引用而非反复编解码
-
静默异常处理:非致命错误不弹出对话框,避免阻断检测流
-
表格增量更新:仅更新变化行,不重建整个 QTableWidget
-
JSON 编码规范化:统一 numpy/pandas 到 Python 原生类型的转换
优化后,连续检测数千帧无卡顿、无内存泄漏,CPU 占用稳定在合理范围。
7.2 跨模型兼容性设计
针对 YOLOv8/v10/v26 三个版本在输出格式、CSV 列名、模型结构上的差异,系统采用了统一抽象:
-
QThread 子类多态:YOLOv8Thread / YOLOv10Thread / YOLOv26Thread 各自封装特定版本的预处理/推理/后处理逻辑
-
CSV 列名归一化:在数据加载层将 v10 的
train/box_om自动映射为标准的train/box_loss,确保训练曲线展示在不同模型间保持一致 -
统一配置接口:
ALL_MODEL_NAMES = ["yolov8", "yolov10", "yolov26"]驱动全局模型切换
7.3 UI/UX 设计

-
Glassmorphism 毛玻璃风格 + 深蓝专业配色
-
可折叠侧边栏:250ms 流畅动画,展开 210px / 收起 70px
-
无边框窗口:自定义标题栏,8 方向缩放手柄
-
响应式布局:所有页面支持窗口缩放自适应
八、发展前景与应用场景
8.1 直接应用场景
| 场景 | 方案 |
|---|---|
| 果园巡检 | 无人机/机器人搭载摄像头 + 本系统实时检测 |
| 植保站辅助诊断 | 技术人员田间拍照 → 系统秒级给出检测结果 |
| 农户自查 | 未来可迁移至手机 App,拍照即知病害 |
| 农业教学培训 | 15 类病虫害可视化标注,辅助植保专业教学 |
| 疫情监测预警 | 结合 GPS 定位,构建区域 HLB 热力分布图 |
8.2 技术演进方向
-
边缘端部署:将 YOLOv26s 量化为 INT8/FP16,部署至 NVIDIA Jetson Orin NX 或华为 Atlas 200,实现田间离线实时检测
-
多光谱融合:结合高光谱/多光谱成像,捕捉 HLB 在可见光之外的特征(HLB 感染会引起叶绿素荧光特征变化)
-
时序分析:对同一果园定期采集的图像序列进行变化检测,识别病变的渐进式发展轨迹
-
大语言模型融合:检测结果 + 自然语言交互,如"这片果园黄龙病风险评分 85 分,建议立即处理东区第 3-7 排"
-
联邦学习:多个果园在不共享原始数据的前提下,协同提升模型对区域性差异的鲁棒性
-
移动端迁移:将模型转换为 TFLite/CoreML 格式,集成到微信小程序或独立 App
8.3 产业价值
黄龙病每年给全球柑橘产业造成数十亿美元损失。早期、精准、低成本的检测手段是防控的第一道防线。本系统以开源技术栈构建、可在消费级 GPU 上完成训练、在普通 PC 上流畅运行——这使得中小型果园和基层农技站也能负担得起 AI 检测能力,实现技术普惠。
九、总结
本项目构建了一套从数据标注 → 模型训练 → 桌面端部署的完整 AI 病虫害检测管线,主要成果包括:
-
三款主流 YOLO 模型(v8/v10/v26)在一个包含 15 类、近万张标注图片的柑橘病虫害数据集上进行系统训练与横向对比,mAP@0.5 最高达 0.972
-
功能完善的 PySide6 桌面端应用,支持图片、视频、摄像头、RTSP 网络流、文件夹批量检测、历史记录管理和训练指标可视化六大模块
-
工程化设计:多线程异步检测、SQLite 持久化、用户认证与审计、UI 性能优化,具备生产级软件的可靠性
-
跨模型兼容架构:抽象基类 + QThread 多态 + CSV 列名自动归一化,轻松扩展新模型版本
-
面向实际应用:特别收录了 HLB 与缺锌/缺镁等易混淆症状,训练模型具备"真·假 HLB"区分能力
在人工智能与农业深度融合的大趋势下,本系统为柑橘黄龙病的智能化检测提供了一个开源、可复现、可落地的技术方案。诚邀广大开发者和农业从业者共同交流,推动 AI 技术在智慧农业中的真正落地。
项目信息
技术栈:PySide6 + PyTorch + Ultralytics + SQLite
开发语言:Python 3.12
模型版本:YOLOv8s / YOLOv10s / YOLOv26s
数据集:9,896 张标注图片,15 类柑橘病虫害及营养失调症状
训练硬件:NVIDIA RTX 3090 24GB
最佳精度:mAP@0.5 = 0.972(YOLOv10s & YOLOv26s)
标签:#智慧农业 #深度学习 #YOLO #柑橘黄龙病 #目标检测 #PySide6 #植物病害 #AI应用
更多推荐
所有评论(0)