☰
基于CNN的害虫识别全流程:数据集迭代、模型调优与边缘部署
2026/10/20 6:14:27 网站建设 项目流程

虫情监测这行干了快八年,从最早蹲在田里数黄板上的蚜虫,到现在带着深度学习模型给农业园区做全天候虫情识别,中间踩过的坑比我吃过的米还多。最近正好把某个果园的虫情检测数据集迭代到了第10365期,借这个机会把整套基于CNN的害虫识别方案从头到尾捋一遍,从数据集构建、模型选型到田间部署,包含具体的参数、损失函数调优细节和部署时遇到的硬核问题,给想入行或者正在做类似项目的朋友一个完整的参考。

先说一下这套东西到底在解决什么问题。传统虫情监测靠的是什么?测报灯、性诱剂、黄板,然后人工数虫、辨种、记录。问题在于,农业技术员数量有限,高峰期一天要处理几十个监测点的照片,一张图几百个虫体,全靠肉眼识别,准确率不稳定,时效性更是谈不上。而智慧农业的虫情监测系统要做的,就是把这些照片采集、AI识别、虫口密度统计、预警上报的链路完全自动化。这就需要一套能跑在田间边缘设备上的识别模型,搭配一个能持续迭代的数据集。本文的记录就是围绕这个链路展开的。

1. 从测报灯到数据集:一张虫情照片背后要过多少道关

虫情监测的第一步不是算法,而是数据。很多刚开始做这个方向的人会直接在网上下载公开数据集来训练,结果放到田间一测,效果一塌糊涂。原因很简单:公开数据集里的虫子大多是标本图,干净、居中、姿态标准,而田间测报灯拍下来的照片,是虫子掉落在传送带上、被灯光吸引乱爬、甚至已经残破的状态,两者的分布差异巨大。

我自己做数据集时,采集端的配置是这样的:每个监测点部署一台测报灯设备,夜间自动开灯诱虫,虫子落到设备内部的拍照仓,由工业相机定时拍摄,照片通过网络回传后台。设备拍回来的原始图分辨率为3000×3000左右,一张图少则几十个虫体,多则几百个。这里有个容易被忽略的细节:照片的拍摄时间集中在夜间到凌晨,灯光和背景板的色温会变化,同一个虫种在不同时段拍出来的颜色差异非常明显。

数据集第10365期能持续迭代至今,靠的是一套比较严格的采集清洗流程。我把原始图片分成了几个处理阶段:

  • 粗筛阶段:去除纯空背景、严重过曝、镜头沾水导致的模糊图,这个阶段会淘汰掉近三成的无效样本。
  • 切片阶段:因为原图太大,直接把整图送进检测网络会非常吃显存且小目标容易丢,所以我是对原图做滑窗切片,切成512×512或640×640的重叠切片,再按重叠区域去除重复框。
  • 人工复核阶段:所有切片图交给标注团队,标注内容包括虫体类别、边界框坐标和遮挡状态。这里特别要求把“遮挡严重”和“完整可见”分开标记,因为这两类样本在后续训练中是要分别处理的。

说到标注规范,这里值得展开讲。害虫检测的难点在于虫种多、形态相似,很多成虫和幼虫之间的差异不是专业人员根本分不出来。我们的标注类别体系是按照“危害等级+形态特征”双重维度来设计的,比如同一类鳞翅目害虫,会区分“成虫”“幼虫”两个类别,因为植保端对这两个阶段采取的措施完全不同。当前数据集第10365期覆盖的常见类别包括稻飞虱、二化螟、玉米螟、棉铃虫、蚜虫、菜青虫、草地贪夜蛾等十余个类别,每类样本量经过人工干预后尽量控制在一个数量级范围内,避免出现极端的长尾分布。

数据增强策略也需要针对田间场景专门设计。常规的随机翻转和色彩抖动肯定要有,但更重要的是模拟真实环境的光照变化,所以我加入了随机亮度和色温扰动、随机遮挡模拟(模拟虫体被叶片或同伴遮挡的情况),同时用马赛克增强和混合增强来提升模型在密集虫体场景下的表现。说句实话,好的数据增强比换更深的骨干网络带来的提升大得多,这一点在后面的训练效果对比中会反复体现。

2. 数据集的类别体系与边界框质量:精度上限在标注阶段就决定了

在模型训练之前,我觉得有必要先聊聊数据质量这个问题,因为它是后续所有精度讨论的前提。检测模型的mAP上限不是由网络结构决定的,而是由标注质量决定的。一个粗心的标注员可以把边界框画偏半个虫身,这在训练时就会被当作噪声吸收,最终表现为预测框不稳定。

我们为数据集第10365期制定过一套约束规则,核心内容有三条。第一,边界框必须贴着虫体外轮廓,不允许包含过多背景;第二,遮挡超过百分之五十的个体单独标记为“遮挡”状态,并且训练时会通过损失权重弱化这类样本对模型的影响;第三,疑难样本会标注“模糊”标签,用于后续难样本挖掘。

这里顺便说一下类别体系的表结构,方便大家参考:

类别危害作物示例常见形态阶段典型尺寸范围样本优先级
稻飞虱水稻成虫/若虫2-5mm高
二化螟水稻成虫/幼虫10-30mm高
玉米螟玉米成虫/幼虫15-25mm高
棉铃虫棉花/番茄成虫/幼虫25-40mm中
蚜虫多种作物成虫/若虫1-3mm中
草地贪夜蛾玉米/水稻成虫/幼虫20-40mm高
菜青虫十字花科蔬菜幼虫20-35mm中

这个表里的“尺寸范围”对模型设计的影响很大。像蚜虫这种只有1到3毫米的个体,在原图上可能只占几十个像素,属于典型的小目标;而棉铃虫这类体长三四十毫米的,在切片里能占到相当大的比例。如果只用固定尺寸的锚框去检测,小目标类别基本会全部漏掉。

还有一个容易被忽略的标注问题是“类间混淆”。螟蛾科的几种成虫在外观上颜色和翅斑非常接近,标注员如果缺乏植保知识,很容易标串。我们当时采取的解决办法是:每个标注图都要经过质检员复核,复核通过率低于一定阈值的标注员会被要求重新培训;同时每个类别建立标准参考图库,标注时可以直接对照,尽量减少主观判断。

3. 模型选型的路线之争:我为什么从两阶段检测转向了单阶段轻量化方案

有了数据集之后,接下来就是模型骨架和检测头的选择。很多第一次做农业视觉项目的人会直接上Faster R-CNN或者更重的两阶段检测器,理由是精度上限高。但实际上,在虫情监测这个场景下,两阶段检测器有一个很难回避的问题:推理速度不够,尤其是要部署在田间边缘盒子上时,一张3000×3000的图切成九张子图再逐张推理,整体延迟会拖到十几秒甚至更久,无法满足实时预警需求。

我更推荐从单阶段检测器起步,特别是带有特征金字塔结构的变体。特征金字塔为什么关键?因为虫体尺寸跨度极大。蚜虫和棉铃虫在同一个画面中同时出现时,普通特征层很难兼顾两者的感受野需求。特征金字塔通过自底向上和自顶向下的特征融合,让浅层高分辨率特征和深层语义特征相互作用,小目标和大目标都能获得较好的表征。

骨干网络的选择上,我也做过一轮对比实验。表格里是实测的结果,数据来自我们模拟项目X在同样的数据集第10365期子集上的训练对比(同一批训练/验证划分,输入尺寸统一为640×640,训练50个epoch):

骨干网络参数量mAP@0.5推理耗时(单张640图,边缘设备)备注
ResNet-50 + FPN约25M0.82约120ms精度好,但体量大
MobileNetV3 + FPN约5M0.76约40ms快速,小目标略弱
EfficientNet-B0 + FPN约4M0.78约45ms均衡
轻量化骨干A + BiFPN约7M0.81约55ms最终选型

从表格可以看出,轻量化骨干加上加权双向特征金字塔之后,在mAP上非常接近大骨干,但推理耗时有明显优势。最终我们选了轻量化骨干加双向特征金字塔的组合,再配合深度可分离卷积进一步压缩计算量。这套组合在边缘设备上能稳定跑到每秒15到18帧,处理一张测报灯原图(加上切片合并)的总耗时控制在3秒以内,基本满足实际项目需求。

还有一个容易被忽略的技术点是“切片推理与合并策略”。检测器训练和推理都是在切片上进行的,但切片之间会有重叠区域,同一个虫体可能出现在两个切片里,产生重复检测。我们采用的是加权非极大值抑制,对重叠切片的预测框先按置信度排序再合并,同时去除位于切片边界处的截断框。这个环节如果处理不好,部署到现场后你会看到同一个虫子被框两三次,虫口密度统计直接虚高。

4. 训练阶段最头疼的三个问题:小目标漏检、类别不平衡和难样本

把模型结构定下来之后,训练过程才是真正磨人的地方。我先说小目标漏检。虫情图片里有大量的小目标,比如蚜虫在640×640的切片里可能只有5到10个像素的宽高,即使有了特征金字塔,这种极致的小目标依然很容易被漏掉。我们做了三件事来缓解:

第一,把输入尺寸从默认的640×640提升到768×768。分辨率增加了,小目标在特征图上的响应区域也相应变大。代价是训练速度降低,但相较于精度收益是值得的。第二,在特征金字塔的浅层输出上增加了一个额外的辅助检测头,这个检测头只负责预测像素面积小于某个阈值的候选框,相当于专门为小目标开了一条支路。第三,训练时采用多尺度采样的策略,每个batch随机从(640, 672, 704, 736, 768)这些尺寸中选一个进行缩放,让模型对不同尺度的目标都有一定的适应能力。经过这三项调整,蚜虫这类小目标类别的召回率提升了大概十个百分点,效果非常明显。

然后是类别不平衡。我们数据集的样本分布是经过人工干预的,但依然存在某些常见类别样本数量远远多于稀有类别的情况。这时候如果不做任何处理,模型会倾向于把一切看起来差不多的东西都预测成高频类别。我们的处理方案分两层:第一层是采样层面,使用类别重加权采样,让每个batch里不同类别的样本比例尽量接近;第二层是损失函数层面,使用了焦点损失(focal loss),对容易分类的样本降低权重,让模型更多关注那些难分类的困难样本。这两层配合下来,稀有类别的F1值提升了很多。

但真正最难啃的骨头是难样本。什么叫难样本?比如夜间的趋光性昆虫,会被灯光吸引后在背景板上反复撞击,拍出来的姿态极其扭曲;比如蜕皮后的虫体残壳,外形上非常接近完整虫体,但实际不是需要防治的对象;再比如被雨滴模糊过的照片,虫体和背景的对比度大幅下降。模型在前两类样本上的误检率一直降不下来。

我们在数据集第10365期中专门建了一个难样本子集,把每次现场测试中模型的误检和漏检图片回流到这个子集里,再定期用它们做一次增量训练。这个闭环流程大概两周跑一轮,跑了十几轮之后,模型对蜕皮残壳和雨滴模糊场景的鲁棒性明显改善。这个过程也让我确认了一个观点:模型迭代不是靠调参,而是靠持续用真实现场数据“喂”它。你永远无法在训练集里模拟出所有现场情况,唯一可行的方案是建立一个高质量的数据回流闭环。

5. 部署到田间的最后一公里:模型量化、推理优化和边缘硬件选择的经验

模型训练到可用精度只是第一步,田间部署才是真正考验系统的阶段。部署在农田里的边缘设备,要面对的是高温、高湿、昼夜温差大、供电不稳定这些恶劣条件,同时处理器又不能太贵,功耗要足够低。我们用的边缘设备是一块嵌入式开发板,配备四核处理器和一块约2TFLOPS算力的NPU。这个配置算是虫情监测场景里比较主流的选择,既能保证推理速度,功耗也能控制在十几瓦以内,配上太阳能供电系统基本能支持全天候运行。

模型直接训练出来的权重在这个设备上跑,一开始效果并不理想。原始模型是FP32精度,尺寸大、推理慢。我们做了两步优化:第一步是量化,将FP32模型转成INT8。量化过程需要选校准数据集,我建议直接从数据集第10365期中随机抽几百张现场照片,而且一定要覆盖夜间灯光、雨天、不同作物背景等真实情况。校准集选得不好,量化后的精度损失会明显增大。第二步是结构剪枝,对BN层稀疏化之后去除一部分冗余通道,这一步能再压掉将近三分之一的计算量,mAP损失控制在1%以内。

推理优化层面有几个细节值得记录。我试过把切片推理改成多线程并行,每个线程独立处理一张切片,然后用队列把结果汇总到合并模块。这样切片的处理时间就从“单个切片耗时乘以切片数量”变成了近似“最大单切片耗时”。在处理3000×3000大图时,九张切片并行推理,整图的处理时间从原来的3秒多压缩到不到1秒,在需要密集监测的场景里体验提升非常明显。

实际部署后还要花大量精力处理系统层面的问题。照片通过4G网络回传,如果遇上网络信号弱的时段,回传会堆积,模型识别的结果无法及时同步到后台。我们最后的做法是,在边缘设备上做一次轻量级判定,只回传置信度高于阈值或疑似数量异常的切片,其他低置信度切片只上传缩略图。这样既减轻了网络压力,又保证了关键虫情不会漏报。

这里我还想分享一个设备维护层面的教训。虫情测报灯是机械结构,传送带和接虫板会沾上虫体残留物,拍照仓的玻璃用久了会模糊,如果软件系统不做任何提示,管理员很难及时发现问题。后来我们在系统里加了一项“图像质量自检”功能,定期计算上传照片的清晰度和背景纯净度,一旦发现指标连续异常,自动推送维护提醒。这个功能虽然不涉及模型算法,但对系统长期稳定运行的重要性不亚于模型本身。

6. 从识别出虫到辅助决策:虫口密度、趋势曲线与区域预警的联动

模型把虫子识别出来之后,整个系统其实只完成了一半。另一半是把识别结果转化成植保决策需要的信息。我们目前的输出包含几个层次:单张图片的虫种、数量置信度列表,每个监测点的虫口密度趋势曲线,以及按行政区划聚合后的区域虫情分布热力图。

虫口密度的计算逻辑看起来简单,实际处理时有很多细节。测报灯诱虫的虫口数量会受天气、灯光强度、设备位置等因素影响,单纯统计识别数量会出现很大的波动。我们的做法是引入一个标准化系数,用近一周的设备历史均值和当天识别数量的比值来做平滑处理,再结合温度、湿度数据修正。修正后的虫口密度曲线比原始计数稳定很多,能够更准确地反映真正的种群增长趋势。

在预警层面,我们设置了两级阈值。一级阈值基于虫口密度超过区域历史平均水平,触发提醒;二级阈值基于连续三天的增长斜率超过设定值,触发防治建议。这套规则其实是从植保站的专家经验里抽象出来的,模型本身不做决策,只是提供客观识别数据,专家规则层负责把数据变成可执行的建议。这样做的原因很务实:目前任何深度学习模型都做不到理解复杂的作物生长阶段和气象因素,专家的规则库在可解释性和稳定性上更有优势。

最后说一个我们正在探索的方向。目前模型识别的是图像中的虫体数量,下一步我们想通过虫体体积估算、雌雄比例识别和发育阶段分类,进一步推算害虫的繁殖潜力和最佳防治窗口期。这些任务需要的数据要比现在的边界框标注复杂得多,比如需要标注生殖器官特征点、测量翅展长度等,但如果能做成,植保端就能从“看到虫”升级为“预判灾”,整个系统的价值会产生质变。

我自己的体会是,做农林业的视觉项目,最难的不是把精度从90%刷到95%,而是想清楚数据从哪来、模型在哪跑、结果给谁用这三件事。数据集第10365期只是一路迭代的一个切片,真正让系统发挥作用的,是它背后那条从采集端到决策端的完整闭环链路。希望能给正在做同类项目的朋友一点参考,也欢迎有实际部署经验的人多交流现场遇到的坑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询