简体中文 | English
PaddleYOLO是基于PaddleDetection的YOLO系列模型库,只包含YOLO系列模型的相关代码,支持YOLOv3
,PP-YOLO
,PP-YOLOv2
,PP-YOLOE
,PP-YOLOE+
,YOLOX
,YOLOv5
,YOLOv6
,YOLOv7
,YOLOv8
,RTMDet
等模型,欢迎一起使用和建设!
- 【2023/05/21】支持RT-DETR、YOLOv8、YOLOv5u和YOLOv7u训练全流程,支持YOLOv6Lite预测和部署;
- 【2023/03/13】支持YOLOv5u和YOLOv7u预测和部署;
- 【2022/01/10】支持YOLOv8预测和部署;
- 【2022/09/29】支持RTMDet预测和部署;
- 【2022/09/26】发布
PaddleYOLO
模型套件; - 【2022/09/19】支持
YOLOv6
新版,包括n/t/s/m/l模型; - 【2022/08/23】发布
YOLOSeries
代码库: 支持YOLOv3
,PP-YOLOE
,PP-YOLOE+
,YOLOX
,YOLOv5
,YOLOv6
,YOLOv7
等YOLO模型,支持ConvNeXt
骨干网络高精度版PP-YOLOE
,YOLOX
和YOLOv5
等模型,支持PaddleSlim无损加速量化训练PP-YOLOE
,YOLOv5
,YOLOv6
和YOLOv7
等模型,详情可阅读此文章;
注意:
- PaddleYOLO代码库协议为GPL 3.0,YOLOv5,YOLOv6,YOLOv7和YOLOv8这几类模型代码不合入PaddleDetection,其余YOLO模型推荐在PaddleDetection中使用,会最先发布PP-YOLO系列特色检测模型的最新进展;;
- PaddleYOLO代码库推荐使用paddlepaddle-2.3.2以上的版本,请参考官网下载对应适合版本,Windows平台请安装paddle develop版本;
- PaddleYOLO 的Roadmap issue用于收集用户的需求,欢迎提出您的建议和需求。
- 训练自定义数据集请参照文档和issue。请首先确保加载了COCO权重作为预训练,YOLO检测模型建议总
batch_size
至少大于64
去训练,如果资源不够请换小模型或减小模型的输入尺度,为了保障较高检测精度,尽量不要尝试单卡训和总batch_size
小于32
训;
基础模型
网络模型 | 输入尺寸 | 图片数/GPU | 学习率策略 | TRT-FP16-Latency(ms) | mAPval 0.5:0.95 |
mAPval 0.5 |
Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
PP-YOLOE-s | 640 | 32 | 400e | 2.9 | 43.4 | 60.0 | 7.93 | 17.36 | model | config |
PP-YOLOE-s | 640 | 32 | 300e | 2.9 | 43.0 | 59.6 | 7.93 | 17.36 | model | config |
PP-YOLOE-m | 640 | 28 | 300e | 6.0 | 49.0 | 65.9 | 23.43 | 49.91 | model | config |
PP-YOLOE-l | 640 | 20 | 300e | 8.7 | 51.4 | 68.6 | 52.20 | 110.07 | model | config |
PP-YOLOE-x | 640 | 16 | 300e | 14.9 | 52.3 | 69.5 | 98.42 | 206.59 | model | config |
PP-YOLOE-tiny ConvNeXt | 640 | 16 | 36e | - | 44.6 | 63.3 | 33.04 | 13.87 | model | config |
PP-YOLOE+_s | 640 | 8 | 80e | 2.9 | 43.7 | 60.6 | 7.93 | 17.36 | model | config |
PP-YOLOE+_m | 640 | 8 | 80e | 6.0 | 49.8 | 67.1 | 23.43 | 49.91 | model | config |
PP-YOLOE+_l | 640 | 8 | 80e | 8.7 | 52.9 | 70.1 | 52.20 | 110.07 | model | config |
PP-YOLOE+_x | 640 | 8 | 80e | 14.9 | 54.7 | 72.0 | 98.42 | 206.59 | model | config |
部署模型
网络模型 | 输入尺寸 | 导出后的权重(w/o NMS) | ONNX(w/o NMS) |
---|---|---|---|
PP-YOLOE-s(400epoch) | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
PP-YOLOE-s | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
PP-YOLOE-m | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
PP-YOLOE-l | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
PP-YOLOE-x | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
PP-YOLOE+_s | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
PP-YOLOE+_m | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
PP-YOLOE+_l | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
PP-YOLOE+_x | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
基础模型
网络模型 | 输入尺寸 | 图片数/GPU | 学习率策略 | TRT-FP16-Latency(ms) | mAPval 0.5:0.95 |
mAPval 0.5 |
Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
YOLOX-nano | 416 | 8 | 300e | 2.3 | 26.1 | 42.0 | 0.91 | 1.08 | model | config |
YOLOX-tiny | 416 | 8 | 300e | 2.8 | 32.9 | 50.4 | 5.06 | 6.45 | model | config |
YOLOX-s | 640 | 8 | 300e | 3.0 | 40.4 | 59.6 | 9.0 | 26.8 | model | config |
YOLOX-m | 640 | 8 | 300e | 5.8 | 46.9 | 65.7 | 25.3 | 73.8 | model | config |
YOLOX-l | 640 | 8 | 300e | 9.3 | 50.1 | 68.8 | 54.2 | 155.6 | model | config |
YOLOX-x | 640 | 8 | 300e | 16.6 | 51.8 | 70.6 | 99.1 | 281.9 | model | config |
YOLOX-cdn-tiny | 416 | 8 | 300e | 1.9 | 32.4 | 50.2 | 5.03 | 6.33 | model | config |
YOLOX-crn-s | 640 | 8 | 300e | 3.0 | 40.4 | 59.6 | 7.7 | 24.69 | model | config |
YOLOX-s ConvNeXt | 640 | 8 | 36e | - | 44.6 | 65.3 | 36.2 | 27.52 | model | config |
部署模型
网络模型 | 输入尺寸 | 导出后的权重(w/o NMS) | ONNX(w/o NMS) |
---|---|---|---|
YOLOx-nano | 416 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOx-tiny | 416 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOx-s | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOx-m | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOx-l | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOx-x | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
基础模型
网络模型 | 输入尺寸 | 图片数/GPU | 学习率策略 | TRT-FP16-Latency(ms) | mAPval 0.5:0.95 |
mAPval 0.5 |
Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
YOLOv5-n | 640 | 16 | 300e | 1.5 | 28.0 | 45.7 | 1.87 | 4.52 | model | config |
YOLOv5-s | 640 | 16 | 300e | 2.6 | 37.6 | 56.7 | 7.24 | 16.54 | model | config |
YOLOv5-m | 640 | 16 | 300e | 5.2 | 45.4 | 64.1 | 21.19 | 49.08 | model | config |
YOLOv5-l | 640 | 16 | 300e | 7.9 | 48.9 | 67.1 | 46.56 | 109.32 | model | config |
YOLOv5-x | 640 | 16 | 300e | 13.7 | 50.6 | 68.7 | 86.75 | 205.92 | model | config |
YOLOv5-s ConvNeXt | 640 | 8 | 36e | - | 42.4 | 65.3 | 34.54 | 17.96 | model | config |
*YOLOv5u-n | 640 | 16 | 300e | 1.61 | 34.5 | 49.7 | 2.65 | 7.79 | model | config |
*YOLOv5u-s | 640 | 16 | 300e | 2.66 | 43.0 | 59.7 | 9.15 | 24.12 | model | config |
*YOLOv5u-m | 640 | 16 | 300e | 5.50 | 49.0 | 65.7 | 25.11 | 64.42 | model | config |
*YOLOv5u-l | 640 | 16 | 300e | 8.73 | 52.2 | 69.0 | 53.23 | 135.34 | model | config |
*YOLOv5u-x | 640 | 16 | 300e | 15.49 | 53.1 | 69.9 | 97.28 | 246.89 | model | config |
*YOLOv5p6-n | 1280 | 16 | 300e | - | 35.9 | 54.2 | 3.25 | 9.23 | model | config |
*YOLOv5p6-s | 1280 | 16 | 300e | - | 44.5 | 63.3 | 12.63 | 33.81 | model | config |
*YOLOv5p6-m | 1280 | 16 | 300e | - | 51.1 | 69.0 | 35.73 | 100.21 | model | config |
*YOLOv5p6-l | 1280 | 8 | 300e | - | 53.4 | 71.0 | 76.77 | 223.09 | model | config |
*YOLOv5p6-x | 1280 | 8 | 300e | - | 54.7 | 72.4 | 140.80 | 420.03 | model | config |
部署模型
网络模型 | 输入尺寸 | 导出后的权重(w/o NMS) | ONNX(w/o NMS) |
---|---|---|---|
YOLOv5-n | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv5-s | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv5-m | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv5-l | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv5-x | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
基础模型
网络网络 | 输入尺寸 | 图片数/GPU | 学习率策略 | TRT-FP16-Latency(ms) | mAP | AP50 | Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
*YOLOv6-n | 640 | 16 | 300e(+300e) | 1.3 | 37.5 | 53.1 | 5.07 | 12.49 | model | config |
*YOLOv6-s | 640 | 32 | 300e(+300e) | 2.7 | 44.8 | 61.7 | 20.18 | 49.36 | model | config |
*YOLOv6-m | 640 | 32 | 300e(+300e) | 5.3 | 49.5 | 66.9 | 37.74 | 92.47 | model | config |
*YOLOv6-l(silu) | 640 | 32 | 300e(+300e) | 9.5 | 52.2 | 70.2 | 59.66 | 149.4 | model | config |
部署模型
网络模型 | 输入尺寸 | 导出后的权重(w/o NMS) | ONNX(w/o NMS) |
---|---|---|---|
yolov6-n | 640 | (w/ nms) | (w/o nms) | (w/ nms) | (w/o nms) |
yolov6-s | 640 | (w/ nms) | (w/o nms) | (w/ nms) | (w/o nms) |
yolov6-m | 640 | (w/ nms) | (w/o nms) | (w/ nms) | (w/o nms) |
yolov6-l(silu) | 640 | (w/ nms) | (w/o nms) | (w/ nms) | (w/o nms) |
基础模型
网络模型 | 输入尺寸 | 图片数/GPU | 学习率策略 | TRT-FP16-Latency(ms) | mAPval 0.5:0.95 |
mAPval 0.5 |
Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
YOLOv7-L | 640 | 32 | 300e | 7.4 | 51.0 | 70.2 | 37.62 | 106.08 | model | config |
YOLOv7u-L | 640 | 32 | 300e | 9.0 | 52.1 | 68.8 | 43.59 | 130.10 | model | config |
*YOLOv7-X | 640 | 32 | 300e | 12.2 | 53.0 | 70.8 | 71.34 | 190.08 | model | config |
*YOLOv7P6-W6 | 1280 | 16 | 300e | 25.5 | 54.4 | 71.8 | 70.43 | 360.26 | model | config |
*YOLOv7P6-E6 | 1280 | 10 | 300e | 31.1 | 55.7 | 73.0 | 97.25 | 515.4 | model | config |
*YOLOv7P6-D6 | 1280 | 8 | 300e | 37.4 | 56.1 | 73.3 | 133.81 | 702.92 | model | config |
*YOLOv7P6-E6E | 1280 | 6 | 300e | 48.7 | 56.5 | 73.7 | 151.76 | 843.52 | model | config |
YOLOv7-tiny | 640 | 32 | 300e | 2.4 | 37.3 | 54.5 | 6.23 | 13.80 | model | config |
YOLOv7-tiny | 416 | 32 | 300e | 1.3 | 33.3 | 49.5 | 6.23 | 5.82 | model | config |
YOLOv7-tiny | 320 | 32 | 300e | - | 29.1 | 43.8 | 6.23 | 3.46 | model | config |
部署模型
网络模型 | 输入尺寸 | 导出后的权重(w/o NMS) | ONNX(w/o NMS) |
---|---|---|---|
YOLOv7-l | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv7-x | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv7P6-W6 | 1280 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv7P6-E6 | 1280 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv7P6-D6 | 1280 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv7P6-E6E | 1280 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv7-tiny | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv7-tiny | 416 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
YOLOv7-tiny | 320 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
基础模型
网络网络 | 输入尺寸 | 图片数/GPU | 学习率策略 | TRT-FP16-Latency(ms) | mAPval 0.5:0.95 |
mAPval 0.5 |
Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
*YOLOv8-n | 640 | 16 | 500e | 1.8 | 37.3 | 53.0 | 3.16 | 8.7 | model | config |
*YOLOv8-s | 640 | 16 | 500e | 3.4 | 44.9 | 61.8 | 11.17 | 28.6 | model | config |
*YOLOv8-m | 640 | 16 | 500e | 6.5 | 50.2 | 67.3 | 25.90 | 78.9 | model | config |
*YOLOv8-l | 640 | 16 | 500e | 10.0 | 52.8 | 69.6 | 43.69 | 165.2 | model | config |
*YOLOv8-x | 640 | 16 | 500e | 15.1 | 53.8 | 70.6 | 68.23 | 257.8 | model | config |
*YOLOv8-P6-x | 1280 | 16 | 500e | 55.0 | - | - | 97.42 | 522.93 | model | config |
部署模型
网络模型 | 输入尺寸 | 导出后的权重(带nms) | 导出后的权重(exclude_nms) | ONNX(exclude_post_process) |
---|---|---|---|---|
YOLOv8-n | 640 | (w_nms) | (wo_nms) | (onnx) |
YOLOv8-s | 640 | (w_nms) | (wo_nms) | (onnx) |
YOLOv8-m | 640 | (w_nms) | (wo_nms) | (onnx) |
YOLOv8-l | 640 | (w_nms) | (wo_nms) | (onnx) |
YOLOv8-x | 640 | (w_nms) | (wo_nms) | (onnx) |
基础模型
网络网络 | 输入尺寸 | 图片数/GPU | 学习率策略 | TRT-FP16-Latency(ms) | mAP | AP50 | Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
*RTMDet-t | 640 | 32 | 300e | 2.8 | 40.9 | 57.9 | 4.90 | 16.21 | model | config |
*RTMDet-s | 640 | 32 | 300e | 3.3 | 44.5 | 62.0 | 8.89 | 29.71 | model | config |
*RTMDet-m | 640 | 32 | 300e | 6.4 | 49.1 | 66.8 | 24.71 | 78.47 | model | config |
*RTMDet-l | 640 | 32 | 300e | 10.2 | 51.2 | 68.8 | 52.31 | 160.32 | model | config |
*RTMDet-x | 640 | 32 | 300e | 18.0 | 52.6 | 70.4 | 94.86 | 283.12 | model | config |
部署模型
网络模型 | 输入尺寸 | 导出后的权重(w/o NMS) | ONNX(w/o NMS) |
---|---|---|---|
RTMDet-t | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
RTMDet-s | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
RTMDet-m | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
RTMDet-l | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
RTMDet-x | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
- 所有模型均使用COCO train2017作为训练集,在COCO val2017上验证精度,模型前带*表示训练更新中。
- 具体精度和速度细节请查看PP-YOLOE,YOLOX,YOLOv5,YOLOv6,YOLOv7,其中YOLOv5,YOLOv6,YOLOv7评估并未采用
multi_label
形式。 - 模型推理耗时(ms)为TensorRT-FP16下测试的耗时,不包含数据预处理和模型输出后处理(NMS)的耗时。测试采用单卡Tesla T4 GPU,batch size=1,测试环境为paddlepaddle-2.3.2, CUDA 11.2, CUDNN 8.2, GCC-8.2, TensorRT 8.0.3.4,具体请参考各自模型主页。
- 统计FLOPs(G)和Params(M),首先安装PaddleSlim,
pip install paddleslim
,然后设置runtime.yml里print_flops: True
和print_params: True
,并且注意确保是单尺度下如640x640,打印的是MACs,FLOPs=2*MACs。 - 基于PaddleSlim对YOLO系列模型进行量化训练,可以实现精度基本无损,速度普遍提升30%以上,具体请参照模型自动化压缩工具ACT。
基础模型
网络模型 | 输入尺寸 | 图片数/GPU | 学习率策略 | TRT-FP16-Latency(ms) | mAP(0.50,11point) | Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|
YOLOv5-s | 640 | 16 | 60e | 3.2 | 80.3 | 7.24 | 16.54 | 下载链接 | 配置文件 |
YOLOv7-tiny | 640 | 32 | 60e | 2.6 | 80.2 | 6.23 | 6.90 | 下载链接 | 配置文件 |
YOLOX-s | 640 | 8 | 40e | 3.0 | 82.9 | 9.0 | 26.8 | 下载链接 | 配置文件 |
PP-YOLOE+_s | 640 | 8 | 30e | 2.9 | 86.7 | 7.93 | 17.36 | 下载链接 | 配置文件 |
注意:
- VOC数据集训练的mAP为
mAP(IoU=0.5)
的结果,且评估未使用multi_label
等trick; - 所有YOLO VOC模型均加载各自模型的COCO权重作为预训练,各个配置文件的配置均为默认使用8卡GPU,可作为自定义数据集设置参考,具体精度会因数据集而异;
- YOLO检测模型建议总
batch_size
至少大于64
去训练,如果资源不够请换小模型或减小模型的输入尺度,为了保障较高检测精度,尽量不要尝试单卡训和总batch_size
小于64
训; - Params(M)和FLOPs(G)均为训练时所测,YOLOv7没有s模型,故选用tiny模型;
- TRT-FP16-Latency(ms)测速相关请查看各YOLO模型的config的主页;
下载MS-COCO数据集,官网下载地址为: annotations, train2017, val2017, test2017。 PaddleDetection团队提供的下载链接为:coco(共约22G)和test2017,注意test2017可不下载,评估是使用的val2017。
将以下命令写在一个脚本文件里如run.sh
,一键运行命令为:sh run.sh
,也可命令行一句句去运行。
model_name=ppyoloe # 可修改,如 yolov7
job_name=ppyoloe_plus_crn_s_80e_coco # 可修改,如 yolov7_tiny_300e_coco
config=configs/${model_name}/${job_name}.yml
log_dir=log_dir/${job_name}
# weights=https://bj.bcebos.com/v1/paddledet/models/${job_name}.pdparams
weights=output/${job_name}/model_final.pdparams
# 1.训练(单卡/多卡),加 --eval 表示边训边评估,加 --amp 表示混合精度训练
# CUDA_VISIBLE_DEVICES=0 python tools/train.py -c ${config} --eval --amp
python -m paddle.distributed.launch --log_dir=${log_dir} --gpus 0,1,2,3,4,5,6,7 tools/train.py -c ${config} --eval --amp
# 2.评估,加 --classwise 表示输出每一类mAP
CUDA_VISIBLE_DEVICES=0 python tools/eval.py -c ${config} -o weights=${weights} --classwise
# 3.预测 (单张图/图片文件夹)
CUDA_VISIBLE_DEVICES=0 python tools/infer.py -c ${config} -o weights=${weights} --infer_img=demo/000000014439_640x640.jpg --draw_threshold=0.5
# CUDA_VISIBLE_DEVICES=0 python tools/infer.py -c ${config} -o weights=${weights} --infer_dir=demo/ --draw_threshold=0.5
# 4.导出模型,以下3种模式选一种
## 普通导出,加trt表示用于trt加速,对NMS和silu激活函数提速明显
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c ${config} -o weights=${weights} # trt=True
## exclude_post_process去除后处理导出,返回和YOLOv5导出ONNX时相同格式的concat后的1个Tensor,是未缩放回原图的坐标+分类置信度
# CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c ${config} -o weights=${weights} exclude_post_process=True # trt=True
## exclude_nms去除NMS导出,返回2个Tensor,是缩放回原图后的坐标和分类置信度
# CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c ${config} -o weights=${weights} exclude_nms=True # trt=True
# 5.部署预测,注意不能使用 去除后处理 或 去除NMS 导出后的模型去预测
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/${job_name} --image_file=demo/000000014439_640x640.jpg --device=GPU
# 6.部署测速,加 “--run_mode=trt_fp16” 表示在TensorRT FP16模式下测速,注意如需用到 trt_fp16 则必须为加 trt=True 导出的模型
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/${job_name} --image_file=demo/000000014439_640x640.jpg --device=GPU --run_benchmark=True # --run_mode=trt_fp16
# 7.onnx导出,一般结合 exclude_post_process去除后处理导出的模型
paddle2onnx --model_dir output_inference/${job_name} --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 12 --save_file ${job_name}.onnx
# 8.onnx trt测速
/usr/local/TensorRT-8.0.3.4/bin/trtexec --onnx=${job_name}.onnx --workspace=4096 --avgRuns=10 --shapes=input:1x3x640x640 --fp16
/usr/local/TensorRT-8.0.3.4/bin/trtexec --onnx=${job_name}.onnx --workspace=4096 --avgRuns=10 --shapes=input:1x3x640x640 --fp32
- 如果想切换模型,只要修改开头两行即可,如:
model_name=yolov7 job_name=yolov7_tiny_300e_coco
- 导出onnx,首先安装Paddle2ONNX,
pip install paddle2onnx
; - 统计FLOPs(G)和Params(M),首先安装PaddleSlim,
pip install paddleslim
,然后设置runtime.yml里print_flops: True
和print_params: True
,并且注意确保是单尺度下如640x640,打印的是MACs,FLOPs=2*MACs。
1.自定义数据集的标注制作,请参考DetAnnoTools;
2.自定义数据集的训练准备,请参考PrepareDataSet。
除了更改数据集的路径外,训练一般推荐加载对应模型的COCO预训练权重去fintune,会更快收敛和达到更高精度,如:
# 单卡fintune训练:
# CUDA_VISIBLE_DEVICES=0 python tools/train.py -c ${config} --eval --amp -o pretrain_weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams
# 多卡fintune训练:
python -m paddle.distributed.launch --log_dir=./log_dir --gpus 0,1,2,3,4,5,6,7 tools/train.py -c ${config} --eval --amp -o pretrain_weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams
注意:
- fintune训练一般会提示head分类分支最后一层卷积的通道数没对应上,属于正常情况,是由于自定义数据集一般和COCO数据集种类数不一致;
- fintune训练一般epoch数可以设置更少,lr设置也更小点如1/10,最高精度可能出现在中间某个epoch;
使用自定义数据集预测和导出模型时,如果TestDataset数据集路径设置不正确会默认使用COCO 80类。 除了TestDataset数据集路径设置正确外,也可以自行修改和添加对应的label_list.txt文件(一行记录一个对应种类),TestDataset中的anno_path也可设置为绝对路径,如:
TestDataset:
!ImageFolder
anno_path: label_list.txt # 如不使用dataset_dir,则anno_path即为相对于PaddleDetection主目录的相对路径
# dataset_dir: dataset/my_coco # 如使用dataset_dir,则dataset_dir/anno_path作为新的anno_path
label_list.txt里的一行记录一个对应种类,如下所示:
person
vehicle
FastDeploy是飞桨推出的统一部署工具,支持云边端部署。目前在YOLO系列支持的部署能力如下所示。具体部署示例,可以前往FastDeploy仓库使用。
YOLOv5 | YOLOv6 | YOLOv7 | YOLOv8 | PP-YOLOE+ | 部署特色 | |
---|---|---|---|---|---|---|
Intel CPU | 支持 | 支持 | 支持 | 支持 | 支持 | 集成PaddleSlim一键压缩压缩,实现极致性能 |
NVIDIA GPU | 支持 | 支持 | 支持 | 支持 | 支持 | 集成PaddleSlim一键压缩工具、CUDA预处理加速,实现极致性能 |
飞腾 CPU | 支持 | 支持 | 支持 | 支持 | 支持 | X86 CPU与ARM CPU无缝切换 |
昆仑芯 R200* | 支持 | 支持 | 支持 | 支持 | 支持 | 无缝部署Paddle模型 |
昇腾310* | 支持 | 即将支持 | 即将支持 | 即将支持 | 支持 | 无缝部署Paddle模型 |
算能SC7-FP300* | 支持 | 支持 | 支持 | 支持 | 支持 | 充分发挥硬件工具链特性,实现模型快速部署 |
Jetson | 支持 | 支持 | 支持 | 支持 | 支持 | 集成PaddleSlim一键压缩工具、CUDA预处理加速,实现极致性能 |
ARM CPU | 支持 | 支持 | 支持 | 支持 | 支持 | 集成PaddleSlim一键压缩工具、预处理加速库FlyCV,实现极致性能 |
RK3588* | 支持 | 支持 | 支持 | 支持 | 支持 | 充分发挥硬件工具链特性,实现模型快速部署 |
RV1126* | 支持 | 暂不支持 | 暂不支持 | 暂不支持 | 支持 | 联合全量化实现模型端到端的优化 |
服务化部署 | 支持 | 暂不支持 | 暂不支持 | 暂不支持 | 支持 | 实现企业级高并发需求 |
视频流部署 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | 支持 | 调用硬解码核,实现数据零拷贝,充分利用硬件资源 |
备注:
*表示:FastDeploy目前在该型号硬件上测试。通常同类型硬件上使用的是相同的软件栈,该部署能力可以延伸到同软件架栈的硬件。譬如RK3588与RK3566、RK3568相同的软件栈。
「硬件列-纵轴」链接到部署预编译包安装或部署示例,「横轴」跳转到具体部署示例。