资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

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系列 - 适配中 -
上一篇
PaddlePaddle模型部署
下一篇
常见操作和工具