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

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

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

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

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

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

一、项目背景

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

二、数据集介绍

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

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

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

 

腾讯智影-AI数字人
腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

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

以上就是使用PaddleX实现的智慧农业病虫检测项目的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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