1. 项目背景与研究意义
苹果花开花水平估计是果园精准管理的关键技术之一。传统的人工观测方法存在效率低、主观性强等问题,而基于计算机视觉的自动化监测方案正在成为研究热点。我在参与某大型果园数字化改造项目时,发现现有目标检测算法在花朵识别中存在三个典型问题:密集花朵的漏检率高、不同开花阶段的分类准确度不足、复杂光照条件下的稳定性差。
这个毕业设计选择改进YOLO算法来解决这些问题,主要基于两点考虑:首先,YOLO系列算法在实时性方面具有明显优势,适合部署在果园移动监测设备上;其次,其单阶段检测的特性便于进行针对性的网络结构优化。通过该项目验证的算法模型,最终可应用于智能果园的以下场景:
- 开花物候期的自动记录
- 最佳授粉时机的判断
- 产量预测模型的输入数据采集
2. 算法选型与技术路线
2.1 YOLOv5基础架构分析
选择YOLOv5s作为基础模型,在保持轻量化的同时,其网络结构包含:
- Backbone:CSPDarknet53(跨阶段局部网络)
- Neck:PANet(路径聚合网络)
- Head:三个检测尺度(80×80,40×40,20×20)
实测发现原模型在苹果花检测中的主要不足:
- 小目标召回率仅68.5%(测试集数据)
- 对重叠花朵的分离能力差
- 开花阶段分类准确率不足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张,按开花程度分为:
- 花蕾期(15%)
- 初开期(35%)
- 盛花期(40%)
- 凋谢期(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.5 | 76.2% | 84.7% | +8.5% |
| 小目标召回率 | 68.5% | 79.2% | +10.7% |
| 阶段分类准确率 | 74.8% | 83.1% | +8.3% |
| 推理速度(FPS) | 142 | 118 | -16.9% |
4.3 模型轻量化处理
为适配边缘设备,进行以下优化:
- 通道剪枝(移除20%低贡献通道)
- 8位量化(使用TensorRT)
- 知识蒸馏(使用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 跨设备一致性保障
开发标准化色彩校正流程:
- 拍摄时包含ColorChecker Mini
- 基于色卡进行白平衡校正
- 转换到Lab色彩空间统一
6.3 实时性优化技巧
通过以下方法提升推理速度:
- 使用半精度推理(FP16)
- 对图像分块处理(重叠率15%)
- 提前终止低置信度区域的计算
在实际部署中发现,当环境温度超过35℃时,NPU会出现性能下降。解决方法是添加散热风扇并将推理任务分时调度,避开正午高温时段。