0

0

使用PaddleX实现的智慧农业病虫检测项目

P粉084495128

P粉084495128

发布时间:2025-07-24 10:02:16

|

213人浏览过

|

来源于php中文网

原创

本项目借助PaddleX组件,基于自制的1080张30类病虫图片数据集(分训练、验证、测试集),采用PPYOLO算法实现智慧农业病虫检测。通过数据预处理、模型训练与评估,模型测试集mAP达68.44%。虽因硬件限制未部署于无人机,但已完成检测算法开发,可检测病虫并反馈,助力早发现早解决虫灾。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

使用paddlex实现的智慧农业病虫检测项目 - php中文网

使用PaddleX实现的智慧农业病虫检测项目

在本项目中,使用PaddlX组件,在自制的病虫数据集上,采用ppyolo算法实现了农业的病虫检测。预期成功是将其部署在无人机上,使用无人机巡视农业区并自动化地统计病虫种类数量及时与相关工作人员进行汇报。

一、项目背景

随着计算机视觉领域的技术不断成熟,越来越多的相关技术落地到实际应用场景中。在智慧农业方面,害虫对作物的侵蚀程度不亚于人类经历的各种灾难,但是与天灾不同,作物受到害虫的侵害是可以经过人工处理后避免的,传统的人工农业管理通常是通过农民手工进行检查和除虫 这种传统的生产已经不能满足现在社会生活的需要。为此,本项目引入了计算机视觉领域的目标检测算法,旨在尽可能多的检测出作物上的病虫,同时将其结果反馈给相关工作人员,使得虫灾及早被发现,及早被解决,将病虫扼杀在萌芽之中。

二、数据集介绍

本项目采用的是AIStudio公开数据集中提供的常见病虫识别样本数据集,经过对数据的清洗和格式的重新编写,符合了VOC数据集的格式。

改数据集一共1080张病虫图片,其中训练集864张,验证集162张,测试集54张,共30种不同的病虫类别(区分成虫与幼虫)。

部分数据集数据如下图所示:

 

DeepSider
DeepSider

浏览器AI侧边栏对话插件,集成多个AI大模型

下载

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: 866
Eval samples: 162
Test samples: 54
Split files saved in /home/aistudio/work/Pears
       
In [ ]
#制作COCO数据集#提取文件下img目录所有照片名不要后缀import pandas as pd 
import os


filelist = 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.txt
creating 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.txt
creating 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.txt
creating 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 inline

plt.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中按顺序运行即可成功运行,目前项目完成了检测模型的开发。最终成果需要部署在无人机上进行病虫检测,然而由于缺乏硬件,因此暂时只能完成检测算法。检测结果如下图所示

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

76

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

117

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

350

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

63

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

109

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

108

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

243

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

684

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

179

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号