使用PaddleX实现的智慧农业病虫检测项目
时间:2025-07-24 | 作者: | 阅读:0本项目借助PaddleX组件,基于自制的1080张30类病虫图片数据集(分训练、验证、测试集),采用PPYOLO算法实现智慧农业病虫检测。通过数据预处理、模型训练与评估,模型测试集mAP达68.44%。虽因硬件限制未部署于无人机,但已完成检测算法开发,可检测病虫并反馈,助力早发现早解决虫灾。
使用PaddleX实现的智慧农业病虫检测项目
在本项目中,使用PaddlX组件,在自制的病虫数据集上,采用ppyolo算法实现了农业的病虫检测。预期成功是将其部署在无人机上,使用无人机巡视农业区并自动化地统计病虫种类数量及时与相关工作人员进行汇报。
一、项目背景
随着计算机视觉领域的技术不断成熟,越来越多的相关技术落地到实际应用场景中。在智慧农业方面,害虫对作物的侵蚀程度不亚于人类经历的各种灾难,但是与天灾不同,作物受到害虫的侵害是可以经过人工处理后避免的,传统的人工农业管理通常是通过农民手工进行检查和除虫 这种传统的生产已经不能满足现在社会生活的需要。为此,本项目引入了计算机视觉领域的目标检测算法,旨在尽可能多的检测出作物上的病虫,同时将其结果反馈给相关工作人员,使得虫灾及早被发现,及早被解决,将病虫扼杀在萌芽之中。
二、数据集介绍
本项目采用的是AIStudio公开数据集中提供的常见病虫识别样本数据集,经过对数据的清洗和格式的重新编写,符合了VOC数据集的格式。
改数据集一共1080张病虫图片,其中训练集864张,验证集162张,测试集54张,共30种不同的病虫类别(区分成虫与幼虫)。
部分数据集数据如下图所示:
?
1. 数据集解压
In [2]%cd /home/aistudio/work/!tar -xf /home/aistudio/work/Pears.tar登录后复制 ? ? ? ?
/home/aistudio/work登录后复制 ? ? ? ?In [1]
%cd /home/aistudio/work/!pip install paddlex登录后复制 ? ?
2.检查数据集的图片是否均可读取
In [16]# 检查数据集是否可用%cd /home/aistudio/work/Pears/!python check.py登录后复制 ? ? ? ?
/home/aistudio/work/Pears 51%|█████████████████████ | 445/866 [00:09<00:10, 41.99it/s]JPEGImages/619.jpg 91%|█████████████████████████████████████▎ | 789/866 [00:14<00:01, 55.37it/s]登录后复制 ? ? ? ?
3. 查看数据集的类别信息
In [4]import osimport tqdmimport xml.etree.ElementTree as ET paths = ”./Pears/Annotations/“classes = []files = os.listdir(paths)for i in files: path = paths+i with open(path,'r') as f: text = f.read() root = ET.fromstring(text) for obj in root.iter(”object“): obname = obj.find(”name“).text classes.append(obname)classes = set(classes)print(classes)print(len(classes))登录后复制 ? ? ? ?
{'Larva_Apriona_Germari', 'Larva_Micromelalopha_Troglodyta_Graeser', 'Larva_Cnidocampa_Flavescens_Walker', 'Larva_Anoplophora_Chinensis', 'Larva_Erthesina_Fullo_Thunberg', 'Larva_Monochamus_Alternatus', 'Adult_Plagiodera_Versicolora', 'Adult_Spilarctia_Subcarnea', 'Larva_Latoia_Consocia_Walker', 'Adult_Apriona_Germari', 'Larva_Jewel_Beetle', 'Adult_Erthesina_Fullo_Thunberg', 'Adult_Monochamus_Alternatus', 'Adult_Psilogramma_Menephron', 'Adult_Giant_Mealy_Bug', 'Adult_Latoia_Consocia_Walker', 'Larva_Clostera_Anachoreta_Fabricius', 'Adult_Cnidocampa_Flavescens_Walker', 'Adult_Sericinus_Montelus_Gray', 'Larva_Hyphantria_Cunea', 'Larva_Psilogramma_Menephron', 'Adult_Jewel_Beetle', 'Adult_Micromelalopha_Troglodyta_Graeser', 'Adult_Hyphantria_Cunea', 'Adult_Anoplophora_Chinensis', 'Larva_Plagiodera_Versicolora', 'Larva_Spilarctia_Subcarnea', 'Adult_Clostera_Anachoreta_Fabricius', 'Larva_Giant_Mealy_Bug', 'Larva_Sericinus_Montelus_Gray'}30登录后复制 ? ? ? ?
4.划分数据集
这一步可以跳过,在开发阶段已经执行过了
In [5]# 划分数据集!paddlex --split_dataset --format VOC --dataset_dir /home/aistudio/work/Pears --val_value 0.15 --test_value 0.05登录后复制 ? ? ? ?
Dataset Split Done.Train samples: 866Eval samples: 162Test samples: 54Split files saved in /home/aistudio/work/Pears登录后复制 ? ? ? ?In [?]
#制作COCO数据集#提取文件下img目录所有照片名不要后缀import pandas as pd import osfilelist = os.listdir(”/home/aistudio/work/Pears/JPEGImages“)train_name = []for file_name in filelist: name, point ,end =file_name.partition('.') train_name.append(name)df = pd.DataFrame(train_name) df.head(8)df.to_csv('/home/aistudio/work/Pears/train_all.txt', sep='t', index=None,header=None)登录后复制 ? ?In [?]
%cd /home/aistudio/work/PaddleDetection/!mkdir -p dataset/PearsDetection/ImageSets/Main!mv dataset/Pears/train_all.txt dataset/PearsDetection/ImageSets!cp dataset/PearsDetection/label_list.txt dataset/PearsDetection/ImageSets/登录后复制 ? ? ? ?
/home/aistudio/work/PaddleDetection登录后复制 ? ? ? ?
5. 数据集加载和预处理
In [2]from paddlex.det import transformsimport paddlex as pdx# 定义训练和验证时的transforms# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.htmltrain_transforms = transforms.Compose([ transforms.MixupImage(mixup_epoch=250), transforms.RandomExpand(), transforms.Resize( target_size=608, interp='RANDOM'), transforms.RandomHorizontalFlip(), transforms.Normalize()])eval_transforms = transforms.Compose([ transforms.Resize( target_size=608, interp='CUBIC'), transforms.Normalize()])test_transforms = transforms.Compose([ transforms.Resize( target_size=608, interp='CUBIC'), transforms.Normalize()])train_dataset = pdx.datasets.VOCDetection( data_dir= './Pears', file_list='./Pears/train_list.txt', label_list='./Pears/labels.txt', transforms=train_transforms, num_workers=1, shuffle=True)eval_dataset = pdx.datasets.VOCDetection( data_dir='./Pears', file_list='./Pears/val_list.txt', label_list='./Pears/labels.txt', num_workers=1, transforms=eval_transforms)test_dataset = pdx.datasets.VOCDetection( data_dir='./Pears', file_list='./Pears/test_list.txt', label_list='./Pears/labels.txt', num_workers=1, transforms=eval_transforms)登录后复制 ? ? ? ?
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/__init__.py:107: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import MutableMapping/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/rcsetup.py:20: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import Iterable, Mapping/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/colors.py:53: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import Sized登录后复制 ? ? ? ?
2021-08-11 11:51:55 [INFO]Starting to read file list from dataset...2021-08-11 11:51:56 [INFO]864 samples in file ./Pears/train_list.txtcreating index...index created!2021-08-11 11:51:56 [INFO]Starting to read file list from dataset...2021-08-11 11:51:56 [INFO]162 samples in file ./Pears/val_list.txtcreating index...index created!2021-08-11 11:51:56 [INFO]Starting to read file list from dataset...2021-08-11 11:51:57 [INFO]54 samples in file ./Pears/test_list.txtcreating index...index created!登录后复制 ? ? ? ?
三、模型选择和开发
1. 模型选择
在本项目中直接调用pdx模型库中目标检测模型,修改好对应的类别信息即可轻松载入模型,在本项目中使用的是PPYOLO模型,采用默认的ResNet50_vd_ssld作为骨干网络
In [3]# 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.htmlnum_classes = len(train_dataset.labels)# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3model = pdx.det.PPYOLO(num_classes=num_classes)登录后复制 ? ?
2.训练模型
In [4]# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#id1# 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.htmlmodel.train( num_epochs=270, train_dataset=train_dataset, train_batch_size=30, eval_dataset=eval_dataset, learning_rate=0.000125, lr_decay_epochs=[210, 240], save_dir='output/ppyolo', pretrain_weights=”/home/aistudio/output/ppyolo/best_model“, use_vdl=True)登录后复制 ? ?
3.模型评估测试
In [5]model.evaluate(eval_dataset = test_dataset)登录后复制 ? ? ? ?
2021-08-12 05:28:01 [INFO]Start to evaluating(total_samples=54, total_steps=54)...登录后复制 ? ? ? ?
100%|██████████| 54/54 [00:12<00:00, 4.40it/s]登录后复制 ? ? ? ?
OrderedDict([('bbox_map', 68.43517045311577)])登录后复制 ? ? ? ? ? ? ? ?
4. 模型预测
In [6]model = pdx.load_model(”/home/aistudio/output/ppyolo/best_model“)res = model.predict(img_file=”/home/aistudio/work/Pears/JPEGImages/250.jpg“)登录后复制 ? ? ? ?
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/io.py:2358: UserWarning: This list is not set, Because of Paramerter not found in program. There are: create_parameter_0.w_0 create_parameter_1.w_0 create_parameter_2.w_0 create_parameter_3.w_0 create_parameter_4.w_0 create_parameter_5.w_0 create_parameter_6.w_0 create_parameter_7.w_0 create_parameter_8.w_0 create_parameter_9.w_0 create_parameter_10.w_0 create_parameter_11.w_0 create_parameter_12.w_0 create_parameter_13.w_0 create_parameter_14.w_0 create_parameter_15.w_0 create_parameter_16.w_0 create_parameter_17.w_0 create_parameter_18.w_0 create_parameter_19.w_0 create_parameter_20.w_0 create_parameter_21.w_0 create_parameter_22.w_0 create_parameter_23.w_0 create_parameter_24.w_0 create_parameter_25.w_0 create_parameter_26.w_0 create_parameter_27.w_0 create_parameter_28.w_0 create_parameter_29.w_0 create_parameter_30.w_0 create_parameter_31.w_0 create_parameter_32.w_0 create_parameter_33.w_0 create_parameter_34.w_0 create_parameter_35.w_0 create_parameter_36.w_0 create_parameter_37.w_0 create_parameter_38.w_0 create_parameter_39.w_0 create_parameter_40.w_0 create_parameter_41.w_0 create_parameter_42.w_0 create_parameter_43.w_0 create_parameter_44.w_0 create_parameter_45.w_0 create_parameter_46.w_0 create_parameter_47.w_0 format(” “.join(unused_para_list)))登录后复制 ? ? ? ?
2021-08-12 05:28:17 [INFO]Model[PPYOLO] loaded.登录后复制 ? ? ? ?
<br/>登录后复制 ? ? ? ?
5. 预测结果
由于昆虫名字过长这里用ID表示,具体是什么昆虫可以查看Pears数据集中的labels.txt和昆虫编号.xlsx
In [8]import matplotlib.pyplot as pltimport cv2%matplotlib inlineplt.figure()img = cv2.imread(”/home/aistudio/work/Pears/JPEGImages/250.jpg“,-1)img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)for data in res: if data[”score“]>=0.5: box = data[”bbox“] text = f”{data['category_id']}_%.2f“%(data[”score“]) img = cv2.rectangle(img,(int(box[0]),int(box[1])),(int(box[0]+box[2]),int(box[1]+box[3])),(0,255,0), 2) img = cv2.putText(img, text, (int(box[0]),int(box[1])), cv2.FONT_HERSHEY_PLAIN, 2, (255, 0, 0), 2)plt.imshow(img)plt.show()img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)cv2.imwrite(”test3.jpg“,img)登录后复制 ? ? ? ?
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:2349: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working if isinstance(obj, collections.Iterator):/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:2366: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working return list(data) if isinstance(data, collections.MappingView) else data登录后复制 ? ? ? ?
<Figure size 432x288 with 1 Axes>登录后复制 ? ? ? ? ? ? ? ?
True登录后复制 ? ? ? ? ? ? ? ?
四、成果展示
在本项目中,只需要在当前的AIStudio中按顺序运行即可成功运行,目前项目完成了检测模型的开发。最终成果需要部署在无人机上进行病虫检测,然而由于缺乏硬件,因此暂时只能完成检测算法。检测结果如下图所示
福利游戏
相关文章
更多-
- 利用情感分析选择年夜饭
- 时间:2025-07-25
-
- 金融图表OCR检测与文本识别
- 时间:2025-07-25
-
- 基于计算机视觉的全细胞计数自动化分析方法
- 时间:2025-07-25
-
- 通义千问快速撰写B站视频口播稿的方法与技巧解析
- 时间:2025-07-25
-
- AI剪辑如何影响内容生态?短视频平台正在发生变化
- 时间:2025-07-25
-
- 【第六届论文复现赛42题】 GPEN盲人脸修复模型 paddle复现
- 时间:2025-07-25
-
- 【智情洞察】PaddlePaddle 3.0驱动的售后评价分析与优化系统
- 时间:2025-07-25
-
- 美团外卖红包天天领取入口 2025最新美团优惠券入口已开放
- 时间:2025-07-25
大家都在玩
大家都在看
更多-
- 黄仁勋:英伟达离职率只有0.9% 随身携带秘密期权池奖励员工
- 时间:2025-07-25
-
- 恶意侮辱攻击企业家、号召抵制新能源品牌!“雷米侃电车”等多位汽车博主被禁言
- 时间:2025-07-25
-
- ARKW转投加拿大比特币ETF
- 时间:2025-07-25
-
- 首款可折叠iPhone屏幕尺寸曝光:7.8英寸内屏+5.5英寸外屏
- 时间:2025-07-25
-
- 中国以太坊持有者最多的人是谁
- 时间:2025-07-25
-
- 玩明末:渊虚之羽时RTX 5090接口烧毁!资深编辑记录下完整过程
- 时间:2025-07-25
-
- 七彩虹限定熊猫游戏本首发8099元:熊猫主题设计 搭载星知岛AI
- 时间:2025-07-25
-
- 远光84变变龙怎么玩
- 时间:2025-07-25