一、辣椒病虫害图像识别挑战赛简介
比赛地址:challenge.xfyun.cn/topic/info?…
1.赛事背景
农作物病虫害严重制约着农业生产,因为农作物病虫害种类多、密度大,极易造成农作物大量减产。同时由于传统人眼识别病虫害的方法速度较慢、准确度较低,会导致农药的滥用,破坏自然环境。如今随着精准农业和智慧农业概念的兴起和发展,利用信息技术辅助农业生产,实现对农作物病虫害的智能识别和检测,以减少不必要的农药喷施,对保护生态系统均衡,保障农作物安全生产,提高农作物的质量方面,有着十分重要的促进作用。
2.赛事任务
最为有效的病虫害识别方法是图片识别,本次大赛提供了大量农民在田间地头拍摄的辣椒的病虫害图片,涉及病虫害种类较多,参赛选手需基于提供的样本构建模型,实现辣椒的病虫害图像识别。
3.数据介绍
本次比赛为参赛选手提供了辣椒的病虫害图像数据:包括图像及其所属病虫害标签。数据主体为农民在不同环境条件下拍摄的辣椒的农作物图像,每张图像的主体突出度,背景复杂程度、光照条件,图像清晰度均存在一定差别。 其中疾病分类:
- 炭疽病 d1
- 疫病 d2
- 用药不当 d3
- 病毒病 d4
- 温度不适 d5
- 螨虫 d6
- 细菌性病害 d7
- 根腐病 d8
- 缺素 d9
- 脐腐病 d10
- 蓟马 d11
二、PaddleX环境准备
飞桨图像识别套件PaddleClas是飞桨为工业界和学术界所准备的一个图像识别任务的工具集,助力使用者训练出更好的视觉模型和应用落地。此次计划使用端到端的PaddleClas图像分类套件来快速完成分类。此次使用PaddleClas框架完成比赛。
!pip install --upgrade paddlex >log.log
!pip list|grep paddlex
三、数据准备
1.数据解压缩
#解压缩 !unzip -qoa data/data153190/辣椒病虫害图像识别挑战赛公开数据.zip -d data/
# 重命名目录 !mv data/└▒╜╖▓б│ц║ж═╝╧ё╩╢▒Ё╠Ї╒╜╚№╣л┐к╩¤╛▌ data/pepper
!mv data/pepper/└р▒Ё║м╥х.txt data/pepper/label.txt
!mv data/pepper/╠с╜╗╩╛└¤.csv data/pepper/test.csv
!head data/pepper/label.txt
2.数据集划分
!paddlex --split_dataset --format ImageNet --dataset_dir data/pepper/train --val_value 0.1
3.导入PaddleX库
# 环境变量配置,用于控制是否使用GPU # 说明文档:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html#gpu import os os.environ['CUDA_VISIBLE_DEVICES'] = '0' import paddle import paddlex as pdx from paddlex import transforms as T
4.数据增强
# 定义训练和验证时的transforms # API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/transforms/transforms.md train_transforms = T.Compose([ T.RandomCrop(crop_size=224), T.RandomHorizontalFlip(), T.RandomDistort(), T.RandomBlur(prob=0.1), T.Normalize()]) eval_transforms = T.Compose([ T.ResizeByShort(short_size=256), T.CenterCrop(crop_size=224), T.Normalize() ])
5.定义数据集
# 定义训练和验证所用的数据集 # API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/datasets.md train_dataset = pdx.datasets.ImageNet( data_dir='data/pepper/train', file_list='data/pepper/train/train_list.txt', label_list='data/pepper/train/labels.txt', transforms=train_transforms, shuffle=True) eval_dataset = pdx.datasets.ImageNet( data_dir='data/pepper/train', file_list='data/pepper/train/val_list.txt', label_list='data/pepper/train/labels.txt', transforms=eval_transforms)
2022-06-28 18:32:02 [INFO] Starting to read file list from dataset... 2022-06-28 18:32:02 [INFO] 6804 samples in file data/pepper/train/train_list.txt 2022-06-28 18:32:02 [INFO] Starting to read file list from dataset... 2022-06-28 18:32:02 [INFO] 752 samples in file data/pepper/train/val_list.txt
四、模型训练
1.模型初始化
num_classes = len(train_dataset.labels) model = pdx.cls.DarkNet53(num_classes=num_classes) # 自定义优化器:使用CosineAnnealingDecay train_batch_size = 256 num_steps_each_epoch = len(train_dataset) // train_batch_size num_epochs = 100 scheduler = paddle.optimizer.lr.CosineAnnealingDecay( learning_rate=.001, T_max=num_steps_each_epoch * num_epochs) warmup_epoch = 5 warmup_steps = warmup_epoch * num_steps_each_epoch scheduler = paddle.optimizer.lr.LinearWarmup( learning_rate=scheduler, warmup_steps=warmup_steps, start_lr=0.0, end_lr=.001) custom_optimizer = paddle.optimizer.Momentum( learning_rate=scheduler, momentum=.9, weight_decay=paddle.regularizer.L2Decay(coeff=.00002), parameters=model.net.parameters())
2.开始训练
model.train( num_epochs=num_epochs, train_dataset=train_dataset, train_batch_size=train_batch_size, eval_dataset=eval_dataset, optimizer=custom_optimizer, save_dir='output/darknet53', save_interval_epochs=2, use_vdl=True)
五、预测并提交
重启环境,释放现存,预测结果
# test_images文件夹批量预测 import pathlib import os import paddlex as pdx # 载入模型 model = pdx.load_model('output/darknet53/best_model') # 结果文件 f=open("result.csv","w") f.write('image,label\n') # 遍历文件夹 test_data_dir = pathlib.Path('data/pepper/test') # 不带目录,直接图片 test_files=list(test_data_dir.glob('*.jpg')) for myfile in test_files: result = model.predict(str(myfile)) filename=os.path.basename(myfile) # 写入文件 f.write(f"{filename},{result[0]['category']}\n") f.close()
2022-06-29 07:11:53 [INFO] Model[DarkNet53] loaded. Corrupt JPEG data: 114 extraneous bytes before marker 0xd9 Invalid SOS parameters for sequential JPEG
下载提交即可获得成绩