PaddleX模型部署
PaddleX模型部署
简介
模型训练
模型导出
模型部署
PaddleX模型支持列表
简介
PaddleX是飞桨全流程开发工具,集飞桨核心框架、模型库、工具及组件等深度学习开发所需全部能力于一身,打通深度学习开发全流程,并提供简明易懂的Python API,方便用户根据实际生产需求进行直接调用或二次开发,为开发者提供飞桨全流程开发的最佳实践。目前,该工具代码已开源于GitHub,同时可访问PaddleX在线使用文档,快速查阅读使用教程和API文档说明。 PaddleX代码GitHub链接:https://github.com/PaddlePaddle/PaddleX/tree/develop PaddleX文档链接:https://paddlex.readthedocs.io/zh_CN/develop/index.html PaddleX官网链接:https://www.paddlepaddle.org.cn/paddle/paddlex PaddleX用户QQ群: 1045148026
模型训练
PaddleX平台提供了模型训练完整的示例教程,可以通过AIStudio一站式开发平台,快速在线运行PaddleX的项目。详情参考:https://aistudio.baidu.com/aistudio/projectdetail/450925 ,本教程以YOLOv3目标检测为例,举例说明模型部署流程。
YOLOv3目标检测项目地址:https://aistudio.baidu.com/aistudio/projectdetail/442375
模型导出
Edgeboard使用的预测库为PaddleLite,但是Edgeboard支持paddle inference格式的模型,因此在Edgeboard上部署模型时需要将训练过程中保存的模型导出为inference格式模型,
使用paddlepaddle2.0以下版本训练(不支持paddlepaddle2.0及以上版本训练的模型),导出的inference格式模型包括__model__
、__params__
、model.yml
三个文件;检查使用PaddleX训练好的模型文件,一般存在与best_model文件夹下,如果该文件夹下是model.pdparams,model.pdmodel,model.yml三个文件时,就需要进行模型转换,转换命令如下:
paddlex --export_inference --model_dir=/home/aistudio/output/yolov3_darknet53/best_model --save_dir=./inference_model --fixed_input_shape=[416,416]
参数 | 说明 |
---|---|
--export_inference | 是否将模型导出为用于部署的inference格式,指定即为True |
--model_dir | 待导出的模型路径 |
--save_dir | 导出的模型存储路径 |
--fixed_input_shape | 固定导出模型的输入大小,默认值为None |
使用TensorRT预测时,需固定模型的输入大小,通过--fixed_input_shape
来制定输入大小[w,h]。
注意:
- Edgeboard支持的是固定输入大小的模型,所以在导出模型时必须指定输入大小。
- 分类模型的固定输入大小请保持与训练时的输入大小一致;
- 检测模型模型中YOLO系列请保存w与h一致,且为32的倍数大小;RCNN类无此限制,按需设定即可
- 指定[w,h]时,w和h中间逗号隔开,不允许存在空格等其他字符。
- 需要注意的,w,h设得越大,模型在预测过程中所需要的耗时和内存/显存占用越高;设得太小,会影响模型精度
更多模型转换详情参考PaddleX官方文档:https://paddlex.readthedocs.io/zh_CN/develop/deploy/export_model.html
模型部署
基于Edgeboard 1.8.0示例模型部署
上传模型
模型训练完成后,将模型文件上传到Edgeboard内,存放于/home/root/workspace/PaddleLiteDemo/res/models
选择与模型相对应的文件夹,比如yolov3模型存放在detection目录,模型文件中需要包含于示例对应的文件,包括
model
, params
:模型文件(paddlepaddle版本不同,训练出的模型名称或有差别,只要在config.json中对应上即可)
label_list.txt
:模型标签文件
img
:放置预测图片的文件夹
config.json
:配置文件,需要基于示例给出的结构,更改为自训练模型的参数
修改模型配置文件参数
config.json文件内容如下:
{
"network_type":"YOLOV3",
"model_file_name":"model",
"params_file_name":"params",
"labels_file_name":"label_list.txt",
"format":"RGB",
"input_width":608,
"input_height":608,
"mean":[123.675, 116.28, 103.53],
"scale":[0.0171248, 0.017507, 0.0174292],
"threshold":0.3
}
注意:config.json文件内的mean、scale计算方式与训练模型时的计算方式可能不同,一般有如下两种方式:
例如R为一张图片中一个像素点的R通道的值
①(R / 255 – mean‘) / std’
②(R – mean) * scale(EdgeBoard处理方式)
如果训练模型的mean和std为第一种计算方式,就需要通过如下运算,计算为Edgeboard的处理方式。
edgeboard中的mean值 = mean‘ * 255
Edgeboard中的scale值 = 1 / ( 255 * std’ )
修改系统参数配置文件
系统配置文件存放于/home/root/workspace/PaddleLiteDemo/configs
内,根据模型属性修改对应的配置文件,比如yolov3模型,修改image.json文件中模型文件路径以及预测图片路径。
{
"model_config": "../../res/models/detection/yolov3",
"input": {
"type": "image",
"path": "../../res/models/detection/yolov3/img/screw.jpg"
},
"debug": {
"display_enable": true,
"predict_log_enable": true,
"predict_time_log_enable": false
}
}
具体参数说明请参见1.8.0版本模型预测示例。
执行程序
模型配置文件和系统配置文件修改完成后,运行程序
cd /home/root/workspace/PaddleLiteDemo/C++/build
./detection ../../configs/detection/yolov3/image.json
PaddleX模型支持列表
类别 | PaddleX模型 | 输入尺寸 | Edgeboard支持情况 | FZ9推理时间 |
---|---|---|---|---|
分类 | MobilenetV1 | 224x224 | 支持 | 7.36ms |
分类 | MobilenetV2 | 224x224 | 支持 | 10.56ms |
分类 | Res18 | 224x224 | 支持 | 6.58ms |
分类 | Res34 | 224x224 | 支持 | 11.28ms |
分类 | Res50 | 224x224 | 支持 | 17.58ms |
分类 | Res50_vd | 224x224 | 支持 | 18.55ms |
分类 | Res50_vd_ssld | 224x224 | 支持 | 18.56ms |
分类 | Res101 | 224x224 | 支持 | 29.82ms |
分类 | Res101_vd | 224x224 | 支持 | 30.78ms |
分类 | Res101_vd_ssld | 224x224 | 支持 | 30.79ms |
分类 | DenseNet121 | 224x224 | 支持 | 46.01ms |
分类 | DenseNet161 | 224x224 | 支持 | 90.29ms |
分类 | DenseNet201 | 224x224 | 支持 | 78.20ms |
分类 | HRNet_W18 | 224x224 | 支持 | 50.34ms |
分类 | Xception41 | 224x224 | 支持 | 68.18ms |
分类 | Xception65 | 224x224 | 支持 | 60.99ms |
分类 | ShuffleNetV2 | 224x224 | 不支持 | - |
分类 | AlexNet | 224x224 | 不支持 | - |
分类 | MobilenetV3 | 224x224 | 适配中 | - |
检测 | YOLOV3-Darknet53 | 608x608 | 支持 | 129.29ms |
检测 | YOLOV3-Res34 | 608x608 | 支持 | 79.58ms |
检测 | YOLOV3-MobilenetV1 | 608x608 | 支持 | 77.12ms |
检测 | YOLOV3-MobilenetV3_large | 608x608 | 不支持 | - |
检测 | FasterRCNN系列 | - | 适配中 | - |
检测 | PPYOLO | - | 不支持 | - |
分割 | deeplabv3P_MobileNetV2_x1.0 | - | 支持 | - |
分割 | MaskRCNN系列 | - | 适配中 | - |