来源:投稿 作者:LSC
编辑:学姐
比赛官网:
https://www.dataglobal.cn/cmpt/signUpInfo200.html
任务描述
请参赛者设计智慧农业病虫害检测系统,给出一体化问题解决方案,鼓励参赛选手结合某一果园/农作物实际情况建立自身方案。
基于主办方(或公开数据集)提供的农作物叶子图像数据,构建病虫害辨识模型,准确辨识农作物及病虫害种类,为农户积极防御病虫害提供合理化建议,解决智慧果园病虫害辨识问题。
任务目标
-
(1)智慧农业病虫害精准辨识方法(必要);
-
(2)智慧农业病虫害检测系统(必要);
-
(3)模型测试验证结果(加分项);
-
(4)配套代码注释与必要的文档说明(加分项)。 赛题是一个图像分类问题,数据集分布类似下图(原数据集找不到了,赛后没有保存,官网也没有了):
每个文件夹里面包含每个类别的图像
总体方案
针对智慧农业病虫害精准辨识方案,一般通过数据挖掘、计算机视觉等技术,采用特定的算法和数据模型,对农业病虫害的图像进行广泛挖掘和深度匹配,以获得准确有效的数据特征。因此,我们主要选择先进的深度学习图像分类模型框架,共计三种分类模型实现病虫害辨识,分别为Paddle的专门图像分类套件Paddlex和Paddleclas实现和人工智能深度学习框架Pytorch图像分类套件MMClassification。
方案流程主要包括图片数据预处理、模型选择、模型训练及测试、指标评估等流程,反复观察实验结果,经过多次调参及预训练,最终模型分类精度可以达到100%,本次方案流程图如下。为了使得图片智能识别更精准,我们需要大量的农作物虫害病症的图片样本采集。
图片数据预处理
(1)针对本次智慧农业病虫害数据集,图片总共分为3类,对应命名分类标签,经观察发现,每种类别数量均衡,且都是400多张。另外,本次图片数据集分辨率高,像素清晰,容易辨别。因此,无需更多数据增强操作,应用大部分经典模型都能取得不错的效果。
(2)由于在服务器上跑模型的时候,是基于ubuntu系统,所以解压题目数据后用zip压缩文件并重新命名agri_pest.zip。
(3)数据操作: 统一随机打乱数据集,并且按照按9:1划分训练集和验证集。
模型选择
使用Paddlex (官网链接: https://github.com/PaddlePaddle/PaddleX)
Paddlex是一个集成图像分类、目标检测、实例分割、语义分割的套件,使用简便,封装了很多训练方法和会自动加载经典的预训练模型权重。
首先,对图片进行预处理操作并随机打乱数据。
其次,考虑实验精度及速度,本次模型选择带有知识蒸馏的ResNet101_vd_ssld模型,结合使用标签平滑、早停等训练技巧。
最后,经过多次实验尝试,对原始的学习率进行修改及调整学习率衰减策略,实验以准确率为评价指标,最终准确率达到100%。
每张图片文件对应分类结果,其中0为Healthy、1为Powdery、 2为Rust,将结果导出result.txt,下同。
第一轮验证集,准确率就达到98%,第二轮训练集的准确率达到100%,如下图所示:
第三轮验证集准确率达100%,如下图所示:
本次实验将最好的模型权重已经保存在百度网盘上,代码文件及说明见main.ipynb、数据文件、结果文件result.txt见附件Paddlex文件夹。
使用Paddleclas
PaddleClas图像分类套件,包括模型开发、训练、压缩、部署全流程,助力开发者更好的开发和应用图像分类模型。PaddleClas同时提供服务器端模型与端侧轻量化模型来支撑不同的应用场景,为确保最终识别精度,选择PaddleClas提供的SWinTransformer模型。
(1)官网下载套件: https://github.com/PaddlePaddle/PaddleClas 根据文档 https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/docs/zh_CN/models/ImageNet1k/model_list.md#ViT&DeiT
选择在imagenet上精确度最高的CSWinTransformer_large_384网络。
(2)修改配置文件CSWinTransformer_large_384.yaml修改相关参数,数据集路径、训练轮数、预训练模型权重等,参数与结果如附件所示。
(3)由于数据量比较少,模型强大,为了节约时间、算力和避免过拟合,提前终止训练流程。训练3个epoch后,验证集准确率高达100%,如下图所示:
部分测试集推理结果如下:
全部测试集推理结果如result.txt所示。代码main.ipynb、数据处理文件、配置文件见附件PaddleClas文件夹。
使用MMClassification
第三种方案使用MMClassification,它是一款基于 PyTorch 的开源图像分类工具箱, 集成了常用的图像分类网络,将数据加载,模型骨架,训练调参,流程等封装为模块调用,便于在模型间进行转换和比较,高效简洁的实现了参数调整。
同上述两种方案,本方案最新最强大的中的swin_transformer模型,由于模型权重大及环境限制,保存结果占据空间比较多,本次实验只训练20轮,其中模型效果最好的是第19轮,最终在验证集效果达到87.2%,如下图所示,
由于训练时间及服务器环境限制,本模型没有进一步调优,后续如果有幸能进入决赛会进一步优化。
代码train.ipynb、测试集结果result.json等在附件MMClassification中。
代码都保存在code.zip文件中。
模型总结和后期优化
本系统基于提供的农作物叶子图像数据集,构建病虫害辨识模型,最终通过三种深度学习分类模型实现,最终验证集准确度达到100%,以下是模型总结和优化方向。
(1) 本次数据集都是按9:1划分训练集和验证集,结合交叉验证的方法训练,也可以用全部的数据进行训练模型,但是容易过拟合,可以使用focal loss、label smooth等策略尽力避免。
(2) 可以使用模型融合、模型投票的策略,但是会加大模型权重,考虑部署起来不方便。
(3) 在保证数据质量的前提下,采集更多的数据集,对数据进行增广。增强模型泛化能力。
(4) 针对后期移动端部署,可以选择轻量化模型mobilenet等进行训练,由于数据量比较少,用权重大的模型效果不一定很好,网络可能得不到充分的训练。
后续可以对模型进行部署,做成一个专门的图像分类检测系统。
本文模型权重数据资料🚀🚀🚀
关注下方卡片《学姐带你玩AI》
回复“模型权重”即可领取
码字不易,欢迎大家点赞评论收藏!