1. 项目概述:当农业遇上AI视觉
棉花作为全球重要的经济作物,叶片病害直接影响纤维品质和产量。传统人工巡检方式存在效率低、主观性强等问题,而基于YOLOv12的识别系统将病害检测速度提升至毫秒级。这个开源项目完整实现了从数据准备到模型部署的全流程,特别设计了农户友好的交互界面,实测对常见锈病、角斑病等识别准确率达到92%以上。
2. 核心架构解析
2.1 技术栈选型依据
选择YOLOv12而非YOLOv8主要考虑三个因素:首先,新架构的E-ELAN模块显著提升小目标检测能力(棉花病斑平均尺寸仅15×15像素);其次,其改进的损失函数对类别不平衡数据更鲁棒;最后,模型量化后仅18MB大小,适合边缘设备部署。配套使用PyQt5而非Django等web框架,是考虑到基层农技站常使用Windows系统且需离线运行。
2.2 数据流设计
系统采用双通道处理模式:高分辨率图像(4000×3000)先经OpenCV进行自适应降采样,再进入YOLO网络。这种设计比直接resize保留更多细节特征,实验显示对叶缘病斑的识别率提升11%。模型输出层特别添加了病害严重度分级模块,根据病斑面积占比自动划分预警等级。
3. 数据集构建要点
3.1 数据采集规范
使用华为Mate30 Pro手机在自然光条件下拍摄,要求:
- 拍摄距离保持50-80cm
- 每张叶片包含完整叶缘
- 覆盖晨间露水/午后强光等不同工况
- 背景需包含土壤或其他叶片作为干扰项
3.2 标注技巧
采用LabelImg标注时需注意:
- 病斑边缘模糊时,以变色区域外延2像素为界
- 对重叠病斑采用"先分割后合并"策略
- 添加"healthy"负样本类别 最终构建的数据集包含8类病害共12,478张图像,按7:2:1划分训练/验证/测试集。
4. 模型训练实战
4.1 环境配置避坑指南
实测发现RTX 3060显卡搭配CUDA 11.7时会出现内存泄漏,推荐环境:
conda create -n cotton python=3.8 pip install torch==1.12.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html4.2 关键训练参数
lr0: 0.01 # 初始学习率 lrf: 0.2 # 最终学习率系数 warmup_epochs: 3 # 渐进式热身 mixup: 0.15 # 图像混合增强 copy_paste: 0.3 # 病斑复制增强特别添加了CutMix数据增强,模拟叶片重叠场景。训练时观察到验证集mAP@0.5在epoch 87达到峰值0.923,之后开始过拟合。
5. 界面开发细节
5.1 PyQt5性能优化
采用多线程架构防止界面卡顿:
class DetectionThread(QThread): result_signal = pyqtSignal(np.ndarray) def run(self): results = model(self.image) self.result_signal.emit(results)图像显示使用QLabel+QPixmap缓存机制,比直接绘制快3倍。
5.2 农户交互设计
- 采用"红黄绿"三色预警标识
- 结果页显示同类病害防治方案
- 支持方言语音播报(需额外安装pyttsx3)
- 导出检测报告含GPS坐标和时间戳
6. 部署落地挑战
6.1 边缘设备适配
在树莓派4B上的优化策略:
- 使用TensorRT量化模型至FP16精度
- 将OpenCV编译时开启NEON加速
- 限制检测分辨率不超过640×640 实测推理速度从原始3.2s提升至0.8s。
6.2 常见故障排查
- 图像模糊导致误检:添加Laplacian方差检测(阈值>100)
- 反光叶片识别异常:启用HSV颜色空间预处理
- 模型加载失败:检查protobuf版本需=3.20.x
7. 项目扩展方向
当前模型对蚜虫等虫害识别效果不佳,后续计划:
- 引入Transformer模块增强特征提取
- 增加多光谱摄像头支持
- 开发微信小程序轻量版 训练代码中已预留了多任务学习接口,可通过修改models/yolo.py中的DetectionHead类实现。