YOLOSeries是基于PaddleDetection的YOLO系列模型库,由PaddleDetection团队成员建设和维护,支持YOLOv3
,PP-YOLOE
,PP-YOLOE+
,YOLOX
,YOLOv5
,YOLOv6
,YOLOv7
等模型,其upstream为PaddleDetection的develop分支,并与PaddleDetection主代码库分支保持同步更新,包括github和gitee的代码,欢迎一起使用和建设!
- 【2022/09/*】即将发布PaddleYOLO;
- 【2022/09/21】精简代码库只保留主要的YOLO模型相关的代码(release/2.5 branch);
- 【2022/09/19】支持
YOLOv6
新版,包括n/t/s/m/l模型; - 【2022/08/23】发布
PaddleDetection_YOLOSeries
代码库: 支持YOLOv3
,PP-YOLOE
,PP-YOLOE+
,YOLOX
,YOLOv5
,YOLOv6
,YOLOv7
等YOLO模型,支持ConvNeXt骨干网络高精度版PP-YOLOE
,YOLOX
和YOLOv5
等模型,支持PaddleSlim无损加速量化训练PP-YOLOE
,YOLOv5
,YOLOv6
和YOLOv7
等模型,详情可阅读此文章;
注意:
- 此代码库推荐使用paddlepaddle-2.3.0以上的版本,请参考官网下载对应适合版本,其中develop分支代码请安装paddle develop版本,其余分支建议安装paddle 2.3.2版本。
- github链接为:https://github.com/nemonameless/PaddleDetection_YOLOSeries
- gitee链接为:https://gitee.com/nemonameless/PaddleDetection_YOLOSeries
- 提issue可以在此代码库的issues页面中,也可以在PaddleDetection issues中,也欢迎提PR共同建设和维护。
- PP-YOLOE,PP-YOLOE+,PP-YOLO,PP-YOLOv2,YOLOv3和YOLOX等模型推荐在PaddleDetection中使用,会最先发布PP-YOLO系列特色检测模型的最新进展。
- YOLOv5,YOLOv7和YOLOv6模型推荐在此代码库中使用,由于GPL开源协议而不合入PaddleDetection主代码库。
-
如果你发现任何PaddleDetection存在的问题或者是建议, 欢迎通过GitHub Issues给我们提issues。
-
欢迎加入PaddleDetection 微信用户群(扫码填写问卷即可入群)
- 入群福利 💎:获取PaddleDetection团队整理的重磅学习大礼包🎁
- 📊 福利一:获取飞桨联合业界企业整理的开源数据集
- 👨🏫 福利二:获取PaddleDetection历次发版直播视频与最新直播咨询
- 🗳 福利三:获取垂类场景预训练模型集合,包括工业、安防、交通等5+行业场景
- 🗂 福利四:获取10+全流程产业实操范例,覆盖火灾烟雾检测、人流量计数等产业高频场景
- 入群福利 💎:获取PaddleDetection团队整理的重磅学习大礼包🎁
网络模型 | 输入尺寸 | 图片数/GPU | 学习率策略 | 推理耗时(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 | 学习率策略 | 推理耗时(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 | 学习率策略 | 推理耗时(ms) | mAPval 0.5:0.95 |
mAPval 0.5 |
Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
YOLOv5-n | 640 | 16 | 300e | 2.6 | 28.0 | 45.7 | 1.87 | 4.52 | model | config |
YOLOv5-s | 640 | 8 | 300e | 3.2 | 37.0 | 55.9 | 7.24 | 16.54 | model | config |
YOLOv5-m | 640 | 5 | 300e | 5.2 | 45.3 | 63.8 | 21.19 | 49.08 | model | config |
YOLOv5-l | 640 | 3 | 300e | 7.9 | 48.6 | 66.9 | 46.56 | 109.32 | model | config |
YOLOv5-x | 640 | 2 | 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 |
网络模型 | 输入尺寸 | 导出后的权重(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 | 学习率策略 | 模型推理耗时(ms) | mAP | AP50 | Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|---|
*YOLOv6-n | 416 | 32 | 400e | 1.0 | 31.1 | 45.3 | 4.74 | 5.16 | model | config |
*YOLOv6-n | 640 | 32 | 400e | 1.3 | 36.1 | 51.9 | 4.74 | 12.21 | model | config |
*YOLOv6-t | 640 | 32 | 400e | 2.1 | 40.7 | 57.4 | 10.63 | 27.29 | model | config |
*YOLOv6-s | 640 | 32 | 400e | 2.6 | 43.4 | 60.5 | 18.87 | 48.35 | model | config |
*YOLOv6-m | 640 | 32 | 300e | 5.0 | 49.0 | 66.5 | 37.17 | 88.82 | model | config |
*YOLOv6-l | 640 | 32 | 300e | 7.9 | 51.0 | 68.9 | 63.54 | 155.89 | model | config |
*YOLOv6-l-silu | 640 | 32 | 300e | 9.6 | 51.7 | 69.6 | 58.59 | 142.66 | model | config |
网络模型 | 输入尺寸 | 导出后的权重(w/o NMS) | ONNX(w/o NMS) |
---|---|---|---|
yolov6-n | 416 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
yolov6-n | 640 | ( w/ nms) | ( w/o nms) | ( w/ nms) | ( w/o nms) |
yolov6-t | 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 | 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 | 学习率策略 | 推理耗时(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 |
*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 | - | 37.3 | 54.5 | 6.23 | 6.90 | model | config |
YOLOv7-tiny | 416 | 32 | 300e | - | 33.3 | 49.5 | 6.23 | 2.91 | model | config |
YOLOv7-tiny | 320 | 32 | 300e | - | 29.1 | 43.8 | 6.23 | 1.73 | 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) |
- 所有模型均使用COCO train2017作为训练集,在COCO val2017上验证精度,模型前带*表示训练更新中。
- 具体精度和速度细节请查看PP-YOLOE,YOLOX,YOLOv5,YOLOv6,YOLOv7。
- 模型推理耗时(ms)为TensorRT-FP16下测试的耗时,不包含数据预处理和模型输出后处理(NMS)的耗时。测试采用单卡V100,batch size=1,测试环境为paddlepaddle-2.3.0, CUDA 11.2, CUDNN 8.2, GCC-8.2, TensorRT 8.0.3.4,具体请参考各自模型主页。
- 统计参数量Params(M),可以将以下代码插入trainer.py。
params = sum([ p.numel() for n, p in self.model.named_parameters() if all([x not in n for x in ['_mean', '_variance']]) ]) # exclude BatchNorm running status print('Params: ', params / 1e6)
- 统计FLOPs(G),首先安装PaddleSlim,
pip install paddleslim
,然后设置runtime.yml里print_flops: True
,并且注意确保是单尺度下如640x640,打印的是MACs,FLOPs=2*MACs。 - 各模型导出后的权重以及ONNX,分为带(w)和不带(wo)后处理NMS,都提供了下载链接,请参考各自模型主页下载。
w_nms
表示带NMS后处理,可以直接使用预测出最终检测框结果如python deploy/python/infer.py --model_dir=ppyoloe_crn_l_300e_coco_w_nms/ --image_file=demo/000000014439.jpg --device=GPU
;wo_nms
表示不带NMS后处理,是测速时使用,如需预测出检测框结果需要找到对应head中的后处理相关代码并修改为如下:
if self.exclude_nms:
# `exclude_nms=True` just use in benchmark for speed test
# return pred_bboxes.sum(), pred_scores.sum() # 原先是这行,现在注释
return pred_bboxes, pred_scores # 新加这行,表示保留进NMS前的原始结果
else:
bbox_pred, bbox_num, _ = self.nms(pred_bboxes, pred_scores)
return bbox_pred, bbox_num
并重新导出,使用时再另接自己写的NMS后处理。
- 基于PaddleSlim对YOLO系列模型进行量化训练,可以实现精度基本无损,速度普遍提升30%以上,具体请参照模型自动化压缩工具ACT。
- PP-YOLOE,PP-YOLOE+,YOLOv3和YOLOX推荐在PaddleDetection里使用,会最先发布PP-YOLO系列特色检测模型的最新进展。
- YOLOv5,YOLOv7和YOLOv6由于GPL协议而不合入PaddleDetection主代码库。
- paddlepaddle版本推荐使用2.3.0版本以上。
下载MS COCO数据集,官网下载地址为: annotations, train2017, val2017, test2017。 PaddleDetection团队提供的下载链接为:coco(共约22G)和test2017,注意test2017可不下载,评估是使用的val2017。
model_type=ppyoloe # 可修改,如 yolov7
job_name=ppyoloe_crn_l_300e_coco # 可修改,如 yolov7_l_300e_coco
config=configs/${model_type}/${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.训练(单卡/多卡)
# CUDA_VISIBLE_DEVICES=0 python3.7 tools/train.py -c ${config} --eval --amp
python3.7 -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.评估
CUDA_VISIBLE_DEVICES=0 python3.7 tools/eval.py -c ${config} -o weights=${weights} --classwise
# 3.直接预测
CUDA_VISIBLE_DEVICES=0 python3.7 tools/infer.py -c ${config} -o weights=${weights} --infer_img=demo/000000014439_640x640.jpg --draw_threshold=0.5
# 4.导出模型
CUDA_VISIBLE_DEVICES=0 python3.7 tools/export_model.py -c ${config} -o weights=${weights} # exclude_nms=True trt=True
# 5.部署预测
CUDA_VISIBLE_DEVICES=0 python3.7 deploy/python/infer.py --model_dir=output_inference/${job_name} --image_file=demo/000000014439_640x640.jpg --device=GPU
# 6.部署测速
CUDA_VISIBLE_DEVICES=0 python3.7 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导出
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测速
/usr/local/TensorRT-8.0.3.4/bin/trtexec --onnx=${job_name}.onnx --workspace=4096 --avgRuns=10 --shapes=input:1x3x640x640 --fp16
注意:
- 将以上命令写在一个脚本文件里如
run.sh
,一键运行命令为:sh run.sh
,也可命令行一句句去运行。 - 如果想切换模型,只要修改开头两行即可,如:
model_type=yolov7 job_name=yolov7_l_300e_coco
- 统计参数量Params(M),可以将以下代码插入trainer.py。
params = sum([ p.numel() for n, p in self.model.named_parameters() if all([x not in n for x in ['_mean', '_variance']]) ]) # exclude BatchNorm running status print('Params: ', params / 1e6)
- 统计FLOPs(G),首先安装PaddleSlim,
pip install paddleslim
,然后设置runtime.yml里print_flops: True
,并且注意确保是单尺度下如640x640,打印的是MACs,FLOPs=2*MACs。
1.自定义数据集的标注制作,请参考DetAnnoTools;
2.自定义数据集的训练准备,请参考PrepareDataSet。
除了更改数据集的路径外,训练一般推荐加载对应模型的COCO预训练权重去fintune,会更快收敛和达到更高精度,如:
# 单卡fintune训练:
# CUDA_VISIBLE_DEVICES=0 python3.7 tools/train.py -c ${config} --eval --amp -o pretrain_weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams
# 多卡fintune训练:
python3.7 -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
======================================================
简体中文 | English
-
🔥 2022.8.26:PaddleDetection发布release/2.5版本
- 🗳 特色模型:
- 发布PP-YOLOE+,最高精度提升2.4% mAP,达到54.9% mAP,模型训练收敛速度提升3.75倍,端到端预测速度最高提升2.3倍;多个下游任务泛化性提升
- 发布PicoDet-NPU模型,支持模型全量化部署;新增PicoDet版面分析模型
- 发布PP-TinyPose升级版增强版,在健身、舞蹈等场景精度提升9.1% AP,支持侧身、卧躺、跳跃、高抬腿等非常规动作
- 🔮 场景能力:
- 发布行人分析工具PP-Human v2,新增打架、打电话、抽烟、闯入四大行为识别,底层算法性能升级,覆盖行人检测、跟踪、属性三类核心算法能力,提供保姆级全流程开发及模型优化策略,支持在线视频流输入
- 首次发布PP-Vehicle,提供车牌识别、车辆属性分析(颜色、车型)、车流量统计以及违章检测四大功能,兼容图片、在线视频流、视频输入,提供完善的二次开发文档教程
- 💡 前沿算法:
- 📋 产业范例:新增智能健身、打架识别、来客分析、车辆结构化范例
- 🗳 特色模型:
-
2022.3.24:PaddleDetection发布release/2.4版本
- 发布高精度云边一体SOTA目标检测模型PP-YOLOE,提供s/m/l/x版本,l版本COCO test2017数据集精度51.6%,V100预测速度78.1 FPS,支持混合精度训练,训练较PP-YOLOv2加速33%,全系列多尺度模型,满足不同硬件算力需求,可适配服务器、边缘端GPU及其他服务器端AI加速卡。
- 发布边缘端和CPU端超轻量SOTA目标检测模型PP-PicoDet增强版,精度提升2%左右,CPU预测速度提升63%,新增参数量0.7M的PicoDet-XS模型,提供模型稀疏化和量化功能,便于模型加速,各类硬件无需单独开发后处理模块,降低部署门槛。
- 发布实时行人分析工具PP-Human,支持行人跟踪、人流量统计、人体属性识别与摔倒检测四大能力,基于真实场景数据特殊优化,精准识别各类摔倒姿势,适应不同环境背景、光线及摄像角度。
- 新增YOLOX目标检测模型,支持nano/tiny/s/m/l/x版本,x版本COCO val2017数据集精度51.8%。
PaddleDetection为基于飞桨PaddlePaddle的端到端目标检测套件,内置30+模型算法及250+预训练模型,覆盖目标检测、实例分割、跟踪、关键点检测等方向,其中包括服务器端和移动端高精度、轻量级产业级SOTA模型、冠军方案和学术前沿算法,并提供配置化的网络模块组件、十余种数据增强策略和损失函数等高阶优化支持和多种部署方案,在打通数据处理、模型开发、训练、压缩、部署全流程的基础上,提供丰富的案例及教程,加速算法产业落地应用。
- 模型丰富: 包含目标检测、实例分割、人脸检测、关键点检测、多目标跟踪等250+个预训练模型,涵盖多种全球竞赛冠军方案。
- 使用简洁:模块化设计,解耦各个网络组件,开发者轻松搭建、试用各种检测模型及优化策略,快速得到高性能、定制化的算法。
- 端到端打通: 从数据增强、组网、训练、压缩、部署端到端打通,并完备支持云端/边缘端多架构、多设备部署。
- 高性能: 基于飞桨的高性能内核,模型训练速度及显存占用优势明显。支持FP16训练, 支持多机训练。
-
如果你发现任何PaddleDetection存在的问题或者是建议, 欢迎通过GitHub Issues给我们提issues。
-
欢迎加入PaddleDetection 微信用户群(扫码填写问卷即可入群)
- 入群福利 💎:获取PaddleDetection团队整理的重磅学习大礼包🎁
- 📊 福利一:获取飞桨联合业界企业整理的开源数据集
- 👨🏫 福利二:获取PaddleDetection历次发版直播视频与最新直播咨询
- 🗳 福利三:获取垂类场景预训练模型集合,包括工业、安防、交通等5+行业场景
- 🗂 福利四:获取10+全流程产业实操范例,覆盖火灾烟雾检测、人流量计数等产业高频场景
- 入群福利 💎:获取PaddleDetection团队整理的重磅学习大礼包🎁
Architectures | Backbones | Components | Data Augmentation |
Object DetectionInstance SegmentationFace DetectionMulti-Object-TrackingKeyPoint-Detection |
Details
|
Common
KeyPoint
FPN
Loss
Post-processing
Speed
|
Details
|
云端模型性能对比
各模型结构和骨干网络的代表模型在COCO数据集上精度mAP和单卡Tesla V100上预测速度(FPS)对比图。
说明:
ViT
为ViT-Cascade-Faster-RCNN
模型,COCO数据集mAP高达55.7%Cascade-Faster-RCNN
为Cascade-Faster-RCNN-ResNet50vd-DCN
,PaddleDetection将其优化到COCO数据mAP为47.8%时推理速度为20FPSPP-YOLOE
是对PP-YOLO v2
模型的进一步优化,在COCO数据集精度51.6%,Tesla V100预测速度78.1FPSPP-YOLOE+
是对PPOLOE
模型的进一步优化,在COCO数据集精度53.3%,Tesla V100预测速度78.1FPSYOLOX
和YOLOv5
均为基于PaddleDetection复现算法- 图中模型均可在模型库中获取
移动端模型性能对比
各移动端模型在COCO数据集上精度mAP和高通骁龙865处理器上预测速度(FPS)对比图。
说明:
- 测试数据均使用高通骁龙865(4*A77 + 4*A55)处理器batch size为1, 开启4线程测试,测试使用NCNN预测库,测试脚本见MobileDetBenchmark
- PP-PicoDet及PP-YOLO-Tiny为PaddleDetection自研模型,其余模型PaddleDetection暂未提供
1. 通用检测
PP-YOLOE+系列 推荐场景:Nvidia V100, T4等云端GPU和Jetson系列等边缘端设备
模型名称 | COCO精度(mAP) | V100 TensorRT FP16速度(FPS) | 配置文件 | 模型下载 |
---|---|---|---|---|
PP-YOLOE+_s | 43.9 | 333.3 | 链接 | 下载地址 |
PP-YOLOE+_m | 50.0 | 208.3 | 链接 | 下载地址 |
PP-YOLOE+_l | 53.3 | 149.2 | 链接 | 下载地址 |
PP-YOLOE+_x | 54.9 | 95.2 | 链接 | 下载地址 |
PP-PicoDet系列 推荐场景:ARM CPU(RK3399, 树莓派等) 和NPU(比特大陆,晶晨等)移动端芯片和x86 CPU设备
模型名称 | COCO精度(mAP) | 骁龙865 四线程速度(ms) | 配置文件 | 模型下载 |
---|---|---|---|---|
PicoDet-XS | 23.5 | 7.81 | 链接 | 下载地址 |
PicoDet-S | 29.1 | 9.56 | 链接 | 下载地址 |
PicoDet-M | 34.4 | 17.68 | 链接 | 下载地址 |
PicoDet-L | 36.1 | 25.21 | 链接 | 下载地址 |
模型名称 | COCO精度(mAP) | V100 TensorRT FP16速度(FPS) | 配置文件 | 模型下载 |
---|---|---|---|---|
YOLOX-l | 50.1 | 107.5 | 链接 | 下载地址 |
YOLOv5-l | 48.6 | 136.0 | 链接 | 下载地址 |
YOLOv7-l | 51.0 | 135.0 | 链接 | 下载地址 |
其他通用检测模型 文档链接
2. 实例分割
模型名称 | 模型简介 | 推荐场景 | COCO精度(mAP) | 配置文件 | 模型下载 |
---|---|---|---|---|---|
Mask RCNN | 两阶段实例分割算法 | 云边端 | box AP: 41.4 mask AP: 37.5 |
链接 | 下载地址 |
Cascade Mask RCNN | 两阶段实例分割算法 | 云边端 | box AP: 45.7 mask AP: 39.7 |
链接 | 下载地址 |
SOLOv2 | 轻量级单阶段实例分割算法 | 云边端 | mask AP: 38.0 | 链接 | 下载地址 |
3. 关键点检测
模型名称 | 模型简介 | 推荐场景 | COCO精度(AP) | 速度 | 配置文件 | 模型下载 |
---|---|---|---|---|---|---|
HRNet-w32 + DarkPose | top-down 关键点检测算法 输入尺寸384x288 |
云边端 |
78.3 | T4 TensorRT FP16 2.96ms | 链接 | 下载地址 |
HRNet-w32 + DarkPose | top-down 关键点检测算法 输入尺寸256x192 |
云边端 | 78.0 | T4 TensorRT FP16 1.75ms | 链接 | 下载地址 |
PP-TinyPose | 轻量级关键点算法 输入尺寸256x192 |
移动端 | 68.8 | 骁龙865 四线程 6.30ms | 链接 | 下载地址 |
PP-TinyPose | 轻量级关键点算法 输入尺寸128x96 |
移动端 | 58.1 | 骁龙865 四线程 2.37ms | 链接 | 下载地址 |
其他关键点检测模型 文档链接
4. 多目标跟踪PP-Tracking
模型名称 | 模型简介 | 推荐场景 | 精度 | 配置文件 | 模型下载 |
---|---|---|---|---|---|
ByteTrack | SDE多目标跟踪算法 仅包含检测模型 | 云边端 | MOT-17 half val: 77.3 | 链接 | 下载地址 |
FairMOT | JDE多目标跟踪算法 多任务联合学习方法 | 云边端 | MOT-16 test: 75.0 | 链接 | 下载地址 |
OC-SORT | SDE多目标跟踪算法 仅包含检测模型 | 云边端 | MOT-17 half val: 75.5 | 链接 | - |
其他多目标跟踪模型 文档链接
5. 产业级实时行人分析工具PP-Human
任务 | 端到端速度(ms) | 模型方案 | 模型体积 |
---|---|---|---|
行人检测(高精度) | 25.1ms | 目标检测 | 182M |
行人检测(轻量级) | 16.2ms | 目标检测 | 27M |
行人跟踪(高精度) | 31.8ms | 多目标跟踪 | 182M |
行人跟踪(轻量级) | 21.0ms | 多目标跟踪 | 27M |
属性识别(高精度) | 单人8.5ms | 目标检测 属性识别 |
目标检测:182M 属性识别:86M |
属性识别(轻量级) | 单人7.1ms | 目标检测 属性识别 |
目标检测:182M 属性识别:86M |
摔倒识别 | 单人10ms | 多目标跟踪 关键点检测 基于关键点行为识别 |
多目标跟踪:182M 关键点检测:101M 基于关键点行为识别:21.8M |
闯入识别 | 31.8ms | 多目标跟踪 | 182M |
打架识别 | 19.7ms | 视频分类 | 90M |
抽烟识别 | 单人15.1ms | 目标检测 基于人体id的目标检测 |
目标检测:182M 基于人体id的目标检测:27M |
打电话识别 | 单人ms | 目标检测 基于人体id的图像分类 |
目标检测:182M 基于人体id的图像分类:45M |
点击模型方案中的模型即可下载指定模型
详细信息参考文档
6. 产业级实时车辆分析工具PP-Vehicle
任务 | 端到端速度(ms) | 模型方案 | 模型体积 |
---|---|---|---|
车辆检测(高精度) | 25.7ms | 目标检测 | 182M |
车辆检测(轻量级) | 13.2ms | 目标检测 | 27M |
车辆跟踪(高精度) | 40ms | 多目标跟踪 | 182M |
车辆跟踪(轻量级) | 25ms | 多目标跟踪 | 27M |
车牌识别 | 4.68ms | 车牌检测 车牌识别 |
车牌检测:3.9M 车牌字符识别: 12M |
车辆属性 | 7.31ms | 属性识别 | 7.2M |
点击模型方案中的模型即可下载指定模型
详细信息参考文档
-
参数配置
-
模型压缩(基于PaddleSlim)
-
进阶开发
-
【理论基础】目标检测7日打卡营: 目标检测任务综述、RCNN系列目标检测算法详解、YOLO系列目标检测算法详解、PP-YOLO优化策略与案例分享、AnchorFree系列算法介绍和实践
-
【产业实践】AI快车道产业级目标检测技术与应用: 目标检测超强目标检测算法矩阵、实时行人分析系统PP-Human、目标检测产业应用全流程拆解与实践
-
【行业特色】2022.3.26 智慧城市行业七日课: 城市规划、城市治理、智慧政务、交通管理、社区治理
- PaddleDetection在Windows下的部署(一)
- PaddleDetection在Windows下的部署(二)
- Jetson Nano上部署PaddleDetection经验分享
- 安全帽检测YOLOv3模型在树莓派上的部署
- 使用SSD-MobileNetv1完成一个项目--准备数据集到完成树莓派部署
版本更新内容请参考版本更新文档
我们非常欢迎你可以为PaddleDetection提供代码,也十分感谢你的反馈。
- 感谢Mandroide清理代码并且统一部分函数接口。
- 感谢FL77N贡献
Sparse-RCNN
模型。 - 感谢Chen-Song贡献
Swin Faster-RCNN
模型。 - 感谢yangyudong, hchhtc123 开发PP-Tracking GUI界面
- 感谢Shigure19 开发PP-TinyPose健身APP
- 感谢manangoel99贡献Wandb可视化方式
@misc{ppdet2019,
title={PaddleDetection, Object detection and instance segmentation toolkit based on PaddlePaddle.},
author={PaddlePaddle Authors},
howpublished = {\url{https://github.com/PaddlePaddle/PaddleDetection}},
year={2019}
}