PaddleDetection模型支持保存为ONNX格式,目前测试支持的列表如下
模型 | OP版本 | 备注 |
---|---|---|
YOLOv3 | 11 | 仅支持batch=1推理;模型导出需固定shape |
PP-YOLO | 11 | 仅支持batch=1推理;MatrixNMS将被转换NMS,精度略有变化;模型导出需固定shape |
PP-YOLOv2 | 11 | 仅支持batch=1推理;MatrixNMS将被转换NMS,精度略有变化;模型导出需固定shape |
PP-YOLO Tiny | 11 | 仅支持batch=1推理;模型导出需固定shape |
PP-YOLOE | 11 | 仅支持batch=1推理;模型导出需固定shape |
PP-PicoDet | 11 | 仅支持batch=1推理;模型导出需固定shape |
FCOS | 11 | 仅支持batch=1推理 |
PAFNet | 11 | - |
TTFNet | 11 | - |
SSD | 11 | 仅支持batch=1推理 |
PP-TinyPose | 11 | - |
Faster RCNN | 16 | 仅支持batch=1推理, 依赖0.9.7及以上版本 |
Mask RCNN | 16 | 仅支持batch=1推理, 依赖0.9.7及以上版本 |
Cascade RCNN | 16 | 仅支持batch=1推理, 依赖0.9.7及以上版本 |
Cascade Mask RCNN | 16 | 仅支持batch=1推理, 依赖0.9.7及以上版本 |
保存ONNX的功能由Paddle2ONNX提供,如在转换中有相关问题反馈,可在Paddle2ONNX的Github项目中通过ISSUE与工程师交流。
导出步骤参考文档PaddleDetection部署模型导出教程, 导出示例如下
cd PaddleDetection
python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml \
-o weights=https://paddledet.bj.bcebos.com/models/yolov3_darknet53_270e_coco.pdparams \
TestReader.inputs_def.image_shape=[3,608,608] \
--output_dir inference_model
导出后的模型保存在inference_model/yolov3_darknet53_270e_coco/
目录中,结构如下
yolov3_darknet
├── infer_cfg.yml # 模型配置文件信息
├── model.pdiparams # 静态图模型参数
├── model.pdiparams.info # 参数额外信息,一般无需关注
└── model.pdmodel # 静态图模型文件
注意导出时的参数
TestReader.inputs_def.image_shape
,对于YOLO系列模型注意导出时指定该参数,否则无法转换成功
RCNN系列模型导出ONNX模型时,需要去除模型中的控制流,因此需要额外添加export_onnx=True
字段
cd PaddleDetection
python tools/export_model.py -c configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.yml \
-o weights=https://paddledet.bj.bcebos.com/models/faster_rcnn_r50_fpn_1x_coco.pdparams \
export_onnx=True \
--output_dir inference_model
导出的模型保存在inference_model/faster_rcnn_r50_fpn_1x_coco/
目录中,结构如下
faster_rcnn_r50_fpn_1x_coco
├── infer_cfg.yml # 模型配置文件信息
├── model.pdiparams # 静态图模型参数
├── model.pdiparams.info # 参数额外信息,一般无需关注
└── model.pdmodel # 静态图模型文件
安装Paddle2ONNX(高于或等于0.9.7版本)
pip install paddle2onnx
使用如下命令转换
# YOLOv3
paddle2onnx --model_dir inference_model/yolov3_darknet53_270e_coco \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--opset_version 11 \
--save_file yolov3.onnx
# Faster RCNN
paddle2onnx --model_dir inference_model/faster_rcnn_r50_fpn_1x_coco \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--opset_version 16 \
--save_file faster_rcnn.onnx
转换后的模型即为在当前路径下的yolov3.onnx
和faster_rcnn.onnx
安装onnxruntime
pip install onnxruntime
推理代码示例在deploy/third_engine/onnx下
使用如下命令进行推理:
# YOLOv3
python deploy/third_engine/onnx/infer.py
--infer_cfg inference_model/yolov3_darknet53_270e_coco/infer_cfg.yml \
--onnx_file yolov3.onnx \
--image_file demo/000000014439.jpg
# Faster RCNN
python deploy/third_engine/onnx/infer.py
--infer_cfg inference_model/faster_rcnn_r50_fpn_1x_coco/infer_cfg.yml \
--onnx_file faster_rcnn.onnx \
--image_file demo/000000014439.jpg
Paddle2ONNX已经支持导出TensorRT DynamicBatchNMS插件。开发者在导出类似PPYOLOE+、PPYOLOE、YOLOv3、YOLOX、PicoDet等模型,Paddle2ONNX会自动将其中的NMS转成DynamicBatchNMS,从而实现GPU的后处理,大幅提升端到端的部署性能。
导出过程需要注意以下几点:
--deploy_backend tensorrt
此方式导出的模型支持批量预测。
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》