基于改进YOLOv5的苹果花检测算法优化与实践

基于改进YOLOv5的苹果花检测算法优化与实践

1. 项目背景与研究意义

苹果花开花水平估计是果园精准管理的关键技术之一。传统的人工观测方法存在效率低、主观性强等问题,而基于计算机视觉的自动化监测方案正在成为研究热点。我在参与某大型果园数字化改造项目时,发现现有目标检测算法在花朵识别中存在三个典型问题:密集花朵的漏检率高、不同开花阶段的分类准确度不足、复杂光照条件下的稳定性差。

这个毕业设计选择改进YOLO算法来解决这些问题,主要基于两点考虑:首先,YOLO系列算法在实时性方面具有明显优势,适合部署在果园移动监测设备上;其次,其单阶段检测的特性便于进行针对性的网络结构优化。通过该项目验证的算法模型,最终可应用于智能果园的以下场景:

  • 开花物候期的自动记录
  • 最佳授粉时机的判断
  • 产量预测模型的输入数据采集

2. 算法选型与技术路线

2.1 YOLOv5基础架构分析

选择YOLOv5s作为基础模型,在保持轻量化的同时,其网络结构包含:

  • Backbone:CSPDarknet53(跨阶段局部网络)
  • Neck:PANet(路径聚合网络)
  • Head:三个检测尺度(80×80,40×40,20×20)

实测发现原模型在苹果花检测中的主要不足:

  1. 小目标召回率仅68.5%(测试集数据)
  2. 对重叠花朵的分离能力差
  3. 开花阶段分类准确率不足75%

2.2 改进方案设计

针对性地提出三阶段改进:

网络结构优化

  • 在Backbone末端添加CBAM注意力模块
  • 将Neck部分的普通卷积替换为Ghost卷积
  • 设计花朵关键点检测分支(用于判断开花阶段)

数据增强策略

  • 采用Mosaic-9增强(原版为Mosaic-4)
  • 添加随机光谱扰动(模拟不同光照条件)
  • 生成合成遮挡样本(提高密集场景鲁棒性)

损失函数改进

  • 将CIoU替换为α-IoU(α=3)
  • 分类任务使用Focal Loss
  • 新增关键点定位损失

3. 数据集构建与预处理

3.1 数据采集方案

在烟台三个苹果主产区搭建采集系统:

  • 硬件:佳能EOS 90D + 偏振镜
  • 拍摄高度:1.2-1.5m(模拟无人机视角)
  • 时间跨度:覆盖完整开花周期(7天)

最终获得有效图像5720张,按开花程度分为:

  1. 花蕾期(15%)
  2. 初开期(35%)
  3. 盛花期(40%)
  4. 凋谢期(10%)

3.2 标注规范制定

采用双层标注方案:

  • 一级标签:花朵位置(矩形框)
  • 二级标签:
    • 开花阶段(4分类)
    • 花蕊可见度(0-1连续值)
    • 花瓣展开角度(0-360°)

使用Labelme进行标注时,需特别注意:

对于重叠超过30%的花朵,必须分离标注 阴天拍摄的图像需单独标记光照条件

3.3 数据增强实现

在YOLOv5原有增强基础上,新增:

class SpectralJitter: def __call__(self, img): # 在HSV空间随机扰动 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) hsv[...,0] = hsv[...,0]*random.uniform(0.9,1.1) # 色相 hsv[...,1] = hsv[...,1]*random.uniform(0.8,1.2) # 饱和度 return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

4. 模型训练与优化

4.1 训练参数配置

关键超参数设置:

  • 初始学习率:0.01(余弦衰减)
  • 批量大小:32(受限显存)
  • 输入尺寸:640×640
  • 训练轮次:300(含100轮冻结训练)

使用加权采样策略解决类别不平衡:

weights = [0.2, 0.3, 0.4, 0.1] # 对应四个开花阶段 sampler = WeightedRandomSampler(weights, num_samples=len(dataset))

4.2 改进效果对比

在测试集上的性能提升:

指标原YOLOv5s改进模型提升幅度
mAP@0.576.2%84.7%+8.5%
小目标召回率68.5%79.2%+10.7%
阶段分类准确率74.8%83.1%+8.3%
推理速度(FPS)142118-16.9%

4.3 模型轻量化处理

为适配边缘设备,进行以下优化:

  1. 通道剪枝(移除20%低贡献通道)
  2. 8位量化(使用TensorRT)
  3. 知识蒸馏(使用ResNet18作为教师模型)

优化后模型体积从14.3MB降至6.7MB,FPS恢复至135。

5. 系统集成与实地测试

5.1 部署方案

开发树莓派端侧系统:

  • 硬件:Raspberry Pi 4B + Intel Neural Stick 2
  • 软件栈:
    • 推理引擎:OpenVINO 2022.3
    • 图像采集:Picamera2库
    • 结果可视化:PyQt5

5.2 开花水平估计算法

定义开花指数计算公式:

FI = (0.2×N1 + 0.5×N2 + 0.8×N3 + 0.3×N4) / (N1+N2+N3+N4)

其中N1-N4分别对应四个阶段的检测数量。

5.3 实测性能

在3公顷试验果园的测试结果:

天气条件检测准确率指数误差
晴天86.2%±0.08
多云82.7%±0.12
阴天78.5%±0.15
雨后75.3%±0.18

6. 关键问题与解决方案

6.1 密集花朵检测优化

采用双阈值NMS策略:

  • 第一阶段:置信度阈值0.25(高召回)
  • 第二阶段:使用关键点距离进行聚类
  • 最终保留IoU<0.1的检测框

6.2 跨设备一致性保障

开发标准化色彩校正流程:

  1. 拍摄时包含ColorChecker Mini
  2. 基于色卡进行白平衡校正
  3. 转换到Lab色彩空间统一

6.3 实时性优化技巧

通过以下方法提升推理速度:

  • 使用半精度推理(FP16)
  • 对图像分块处理(重叠率15%)
  • 提前终止低置信度区域的计算

在实际部署中发现,当环境温度超过35℃时,NPU会出现性能下降。解决方法是添加散热风扇并将推理任务分时调度,避开正午高温时段。