作者:張張186coolgirl | 来源:互联网 | 2023-10-15 19:37
1.1 赛题背景 昆虫的种类浩如烟海,农田常见的昆虫是人工生态系统的重要组成部分。分辨益 虫和害虫,保留益虫,消灭害虫,对于减轻害虫对农田的生产危害有重要意义。常见 农田害虫共有 138 种,天敌昆虫则为 40 种。病虫害是农业生产中的“灰犀牛”,如果 不能及时地控制病虫害问题,会导致农作物减产歉收。
如何去控制病虫害,从而提高农作物的收成是一项很重要的任务,其中最重要的 一环是准确检测病虫害。在传统方式已经无法满足规模日益增大的农业需求之后,虫 情检测灯的出现让无人监管的病虫害检测成为了可能。虫情检测灯能实现自动诱集、 杀虫、虫体分散、拍照以及上传数据等作业过程,可以帮助植保人员更快、更准确地 分析虫情,从而减少农产品农药残留,改善农田环境。 虫情检测灯的效果依赖于目标检测算法,采用高效的目标检测算法可以提高效率 和精度且降低成本,为此,国内外专家做了大量的研究,其中深度学习成为了目标检 测算法的热点。
复杂的网络结构和庞大的数据样本是深度学习的最大特点,自从深度 学习横空出世,图像识别获得了跨越性的进展。
1.2 问题重述
问题一要求我们结合附件 1 中由虫情探测灯采集的图像文件以及附件 2 中部分已 识别图像的信息,建立一个识别率高、速度快、分类准确的模型和算法,确认害虫的 位置及种类。问题二要求我们将模型应用于现实,对附件 3 进行图像识别作业并将识 别结果放在“result2.csv”中。问题三要求我们将识别结果进一步分类统计,得出附件 3 中各类害虫的数量并将统计结果放在“result3.csv”中。
1.3 文献综述 You Only Look Once (YOLO) 是一种能够实时处理对象的检测算法。它是一种 Onestage 的目标检测算法,因为它建议使用端到端的神经网络,可以同时预测边界框和类 别概率。因此,YOLO 比之前的两阶段模型(R-CNN、Fast R-CNN、Faster R-CNN)具有 更好的推理速度。YOLO 的结构很简单,它可以通过神经网络直接输出限定框的位置 与类别。另外,YOLO 的速度更快,因为 YOLO 只需要将图像放到网络即可得到最终 的检测结果,因此 YOLO 也可以实现对一段视频进行检测。YOLO 直接使用整张图片 进行检测,可以对全局信息进行编码,因而可以减少因背景造成的误差。YOLO 可以 将高度广义的特征转化到其他领域,同时它可以将目标检测问题转化为回归问题,但 是回归的精度有待提高。
随着 YOLOv5 的引入,YOLO 系列模型达到了一个前所未有的高度,其推理速 度做到了当世最强,而且 Yolov5 的模型大小只有轻量级,它的 Backbone 阶段采用了 Focus 和 CSPDarknet53 结构,Focus 结构其中比较关键的部分是切片操作,CSP 结构 先将基础层的特征映射后划分为 2 个部分,然后通过跨阶段层次结构将它们合并,解 决了梯度信息重复问题,得到更多的正样本锚,在减少了计算量的同时也可以保证准 确率。并且使用了路径聚合网络和空间金字塔池化作为 Neck 结构,PANet 基于 Mask R-CNN 和 FPN 框架,同时增强了信息的流动,该网络的特征提取器采取了一种自下 向上路径的改进的 FPN 网络结构,改善了低层特征的传播。Neck 结构主要是生成特 征金字塔,该结构可以产生不同固定尺寸的池化特征向量,同时强化了特征的表达能 力,对于同一物体在不同尺寸的检测有很好的作用。最后经过 YOLO 通用预测层,该 层主要用 Head 模型预测最终结果,在格网中根据特征标记锚定框,通过损失计算得 出目标类的概率和边框最终位置。YOLOv5 在输出端使用 GIOU Loss 作为边界框的损 失函数,因此边框有很快很好的收敛效果。
YOLOv5 共有 s、m、l、x4 种模型,4 种模型具有相同的网络结构,调整 2 个参数来 改变模型的深度和宽度。相比 YOLOv5s 模型的深度最浅,YOLOv5x 模型的 Neck 数量 最多,是 s 模型的 4 倍。YOLOv5s 模型的宽度最窄,因此卷积核的数量减半,YOLOv5x 模型的卷积核的数量最多,通道层的数量是 s 模型的 2.5 倍。YOLOv5l 模型的宽度和 深度都是初始值。在相同数据集的情况下,YOLOv5s 模型的训练和推理性能最佳,体 量最小,但是 YOLOv5x 模型的平均精度均值最佳。
二、数据探索
2.1 类别不平衡的问题 在提供的正式数据中,共计 3015 张图片,其中 2213 张图片已经给出了标注样例, 剩余 802 张图片作为测试集,训练集中共出现 28 种昆虫,使用 SPSSSPRO 平台对所 有给出标注结果的图片统计分析,发现严重存在类别不平衡问题,如图 3所示,出现 最多的昆虫是共出现 247 次的八点灰灯蛾,而出现最少的昆虫类别,例如豆野螟只出 现一次,干纹冬夜蛾只出现一次,水螟蛾只出现三次。经过统计,共有 17 种昆虫给出 的标注次数少于 20 次。与此同时,其中 1637 张图片被官方判定为无需标注,即正式 数据标注了这些图片,却没有标注任何昆虫。在 2213 张给出标注的图片中有 1637 张 为负样本,这对模型的训练不利,大大减少了能从正式数据中能够获得的信息。
2.2 数据标注质量问题
通过 python 调用 opencv 库,我们对所给出的标注图片中昆虫的具体图像做了分 离,可以发现给出的标注图像中,很多图片标注中出现了标注不准确的问题,如图 4中 中一只翅膀分别被标记为了稻螟蛉和紫条尺蛾,而图 5中对于草地螟所有通过标记给 出的五张图片中,只有一张能够完整的表示出草地螟的完整生物学特征。
样本是模型训练的基石,倘若没有良好的、大量的数据集做支撑,再好的模型也 难以训练出表现优良的模型。
2.3 样本标注不清晰 通过对给出的图片的标注区域可视化,可以发现所提供训练数据集本身对于某些 昆虫标注存在标准不明确、不完全的问题,比如大黑鳃金龟在一些图片中,训练集中 标出了大黑鳃金龟,而在别的图片中反而没有标注。在一些图片中有多只大黑鳃金龟, 但是却没有标注完全,只标注了某一只。原数据集给出的大黑鳃金龟样例图如图 6
未标出的大黑鳃金龟和甘蓝夜蛾图(均见于左上角),如图 7。 对于这样模棱两可的训练集,难以分辨清楚哪些昆虫需要标注,哪些昆虫不需要 标注。急需人工的加以干预,对数据集处以再处理。