美文网首页
Paddle模型转换

Paddle模型转换

作者: samychen | 来源:发表于2023-06-22 20:36 被阅读0次

    Paddle模型转PaddleLite模型
    一、标准模型格式
    PaddlePaddle 模型有两种保存格式:
    Combined Param :所有参数信息保存在单个文件params中,模型的拓扑信息保存在model文件中。
    Seperated Param:参数信息分开保存在多个参数文件中,模型的拓扑信息保存在model文件中
    通过opt导出工具可以直接导出

    #Seperated Param
    ./opt --model_dir=./mobilenet_v1 --valid_targets=x86 --optimize_out_type=naive_buffer --optimize_out=mobilenet_v1_opt
    
    #Combined Param
    ./opt --model_file=./mobilenet_v1/__model__ --param_file=./mobilenet_v1/params --valid_targets=x86 --optimize_out_type=naive_buffer --optimize_out=mobilenet_v1_opt
    

    二、预训练模型格式
    1、转inference 模型

    #下载预训练模型
    wget -P ./product_pretrain/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/product_ResNet50_vd_Aliproduct_v1.0_pretrained.pdparams
    
    #转换为inference模型
    # -c 后面设置训练算法的 yml 配置文件
    # -o 配置可选参数
    # Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt 或 .pdparams。
    # Global.save_inference_dir 参数设置转换的模型将保存的地址。
    python3 tools/export_model.py -c ppcls/configs/Products/ResNet50_vd_Aliproduct.yaml -o Global.pretrained_model=./product_pretrain/product_ResNet50_vd_Aliproduct_v1.0_pretrained -o Global.save_inference_dir=./deploy/models/product_ResNet50_vd_aliproduct_v1.0_infer
    

    转换成功后目录
    ├── product_ResNet50_vd_aliproduct_v1.0_infer
    │ ├── inference.pdiparams # 识别 inference 模型的参数文件
    │ ├── inference.pdiparams.info # 识别 inference 模型的参数信息,可忽略
    │ └── inference.pdmodel # 识别 inference 模型的 program 文件

    PaddleGAN项目脚本和PaddleCls脚本不太一样,具体参数不同

    python3 -u tools/export_model.py -c configs/stylegan_v2_256_ffhq.yaml  --load stylegan2-ffhq-config-f-directions.pdparams --inputs_size="1,1,512;1,1" 
    

    2、inference模型转nb模型
    通过opt工具转化nb模型

    ./opt --model_file=./inference.pdmodel --param_file=./inference.pdiparams --valid_targets=x86 --optimize_out_type=naive_buffer --optimize_out=product_ResNet50_vd_aliproduct_v1_opt
    

    转化过程如果有不支持的op会提示失败,因为Paddle支持的op目前PaddleLite不支持,需要将不支持的op对应的架构版本源码编写测试通过后重新编译PaddleLite和opt工具

    Error: This model is not supported, because 1 ops are not supported on 'x86'. These unsupported ops are: 'matmul_v2'.
    

    查看所有架构支持的op

    ./opt --print_all_ops=true 
    

    查看x86支持的op

    ./opt --print_supported_ops=true --valid_targets=x86
    

    将系统架构改为opencl可以转换成功

    ./opt --model_file=./inference.pdmodel --param_file=./inference.pdiparams --valid_targets=opencl --optimize_out_type=naive_buffer --optimize_out=product_ResNet50_vd_aliproduct_v1_opt
    

    Paddle模型转ONNX

    通过pip安装paddle2onnx

    pip install paddle2onnx
    

    转换命令

    paddle2onnx \
        --model_dir [model dir] \
        --model_filename [model filename] \
        --params_filename [params filename] \
        --save_file [save file] \
        --opset_version [opset version]
    

    支持的op列表

    https://paddle-lite.readthedocs.io/zh/latest/quick_start/support_operation_list.html

    相关文章

      网友评论

          本文标题:Paddle模型转换

          本文链接:https://www.haomeiwen.com/subject/dqryedtx.html