使用PaddleX实现的智慧农业病虫检测项目
本项目借助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.webp 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登录后复制
2024-08-11 11:51:55 [INFO]Starting to read file list from dataset...2024-08-11 11:51:56 [INFO]864 samples in file ./Pears/train_list.txtcreating index...index created!2024-08-11 11:51:56 [INFO]Starting to read file list from dataset...2024-08-11 11:51:56 [INFO]162 samples in file ./Pears/val_list.txtcreating index...index created!2024-08-11 11:51:56 [INFO]Starting to read file list from dataset...2024-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)登录后复制
2024-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.webp")登录后复制 /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)))登录后复制 2024-08-12 05:28:17 [INFO]Model[PPYOLO] loaded.登录后复制
登录后复制
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.webp",-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.webp",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登录后复制
登录后复制
True登录后复制
四、成果展示
在本项目中,只需要在当前的AIStudio中按顺序运行即可成功运行,目前项目完成了检测模型的开发。最终成果需要部署在无人机上进行病虫检测,然而由于缺乏硬件,因此暂时只能完成检测算法。检测结果如下图所示
相关攻略
常见报错解析:“Access Not Configured”故障排除指南 许多开发者和团队成员在使用OpenClaw集成飞书时,都曾遭遇过一个典型的中断提示:“access not configured”(访问未配置)。该提示会明确显示您的飞书账户ID及一组唯一的配对验证码,并指出需要联系机器人所有
OpenClaw 常用指令大全与使用详解 openclaw status:此命令是查看OpenClaw系统整体健康状态的核心指令,执行后即获取服务运行状况的全面报告,是日常运维的首要诊断工具。 openclaw gateway restart:在修改网关配置后,必须运行此指令以重启网关服务,使配置文
如何通过 OpenClaw 实现 Chrome 浏览器自动化操控 在软件开发与自动化测试领域,持续学习是常态。本文旨在详细介绍如何利用 OpenClaw 连接并控制一个已开启的 Chrome 浏览器实例,实现点击、文本输入、文件上传、页面滚动、屏幕截图以及执行 JavaScript 等自动化操作。整
项目概述 你是否希望将强大的 AI 助手带入日常聊天?本教程将指导你完成搭建流程,让你能在 QQ 上直接调用 OpenClaw 智能助手,实现无门槛的 AI 对话体验。 架构说明 ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ QQ 用户 │ ─
一 下载并安装Node js,全程保持默认设置 首先,请前往Node js官方网站的下载中心:https: nodejs org zh-cn download。根据您的操作系统(Windows Mac Linux)下载对应的安装程序。运行安装向导时,整个过程非常简单,您只需连续点击“下一步”按钮
热门专题
热门推荐
OPPO A6k手机重磅发布:天玑6300处理器、高清LCD直屏、7000mAh超大电池,售价仅1999元起 OPPO旗下广受欢迎的A系列再添实力新机。近日,备受期待的OPPO A6k正式上市发售。这款新品搭载了备受好评的天玑6300八核处理器,并配备了一块容量高达7000mAh的耐用长寿电池,成为
速览 在《红色沙漠》的广阔世界中,数量丰富的支线任务与主线剧情共同构筑了沉浸式的冒险体验。其中,“熔化锁链的火焰”任务作为瑟金斯家族剧情线的关键环节,其触发机制与主线进程紧密相连。任务并非随时可用,玩家需将主线故事推进到特定阶段后,任务才会自动添加至任务日志。本篇攻略将为你详解此支线任务的接取条件与
《异种航员2》运动机制深度解析 在《异种航员2》(Xenonauts 2)的策略战斗中,对“时间单位”(TU)的高效运用是取胜的核心。每个士兵的移动、射击乃至战术配合,都依赖于玩家对TU的精确规划。操作上手简单:选中单位后,直接使用鼠标左键点击目的地方格,系统便会清晰显示移动所需消耗的时间单位,帮助
速览 在《异种航员2》(Xenonauts 2)的战局中,掌握“战术规避”与精通“火力输出”同等关键。游戏全新设计的掩体系统,是提升你作战小队生存几率的战略性核心。简言之,战场上绝大多数可见的物体都能转化为你的战术屏障。无论是散落的木箱、残缺的矮墙,还是茂密的灌木丛与坚实的建筑物,巧妙地利用它们,就
速览 在开放世界大作《红色沙漠》中,庞大的支线任务系统为玩家提供了丰富的探索体验。其中,“超凡建造物”任务是阿方索家族势力任务线中的重要一环。要成功接取此任务,玩家必须首先完成其前置任务【枪械名门】。在此之后,任务的下一步关键操作是前往游戏中标注的特定建筑地点进行互动调查——这本质上是一个用于快速移





