paddlepaddle目标检测

文章介绍了基于PaddlePaddle的PP-YOLOE目标检测模型的实现过程,包括环境配置、数据集准备、模型训练、模型导出和预测。作者提供了详细的操作步骤,如安装CUDA和CUDNN,修改配置文件,以及处理数据集和运行脚本进行训练和预测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1  参考链接

2  环境

3  数据集准备

4  训练 train.py

5  导出预测模型 

6  预测

7  paddle2onnx

7.1  导出

7.2  预测

7.3  部署到其他设备上

8  遇到的问题

8.1  paddlepadde2.4.1的bug

8.2  不同格式不能相加

8.3  paddlepaddle3.0不支持导出预测模型这一步

8.4  paddle2onnx导入有问题


源码来自作者 夜雨飘零1,我对参考链接的代码略有修改,网盘地址

链接:百度网盘 请输入提取码 提取码:ipl5 

1  参考链接

博客地址 基于PaddlePaddle实现的目标检测模型PP-YOLOE_夜雨飘零1的博客-CSDN博客_paddlepaddle目标检测

项目地址 GitHub - yeyupiaoling/PP-YOLOE: PaddlePaddle实现的目标检测模型PP-YOLOE

2  环境

  • 系统 Linux
  • 显卡 NVIDIA GeForce RTX 3060
  • CUDA 11.1
  • CUDNN 8.2.1

python版本3.9,环境如下

安装的时候首先使用的是项目中的requirement.txt

  • pip install -r requirement.txt

安装的过程中有几个东西没装上,比如paddle,之后用的官方提供的安装paddle的命令,虽然我当前的cuda版本是11.1,但使用下面的命令确实可以安装,并且可以使用

如果没有cudnn安装的时候不会出问题,但使用的时候会出现cudnn的问题,官方的命令上有提示,告诉你选8.2.1这个版本

我们找到cudnn8.2.1 cuDNN Archive | NVIDIA Developer 下载这个tar.gz

解压后放到cuda目录中就可以了

  • sudo cp cuda/include/cudnn.h /usr/local/cuda/include
  • sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
  • sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

训练时默认使用GPU资源进行训练

项目放在home下,项目命名为paddlepaddle_object_detection

3  数据集准备

数据集为877张图像,4分类,其中speedlimit 705个框,crosswalk 174个框,traffclight 154个框,stop 88个框

将标注文件xml放在dataset中,图像文件jpg放在images中

运行create_voc_list.py

运行后会在dataset中得到这三个文件

运行voc2coco.py

在dataset中会得到这两个文件

4  训练 train.py

将这里改为数据集的分类数量

然后直接运行就好了,一些warning可以无视掉

再第一次训练的时候会进行 预训练模型 的下载,预训练模型会下载到这个文件夹中

训练结束后会生成文件夹models

models中还有一个文件夹PPYOLOE_M,其中有一个best_model

5  导出预测模型 

修改 export_model.py的类别数量,然后运行

在models/PPYOLOE_M中会得到一个文件夹infer,infer中有导出的模型

6  预测

更改infer.py中需要预测的图片

运行后可以得到预测结果

7  paddle2onnx

7.1  导出

调整了几个版本,最终换为了paddle2onnx-1.3.1

找到项目中的to_onnx_model.py,调整一下代码然后运行。这里model_filename和params_filename是用的导出预测模型的模型和参数

然后就能得到文件model.onnx

7.2  预测

安装对应的onnxruntime

我这里安装onnxruntime=1.17.0

然后打开项目中的infer_onnx.py,在这里找个字体文件

然后调整这里要预测的图像

然后就能预测出来了

7.3  部署到其他设备上

需要这些文件

需要这些库。不需要paddlepaddle,只需要onnxruntime,我安装的是onnxruntime==1.17.0

运行的时候告诉你要小于numpy2,我安装的是1.26.4

剩下就什么报错装什么就行了。一直到不报错之后运行的结果

8  遇到的问题

8.1  paddlepadde2.4.1的bug

将数组转换成tensor的时候结果不对,比如

import paddle

print(paddle.to_tensor([0, 1, 2, 3, 4]))

转换出来的结果是

Tensor(shape=[5], dtype=int64, place=Place(cpu), stop_gradient=True, [4294967296 , 12884901890 , 4541079145142075583, 4535960811137795605, 4498257372009003569])

如果使用GPU转换出来的结果也不对

Tensor(shape=[5], dtype=int64, place=Place(gpu:0), stop_gradient=True, [0,0,0,0,0])

  • 正常的结果应该是 Tensor(shape=[5], dtype=int64, place=Place(gpu:0), stop_gradient=True, [0,1,2,3,4])

后面把paddlepaddle的版本改成paddlepaddle2.6.2,python版本改为3.10

后面又看了一下,paddlepaddle2.4.1本身是没有问题的,但是虽然他写的支持高版本的python,但可能会有bug,所以建议是使用paddlepaddle支持的最低python版本,应该就没有问题了

8.2  不同格式不能相加

把相加的前后项打印出来,一个是int64一个是int32

这里我通过paddle.cast()将int64转为了int32

然后就没问题了

8.3  paddlepaddle3.0不支持导出预测模型这一步

原因是 model/layers.py 中 的 return multiclass(bboxes,score,**kwargs) 中的bboxes需要变量类型(paddle2.6运行后)是下面这样的

但在paddle3.0中的变量会变成下面这样的,他们类型不匹配,所以用不了

但也仅仅是导出预测模型这一步做不了,训练、预测都是可以做的,可以用paddle2.6导入后,然后再用paddle3.0预测也是可以的

8.4  paddle2onnx导入有问题

找到于paddle合适版本的paddle2onnx就行了,比如说paddle2onnx匹配的是paddlepaddle2.6.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值