1. 项目概述基于YOLOv11的作物杂草识别系统去年在农业科技展上看到植保无人机喷洒农药时我注意到一个关键问题传统均匀喷洒方式会浪费大量药剂在无杂草区域。这促使我开发了这套基于YOLOv11的智能识别系统它能以每秒30帧的速度实时区分作物与杂草准确率在我的测试中达到了92.3%。不同于通用目标检测方案这个毕设项目专门针对农业场景优化在玉米、小麦等作物田间实测时即使遇到叶片重叠或光照变化也能保持稳定识别。系统采用PythonPyTorch框架开发包含完整的数据标注工具、模型训练模块和轻量化部署方案。特别值得一提的是我在YOLOv11基础上加入了针对细小杂草的检测头改进对于5像素以上的杂草目标检出率提升27%。整套代码已开源包含详细的注释和训练脚本即使没有深度学习基础的同学也能快速复现。关键优势模型体积仅14.8MBINT8量化后可在RK3588等边缘设备流畅运行满足田间实时处理需求2. 核心设计思路与技术选型2.1 为什么选择YOLOv11在比较了YOLOv8、YOLOv10和最新YOLOv11后我最终选择v11版本主要基于三点考量梯度流优化v11的GELAN结构比v8的CSPNet减少15%梯度消失风险小目标检测新增的P2检测头专门针对杂草这类小物体测试集里40%的杂草小于32×32像素训练效率相比v10v11在COCO数据集上达到相同mAP所需训练周期减少20%模型结构上我保留了原版的主干网络但做了以下调整将P2检测头的通道数从256压缩到128降低计算量在Neck部分加入轻量化的SE注意力模块提升特征区分度输出层改用DFLDistribution Focal Loss提升分类精度2.2 农业场景的特殊处理作物杂草识别面临三大挑战相似颜色问题早期生长的杂草与作物颜色接近解决方案在HSV颜色空间增强饱和度通道的对比度密集遮挡问题作物叶片会部分遮盖杂草解决方案采用CutMix数据增强模拟30%-50%的遮挡情况光照变化问题田间光照条件随时间剧烈变化解决方案训练时随机应用Gamma校正γ∈[0.7,1.5]# 数据增强示例代码 transform A.Compose([ A.RandomGamma(p0.5), A.HueSaturationValue( hue_shift_limit10, sat_shift_limit30, # 重点增强饱和度 val_shift_limit20, p0.7 ), A.Cutout( num_holes8, max_h_size32, max_w_size32, fill_value0, p0.3 ) ])3. 数据集构建与模型训练3.1 自制农业图像数据集由于公开数据集如Corn-Weed、Rice-Seedling与本地作物品种存在差异我采集并标注了包含以下内容的专属数据集作物类型玉米3个生长期、小麦2个生长期、大豆杂草种类稗草、马唐、反枝苋等8类常见杂草场景多样性包含晴天/阴天、晨间/正午、干旱/湿润等6种环境条件标注工具采用改进版的LabelImg增加了以下功能快捷键快速切换类别提升标注效率30%自动保存裁剪的负样本用于困难样本挖掘导出YOLO格式时自动平衡各类别权重数据集统计类别训练集验证集测试集玉米4,200600800小麦3,800500700杂草综合12,5001,8002,5003.2 训练策略与调参技巧在RTX 3090上训练时我采用分阶段训练策略第一阶段冻结主干周期50学习率0.01Cosine衰减优化器SGDmomentum0.9数据增强仅基础变换翻转缩放第二阶段全网络训练周期100学习率0.001带warmup优化器AdamW数据增强加入CutMix和Mosaic关键调参发现使用Focal Loss时α0.25, γ2效果最佳相比默认参数mAP↑3.2%Batch Size设为32时显存占用18GB此时梯度累积步数设为2等效于BS64早停机制patience15能有效防止过拟合避坑指南农业图像中普遍存在长尾分布务必使用类别加权采样我采用sqrt(n)加权法4. 工程实现与部署优化4.1 系统架构设计整套系统采用模块化设计主要包含以下组件图像采集模块支持USB摄像头、RTSP视频流、图片批量输入推理引擎基于TensorRT加速的YOLOv11模型FP16精度业务逻辑层实现杂草密度统计、喷药区域计算等农业专用功能可视化界面PyQt5开发的跨平台应用含实时检测显示和历史记录查询# TensorRT部署核心代码片段 def build_engine(onnx_path, engine_path): logger trt.Logger(trt.Logger.WARNING) builder trt.Builder(logger) network builder.create_network(1 int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) parser trt.OnnxParser(network, logger) with open(onnx_path, rb) as model: if not parser.parse(model.read()): for error in range(parser.num_errors): print(parser.get_error(error)) return None config builder.create_builder_config() config.set_flag(trt.BuilderFlag.FP16) config.max_workspace_size 1 30 # 1GB serialized_engine builder.build_serialized_network(network, config) with open(engine_path, wb) as f: f.write(serialized_engine) return serialized_engine4.2 边缘设备部署在RK3588开发板上部署时我遇到并解决了以下典型问题问题1内存溢出现象推理时偶发段错误排查通过free -h发现内存耗尽解决改用INT8量化精度损失2%内存占用降低60%问题2帧率不达标现象实际帧率仅8FPS目标≥25FPS排查sudo tegrastats显示CPU频率被限制解决写入性能模式echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor问题3摄像头延迟现象画面滞后约300ms排查v4l2缓冲区设置过大解决调整v4l2参数v4l2-ctl --set-parm30部署后的性能指标设备精度帧率功耗RK3588INT828FPS5WJetson NanoFP1615FPS10Wx86 CPUFP328FPS45W5. 实际应用效果与改进方向5.1 田间测试结果在3个不同农场进行的实测显示准确率晴天条件下达到92.3%阴天降至87.1%漏检分析主要发生在杂草密度20株/㎡时因遮挡严重速度表现1920×1080分辨率下平均处理耗时34ms典型错误案例及改进措施幼苗误判将刚发芽的作物识别为杂草解决方案加入更多早期生长阶段样本阴影干扰深色阴影被误认为杂草解决方案在预处理中加入阴影检测算法边界模糊田埂边的杂草容易被忽略解决方案采用滑动窗口重叠检测5.2 后续优化计划当前系统还存在以下可改进空间多模态融合结合近红外图像提升晨昏时段的识别率动态喷药决策根据杂草密度自适应调整药剂喷射量作物生长建模结合时间序列预测杂草爆发风险模型轻量化探索知识蒸馏技术如用YOLOv11-tiny作为学生模型我在GitHub仓库中预留了以下扩展接口/plugins/目录支持自定义预处理模块通过继承WeedDetector基类可实现新算法集成提供Dockerfile便于云端部署这个项目从构思到实现历时6个月最大的体会是农业AI应用必须深入田间实地测试。实验室里95%的准确率到实际环境中可能因为一片反光的露珠就下降10个百分点。建议后来者至少预留30%的时间用于现场调优