1. 项目概述:当草莓遇上YOLOv8
去年夏天在农场调研时,发现果农们每天要花4-6小时手工分拣草莓,成熟度判断误差率高达15%。这促使我尝试用YOLOv8构建一套能自动识别草莓成熟度的系统。经过三个月的迭代,最终实现的模型在测试集上达到94.3%的准确率,比传统图像处理方法快了23倍。
这个项目完整实现了从数据采集到部署的全流程:
- 使用自制标注工具构建包含5,200张图片的YOLO格式数据集
- 基于PyQt5开发了带实时检测功能的可视化界面
- 采用迁移学习策略在RTX 3060上仅需2小时即可完成模型训练
- 最终打包成exe文件可直接在无Python环境的Windows电脑运行
2. 核心方案设计
2.1 技术选型对比
测试了三种方案后发现:
| 方案 | 准确率 | 推理速度(FPS) | 显存占用 |
|---|---|---|---|
| ResNet50 | 88.2% | 45 | 3.2GB |
| Faster R-CNN | 91.7% | 28 | 4.8GB |
| YOLOv8n | 94.3% | 63 | 2.4GB |
选择YOLOv8n的原因:
- 实时性要求:果园分拣线传输带速度1.2m/s
- 设备限制:部署环境是Jetson Xavier NX嵌入式设备
- 模型体积:最终打包的exe需要控制在300MB以内
2.2 数据采集难点突破
在山东草莓基地拍摄时遇到的主要问题:
- 反光问题:晨露造成的镜面反射(解决方案:偏振镜+侧光拍摄)
- 遮挡问题:叶片遮挡超过30%的果实(解决方案:设计专用夹具调整植株角度)
- 色差问题:不同光照条件下的颜色偏差(解决方案:使用X-Rite ColorChecker进行白平衡校准)
最终构建的数据集包含:
- 6种常见草莓品种
- 4个成熟度等级(青果、半熟、成熟、过熟)
- 每种状态至少1300张样本
- 标注文件采用YOLOv8要求的txt格式
3. 关键实现细节
3.1 数据增强策略
在albumentations中配置的增强管道:
transform = A.Compose([ A.RandomBrightnessContrast(p=0.5), A.HueSaturationValue(hue_shift_limit=20), A.RandomShadow(shadow_roi=(0,0,1,0.5)), A.CoarseDropout(max_holes=8), A.Rotate(limit=15), A.RandomResizedCrop(640, 640, scale=(0.8, 1.0)) ], bbox_params=A.BboxParams(format='yolo'))特别注意:
- 禁用垂直翻转(草莓生长方向固定)
- 阴影增强模拟温室桁架遮挡
- 色相偏移范围控制在±20以内(避免改变成熟度特征)
3.2 模型训练技巧
关键训练参数配置:
lr0: 0.01 # 初始学习率 lrf: 0.1 # 最终学习率倍数 weight_decay: 0.0005 warmup_epochs: 3 batch: 16改进措施:
- 添加CBAM注意力模块(提升小目标检测能力)
- 采用指数移动平均(EMA)策略
- 使用加权NMS解决果实重叠问题
实测发现:当学习率高于0.02时模型容易在20epoch后发散
4. 界面开发与部署
4.1 PyQt5界面设计
主要功能模块:
- 视频流处理线程(OpenCV+QThread)
- 实时检测结果显示(QPixmap动态刷新)
- 结果统计面板(PyQtGraph可视化)
- 模型热切换功能(QComboBox驱动)
性能优化点:
- 使用内存映射传递图像数据
- 检测结果采用增量更新
- 启用CUDA加速的图像预处理
4.2 打包部署方案
使用PyInstaller打包时的特殊配置:
hiddenimports = [ 'ultralytics.yolo.engine', 'torch._C', 'PIL._imaging' ]解决的主要问题:
- OpenCV视频编解码器缺失(手动添加ffmpeg.dll)
- CUDA运行时依赖(打包时包含cudnn_ops_infer64_8.dll)
- 模型文件加密(使用AES-256加密后运行时解密)
5. 实测效果与优化
在寿光草莓合作社的测试数据:
| 指标 | 人工分拣 | 本系统 |
|---|---|---|
| 处理速度 | 300个/小时 | 2200个/小时 |
| 误判率 | 14.7% | 5.3% |
| 人力成本 | 3人/线 | 0.5人/线 |
遇到的典型问题及解决方案:
- 阴天误检问题:增加多云天气数据增强
- 品种差异问题:建立品种特征库动态调整阈值
- 设备发热问题:添加温度控制线程动态调节推理频率
6. 项目扩展方向
当前正在尝试的改进:
- 多光谱成像(识别内部成熟度)
- 三维重建(估算果实体积)
- 自动分拣机械臂控制
对于想复现项目的开发者建议:
- 小样本场景可先用公开数据集(如AgriFruit)
- 部署到树莓派时建议使用YOLOv8s版本
- 界面开发推荐使用Qt Designer提高效率