本项目借助PaddleX组件,基于自制的1080张30类病虫图片数据集(分训练、验证、测试集),采用PPYOLO算法实现智慧农业病虫检测。通过数据预处理、模型训练与评估,模型测试集mAP达68.44%。虽因硬件限制未部署于无人机,但已完成检测算法开发,可检测病虫并反馈,助力早发现早解决虫灾。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
在本项目中,使用PaddlX组件,在自制的病虫数据集上,采用ppyolo算法实现了农业的病虫检测。预期成功是将其部署在无人机上,使用无人机巡视农业区并自动化地统计病虫种类数量及时与相关工作人员进行汇报。
随着计算机视觉领域的技术不断成熟,越来越多的相关技术落地到实际应用场景中。在智慧农业方面,害虫对作物的侵蚀程度不亚于人类经历的各种灾难,但是与天灾不同,作物受到害虫的侵害是可以经过人工处理后避免的,传统的人工农业管理通常是通过农民手工进行检查和除虫 这种传统的生产已经不能满足现在社会生活的需要。为此,本项目引入了计算机视觉领域的目标检测算法,旨在尽可能多的检测出作物上的病虫,同时将其结果反馈给相关工作人员,使得虫灾及早被发现,及早被解决,将病虫扼杀在萌芽之中。
本项目采用的是AIStudio公开数据集中提供的常见病虫识别样本数据集,经过对数据的清洗和格式的重新编写,符合了VOC数据集的格式。
改数据集一共1080张病虫图片,其中训练集864张,验证集162张,测试集54张,共30种不同的病虫类别(区分成虫与幼虫)。
部分数据集数据如下图所示:
%cd /home/aistudio/work/ !tar -xf /home/aistudio/work/Pears.tar
/home/aistudio/workIn [1]
%cd /home/aistudio/work/ !pip install paddlex
# 检查数据集是否可用%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]
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
这一步可以跳过,在开发阶段已经执行过了
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/PearsIn [ ]
#制作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
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
2025-08-11 11:51:55 [INFO] Starting to read file list from dataset... 2025-08-11 11:51:56 [INFO] 864 samples in file ./Pears/train_list.txt creating index... index created! 2025-08-11 11:51:56 [INFO] Starting to read file list from dataset... 2025-08-11 11:51:56 [INFO] 162 samples in file ./Pears/val_list.txt creating index... index created! 2025-08-11 11:51:56 [INFO] Starting to read file list from dataset... 2025-08-11 11:51:57 [INFO] 54 samples in file ./Pears/test_list.txt creating index... index created!
在本项目中直接调用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)
# 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)
model.evaluate(eval_dataset = test_dataset)
2025-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)])
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)))
2025-08-12 05:28:17 [INFO] Model[PPYOLO] loaded.
由于昆虫名字过长这里用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
True
在本项目中,只需要在当前的AIStudio中按顺序运行即可成功运行,目前项目完成了检测模型的开发。最终成果需要部署在无人机上进行病虫检测,然而由于缺乏硬件,因此暂时只能完成检测算法。检测结果如下图所示
相关文章:
AI赋能,智能时代软件创新,鞠躬ai
智能AI豆包,写作难题轻松解,创作效率翻倍提升!,ai唱歌模拟明星
美国网站后缀的独特魅力:为何选择“.com”以外的后缀?
打造个人AI大模型,开启智能生活新时代,AI软件下载电子书
文心一言,打造个性化写作风格的秘密武器,ai绘画萝莉写实
AI模型百团大战,揭秘智能盛宴制胜攻略,中国ai系统
AI赋能编程新篇章,未来编程助手解析代码,ai少女视频1001ai少女视频
AI绘画中的脸谱,技术与文化的交汇桥梁,何洁 ai
未来写作新模式文章撰写AI如何助力内容创作
华为AI模型导入攻略,解锁智能升级新路径,ai多美丽是什么歌
AI浪潮涌动,顶尖AI模型盘点与发展趋势解析,拉萨ai外呼系统业务
文心一言,历史传承与创新发展之旅,ai特效关闭
国内开源AI大数据模型引领产业升级与技术革新,3d建筑建模ai
AI建模引领智能时代革新之旅,ai_0888
豆包AI小程序携手薛之谦,演绎科技音乐跨界新篇章,开通ai头像
人工智能产业新门槛与机遇,AI六大模型牌照深度解析,迪士尼在逃公主ai写作文软件
豆包智能AI操作攻略,解锁智能生活新境界,ai翻译器创意广告
AI聊天新,下载新型聊天模型,体验智能交互,AI新兴
AI创作利器集结,五大工具助力效率与创意飞跃,ai欧美形象
中科院AI大模型震撼发布,引领智能时代新,ai推品
AI文章精简-高效提炼与优化你的内容创作,ai quid
文字生成AI:开启创意写作的新纪元
在线AI文章生成:内容创作新革命
AI融合模型引领教学设计革新,ai领域幽默视频讲解
三星发布AI大模型新,引领智能体验新高峰,ai简历模板
文心一言会员群体揭秘,庞大背后的发展脉络,ai音节教案
360快速排名优,助力网站流量突破新高
豆包AI违规操作揭秘,违规次数与封号之谜,爱ai小视频完整版免费
SEM与SEO的深度解析:如何在数字营销时代脱颖而出
人工智能助力动车建模,动车模型打造揭秘,ai586586
超链接用哪个好?一文搞懂选择超链接的技巧与工具
荣耀AI大模型首次曝光,引领下一代智能交互,小助手ai
珠宝行业AI模型精选手册,打造个性化智能工具选择策略,图标制作过程ai
AI写作新秀,文心一言实力解析与对比评测,ai文档写作是真的吗
开源AI大模型热潮,盘点最受欢迎的项目之旅,ai上高速
AI助力背景添加,模型美化实用技巧一网打尽,南宁AI展览
打造高效AI车位检测统,从理论到实操手册,AI偏小
360AI写作怎样?助力创作的新风尚,ai到访
文心一言,赋予文字新生,激发创意无限的文章改写利器,ai 2025图标
人工智能领域全球十大顶尖模型揭晓,科技巨头引领发展新篇章,ai上标怎么
AI模型版下载指南,开启智能生活新篇章,婴儿喜庆ai
AI大模型开启行业合作新时代,共绘未来蓝图,朋友圈ai写作助手文案
文心一言引领长文本创作,开拓AI艺术新篇章,mac ai破解方法
2024年好用可用值得推荐的搜索引擎
华为HarmonyOS Engine,揭开华为AI模型,引领智慧生活新篇章,ai条形码制作
豆包AI,趣味驱动的人工智能新体验,ai字体转化路径
撰写文章AI:释放写作潜能,创造无尽可能
AI大数据模型重塑量化交易未来,揭秘其魅力与,海信AI换台
豆包AI官网API接口,引领企业智能服务转型新,ai1371928
颠覆创意的力量:AI官网生成器,轻松打造专业网站!