前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于PaddlePaddle实现的目标检测模型PP-YOLOE

基于PaddlePaddle实现的目标检测模型PP-YOLOE

作者头像
夜雨飘零
发布2022-11-30 16:24:21
7460
发布2022-11-30 16:24:21
举报
文章被收录于专栏:CSDN博客

前言

本项目是基于PaddleDetection实现的PP-YOLOE,PP-YOLOE是单阶段Anchor-free模型,其精度(COCO数据集mAP)和推理速度均优于YOLOv5模型,PP-YOLOE在COCO test-dev2017数据集上精度达到49.0%,在单卡V100上FP32推理速度为123.4FPS, V100上开启TensorRT下FP16推理速度为208.3FPS。其中还包含了X/L/M/S四种模型类型,适合部署在多种多样的硬件上,在手机上部署,推理速度也是极快的。

源码地址:https://github.com/yeyupiaoling/PP-YOLOE

模型表

这个表是官方的测试表格。

模型类型

Epoch

输入尺寸

Box APval0.5:0.95

Box APtest0.5:0.95

Params(M)

FLOPs(G)

V100 FP32(FPS)

V100 TensorRT FP16(FPS)

S

80

640

43.7

43.9

7.93

17.36

208.3

333.3

M

80

640

49.8

50.0

23.43

49.91

123.4

208.3

L

80

640

52.9

53.3

52.20

110.07

78.1

149.2

X

80

640

54.7

54.9

98.42

206.59

45.0

95.2

安装环境

  1. 安装PaddlePaddle GPU版本
代码语言:javascript
复制
conda install paddlepaddle-gpu==2.3.1 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
  1. 其他依赖库
代码语言:javascript
复制
python -m pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

快速使用

通过以下方式可以快速使用本项目导出COCO训练的预测模型,使用该预测模型快速推理图片。

  1. 首先导出COCO的预测模型,执行export_model.py时,当--resume_model参数为None时,会自动加载官方的COCO预训练模型,使用这个预训练模型导出预测模型。
代码语言:javascript
复制
python export_model.py --resume_model=None
  1. 然后执行infer.py指定图像路径执行推理。
代码语言:javascript
复制
python infer.py --image_path=dataset/test.jpg

识别结果:

训练模型

准备数据

准备训练数据train.json和评估数据eval.json,本项目只支持使用COCO格式的数据集,如果你使用的是VOC格式数据集,可以使用项目自带的工具进行转换,使用方式如下。如果你的数据本身就是COCO格式的,可以直接忽略这个步骤

  1. 首先生成VOC数据列表和标签列表,执行下面命令就可以生成训练数据列表train.txt和评估数据列表eval.txt,以及列表文件label_list.txt,它们都存放在dataset目录下。
代码语言:javascript
复制
python create_voc_list.py
  1. 然后执行voc2coco.py即可生成COCO格式的数据集,训练数据和评估数据分别对应train.jsoneval.json,同样是存放在dataset目录下。
代码语言:javascript
复制
python voc2coco.py

训练模型

准备好数据之后就可以开始训练了,训练程序要注意以下几个重要参数,首先是模型类型model_type,一共有X/L/M/S四种模型类型,其次是分类大小num_classes,这两个参数需要根据自己的实际情况来设置,更多参数可以查看该程序文件或者执行python train.py -h查看。本项目支持多卡训练,具体看下面命令。

代码语言:javascript
复制
# 单卡训练
python train.py --model_type=M --num_classes=80
# 单机多卡训练
python -m paddle.distributed.launch --gpus '0,1' train.py --model_type=M --num_classes=80

评估模型

训练结束之后,如果需要查看模型的准确率,可以执行评估程序eval.py,需要指定模型类型,分类大小以及模型的文件夹路径。

代码语言:javascript
复制
python eval.py --model_type=M --num_classes=80 --resume_model=output/PPYOLOE_M/best_model

导出预测模型

训练完成之后,可以导出预测模型用于之后的部署,使用及其下面命令,即可完成导出进预测模型。需要指定模型类型,分类大小以及模型的文件夹路径。image_shape是指定输入图片的大小,如果对性能要求比较高的话,可以尝试设置更小的图片大小,例如3,416,416,或者3,320,320,默认是3,640,640

代码语言:javascript
复制
python export_model.py --model_type=M --num_classes=80 --resume_model=output/PPYOLOE_M/best_model

预测

本项目提供三种预测方式,第一种是使用PaddlePaddle自身的Inference预测接口进行预测,第二种是使用ONNX预测接口执行预测,第三种是部署在Android设备上进行预测。

Inference

使用PaddlePaddle自身的Inference预测接口进行预测,这里提供了两种方式,第一种是使用图片的路径进行预测并显示结果,第二种是使用摄像头或者视频文件进行预测。

代码语言:javascript
复制
# 使用图片路径进行预测并显示
python infer.py --image_path=dataset/test.jpg --model_dir=output_inference/PPYOLOE_M
# 使用摄像头进行实时预测
python infer_camera.py --device_id=0 --model_dir=output_inference/PPYOLOE_M

识别结果:

ONNX

使用ONNX预测接口执行预测,使用这种方式的话需要额外安装onnxruntime库,并且需要找出对应的模型进行下面命令可以导出ONNX模型,需要根据实际情况修改模型的路径model_dir

代码语言:javascript
复制
python to_onnx_model.py

导出ONNX模型之后就可以使用onnxruntime来进行推理,命令如下,分别指定预测图片路径和ONNX模型路径。执行推理并显示结果

代码语言:javascript
复制
python infer_onnx.py --image_path=dataset/test.jpg --onnx_model=output_inference/model.onnx

识别结果:

Android

如果要部署在Android上面使用的话,需要导出Paddle Lite模型,通过上面命令可以导出Paddle Lite模型。需要根据自己的实际情况修改模型的路径,以及是否需要进行量化量化,量化可以减少1/2的模型大小,但预测速度上不会有太大变化,一般不会降低模型的准确率。

代码语言:javascript
复制
python to_lite_model.py

**使用Android应用:**Android源码存放在本项目的根目录中的Android,可以直接用Android Studio打开使用,该演示应用有两个功能,第一是打开相机识别,第二是打开相册识别。如果要替换自己训练的模型,只需要操作这两个文件即可:

  1. Android/ai/src/main/assets/detect_model.nb模型文件替换成你导出的detect_model.nb
  2. Android/ai/src/main/assets/label_list.txt标签列表文件替换成你的列表文件,这列表文件在dataset/label_list.txt

打开相册识别的演示界面:

参考

  1. https://github.com/PaddlePaddle/PaddleDetection
  2. https://github.com/PaddlePaddle/Paddle-Lite
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 模型表
  • 安装环境
  • 快速使用
  • 训练模型
    • 准备数据
      • 训练模型
        • 评估模型
          • 导出预测模型
          • 预测
            • Inference
              • ONNX
                • Android
                • 参考
                相关产品与服务
                GPU 云服务器
                GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档