{"id":15637187,"url":"https://github.com/yeyupiaoling/pp-yoloe","last_synced_at":"2025-08-21T02:31:21.278Z","repository":{"id":53172786,"uuid":"287931643","full_name":"yeyupiaoling/PP-YOLOE","owner":"yeyupiaoling","description":"PaddlePaddle实现的目标检测模型PP-YOLOE","archived":false,"fork":false,"pushed_at":"2022-11-08T08:14:52.000Z","size":47253,"stargazers_count":112,"open_issues_count":2,"forks_count":32,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-10T07:11:20.876Z","etag":null,"topics":["android","object-detection","onnx","paddlepaddle","pp-yolo","yolov3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yeyupiaoling.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-16T11:37:07.000Z","updated_at":"2024-12-08T00:15:56.000Z","dependencies_parsed_at":"2022-08-13T02:20:30.882Z","dependency_job_id":null,"html_url":"https://github.com/yeyupiaoling/PP-YOLOE","commit_stats":null,"previous_names":["yeyupiaoling/pp-yolo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeyupiaoling%2FPP-YOLOE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeyupiaoling%2FPP-YOLOE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeyupiaoling%2FPP-YOLOE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeyupiaoling%2FPP-YOLOE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yeyupiaoling","download_url":"https://codeload.github.com/yeyupiaoling/PP-YOLOE/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230479864,"owners_count":18232630,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","object-detection","onnx","paddlepaddle","pp-yolo","yolov3"],"created_at":"2024-10-03T11:10:40.759Z","updated_at":"2024-12-19T18:15:11.481Z","avatar_url":"https://github.com/yeyupiaoling.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PP-YOLOE\n\n本项目是基于[PaddleDetection](https://github.com/PaddlePaddle/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四种模型类型，适合部署在多种多样的硬件上，在手机上部署，推理速度也是极快的。\n\n# 模型表\n这个表是官方的测试表格。\n\n| 模型类型 | Epoch | 输入尺寸 | Box AP\u003csup\u003eval\u003cbr\u003e0.5:0.95 | Box AP\u003csup\u003etest\u003cbr\u003e0.5:0.95 | Params(M) | FLOPs(G) | V100 FP32(FPS) | V100 TensorRT FP16(FPS) |\n|:----:|:-----:|:----:|:--------------------------:|:---------------------------:|:---------:|:--------:|:--------------:|:-----------------------:|\n|  S   |  80   | 640  |            43.7            |            43.9             |   7.93    |  17.36   |     208.3      |          333.3          |\n|  M   |  80   | 640  |            49.8            |            50.0             |   23.43   |  49.91   |     123.4      |          208.3          |\n|  L   |  80   | 640  |           52.9\t            |            53.3             |   52.20   |  110.07  |      78.1      |          149.2          | \n|  X   |  80   | 640  |           54.7\t            |            54.9             |   98.42   |  206.59  |      45.0      |          95.2           | \n\n\n## 安装环境\n\n - 首先安装的是PaddlePaddle的GPU版本，如果已经安装过了，请跳过。\n```shell\nconda install paddlepaddle-gpu==2.3.2 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/\n```\n\n - 安装ppvector库。\n \n使用pip安装，命令如下：\n```shell\npython -m pip install ppyoloe -U -i https://pypi.tuna.tsinghua.edu.cn/simple\n```\n\n**建议源码安装**，源码安装能保证使用最新代码。\n```shell\ngit clone https://github.com/yeyupiaoling/PP-YOLOE.git\ncd PP-YOLOE/\npython setup.py install\n```\n\n# 快速使用\n\n通过以下方式可以快速使用本项目导出COCO训练的预测模型，使用该预测模型快速推理图片。\n\n1. 首先导出COCO的预测模型，执行`export_model.py`时，当`--resume_model`参数为None时，会自动加载官方的COCO预训练模型，使用这个预训练模型导出预测模型。\n```shell\npython export_model.py --resume_model=None\n```\n\n2. 然后执行`infer.py`指定图像路径执行推理。\n```shell\npython infer.py --image_path=dataset/test.jpg\n```\n\n识别结果：\n\n![识别结果](./dataset/result.jpg)\n\n\n# 训练模型\n\n\n## 准备数据\n\n准备训练数据`train.json`和评估数据`eval.json`，本项目只支持使用COCO格式的数据集，如果你使用的是VOC格式数据集，可以使用项目自带的工具进行转换，使用方式如下。如果你的数据本身就是COCO格式的，可以直接忽略这个步骤\n\n1. 首先生成VOC数据列表和标签列表，执行下面命令就可以生成训练数据列表`train.txt`和评估数据列表`eval.txt`，以及列表文件`label_list.txt`，它们都存放在`dataset`目录下。\n```shell\npython create_voc_list.py\n```\n\n2. 然后执行`voc2coco.py`即可生成COCO格式的数据集，训练数据和评估数据分别对应`train.json`和`eval.json`，同样是存放在`dataset`目录下。\n```shell\npython voc2coco.py\n```\n\n## 训练模型\n\n准备好数据之后就可以开始训练了，训练程序要注意以下几个重要参数，首先是模型类型`model_type`，一共有X/L/M/S四种模型类型，其次是分类大小`num_classes`，这两个参数需要根据自己的实际情况来设置，更多参数可以查看该程序文件或者执行`python train.py -h`查看。本项目支持多卡训练，具体看下面命令。\n```shell\n# 单卡训练\npython train.py --model_type=M --num_classes=80\n# 单机多卡训练\npython -m paddle.distributed.launch --gpus '0,1' train.py --model_type=M --num_classes=80\n```\n\n## 评估模型\n\n训练结束之后，如果需要查看模型的准确率，可以执行评估程序`eval.py`，需要指定模型类型，分类大小以及模型的文件夹路径。\n```shell\npython eval.py --model_type=M --num_classes=80 --resume_model=output/PPYOLOE_M/best_model\n```\n\n## 导出预测模型\n\n训练完成之后，可以导出预测模型用于之后的部署，使用及其下面命令，即可完成导出进预测模型。需要指定模型类型，分类大小以及模型的文件夹路径。`image_shape`是指定输入图片的大小，如果对性能要求比较高的话，可以尝试设置更小的图片大小，例如`3,416,416`，或者`3,320,320`，默认是`3,640,640`。\n```shell\npython export_model.py --model_type=M --num_classes=80 --resume_model=output/PPYOLOE_M/best_model\n```\n\n# 预测\n\n本项目提供三种预测方式，第一种是使用PaddlePaddle自身的Inference预测接口进行预测，第二种是使用ONNX预测接口执行预测，第三种是部署在Android设备上进行预测。\n\n## Inference\n\n使用PaddlePaddle自身的Inference预测接口进行预测，这里提供了两种方式，第一种是使用图片的路径进行预测并显示结果，第二种是使用摄像头或者视频文件进行预测。\n```shell\n# 使用图片路径进行预测并显示\npython infer.py --image_path=dataset/test.jpg --model_dir=output_inference/PPYOLOE_M\n# 使用摄像头进行实时预测\npython infer_camera.py --device_id=0 --model_dir=output_inference/PPYOLOE_M\n```\n\n识别结果：\n\n![识别结果](./dataset/result.jpg)\n\n\n## ONNX\n\n使用ONNX预测接口执行预测，使用这种方式的话需要额外安装`onnxruntime`库，并且需要找出对应的模型进行下面命令可以导出ONNX模型，需要根据实际情况修改模型的路径`model_dir`。\n```shell\npython to_onnx_model.py\n```\n\n导出ONNX模型之后就可以使用`onnxruntime`来进行推理，命令如下，分别指定预测图片路径和ONNX模型路径。执行推理并显示结果\n```shell\npython infer_onnx.py --image_path=dataset/test.jpg --onnx_model=output_inference/model.onnx\n```\n\n识别结果：\n\n![识别结果](./dataset/result.jpg)\n\n\n## Android\n\n如果要部署在Android上面使用的话，需要导出Paddle Lite模型，通过上面命令可以导出Paddle Lite模型。需要根据自己的实际情况修改模型的路径，以及是否需要进行量化量化，量化可以减少1/2的模型大小，但预测速度上不会有太大变化，一般不会降低模型的准确率。导出的Paddle Lite模型会保存到`output_inference/detect_model.nb`，**建议**在导出模型`export_model.py`的时候，在指定`image_shape`最好是选择`3,320,320`，这样推理速度会快一些。\n```shell\npython to_lite_model.py\n```\n\n\n**使用Android应用：**Android源码存放在本项目的根目录中的`Android`，可以直接用Android Studio打开使用，该演示应用有两个功能，第一是`打开相机识别`，第二是`打开相册识别`。如果要替换自己训练的模型，只需要操作这两个文件即可：\n\n1. 把`Android/ai/src/main/assets/detect_model.nb`模型文件替换成你导出的`detect_model.nb`。\n2. 把`Android/ai/src/main/assets/label_list.txt`标签列表文件替换成你的列表文件，这列表文件在`dataset/label_list.txt`。\n\n打开相册识别的演示界面：\n\n![打开相册识别](dataset/android_result.jpg)\n\n\n# 参考\n\n1. https://github.com/PaddlePaddle/PaddleDetection\n2. https://github.com/PaddlePaddle/Paddle-Lite","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeyupiaoling%2Fpp-yoloe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyeyupiaoling%2Fpp-yoloe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeyupiaoling%2Fpp-yoloe/lists"}