Paddle模型转换
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