Paddle_Lite使用opt工具优化模型

环境

paddlepaddle:2.6.2

paddle-lite:v2.13-rc  (opt版本需要与llite版本保持一致)

paddleOcr:release/2.7

硬件:ARMv8  cpu:hisi mix210

(后续有其它文章介绍该硬件的运行环境下运行paddlelite以及交叉编译)

参考资料

python 调用 opt 转化模型-PaddlePaddle深度学习平台

PaddleOCR/deploy/lite/readme_ch.md at release/2.7 · PaddlePaddle/PaddleOCR

下载模型

如果不想自己手动优化的话模型文件可以官方教程中下载。(运行时可能会报错PaddleLite版本与opt优化模型的版本不一致可能导致运行失败,最好还是自己opt优化推理模型)

模型下载:
PaddleOCR/doc/doc_ch/models_list.md at release/2.7 · PaddlePaddle/PaddleOCR

安装opt

pip install paddlelite

默认下载v2.13-rc版本

测试发现下载其它版本失败:

pip install paddlelite==2.10

查看版本:

执行opt优化

#转换检测模型

paddle_lite_opt --model_file=./ch_PP-OCRv3_det_infer/inference.pdmodel  --param_file=./ch_PP-OCRv3_det_infer/inference.pdiparams  --optimize_out=./ch_PP-OCRv3_det_opt --valid_targets=arm  --optimize_out_type=naive_buffer

# 转换识别模型

paddle_lite_opt --model_file=./ch_PP-OCRv3_rec_infer/inference.pdmodel  --param_file=./ch_PP-OCRv3_rec_infer/inference.pdiparams  --optimize_out=./ch_PP-OCRv3_rec_opt --valid_targets=arm  --optimize_out_type=naive_buffer

# 转换方向分类器模型

paddle_lite_opt --model_file=./ch_ppocr_mobile_v2.0_cls_infer/inference.pdmodel  --param_file=./ch_ppocr_mobile_v2.0_cls_infer/inference.pdiparams  --optimize_out=./ch_ppocr_mobile_v2.0_cls_opt --valid_targets=arm  --optimize_out_type=naive_buffer

生成nb文件

(注:测试paddle_lite运行时发现png格式图片无法识别,jpg、bmp格式均可)

其它指令

paddle_lite_opt \
    --model_dir=<model_param_dir> \
    --model_file=<model_path> \
    --param_file=<param_path> \
    --optimize_out_type=(protobuf|naive_buffer) \
    --optimize_out=<output_optimize_model_dir> \
    --valid_targets=(arm|opencl|x86|npu|xpu|huawei_ascend_npu|imagination_nna|intel_fpga)\
    --enable_fp16=(true|false) \
    --quant_model=(true|false) \
    --quant_type=(QUANT_INT16|QUANT_INT8) 
选项说明
--model_dir待优化的 PaddlePaddle 模型(非 combined 形式)的路径
--model_file待优化的 PaddlePaddle 模型( combined 形式)的网络结构文件路径。
--param_file待优化的 PaddlePaddle 模型( combined 形式)的权重文件路径。
--optimize_out_type输出模型类型,目前支持两种类型:protobuf 和 naive_buffer,其中 naive_buffer 是一种更轻量级的序列化/反序列化实现。若您需要在 mobile 端执行模型预测,请将此选项设置为 naive_buffer。默认为 protobuf。
--optimize_out优化模型的输出路径。
--valid_targets指定模型可执行的 backend,默认为 arm。可以同时指定多个 backend (以逗号分隔),opt 将会自动选择最佳方式。如果需要支持华为 NPU(Kirin 810/990 Soc 搭载的达芬奇架构 NPU),应当设置为 "npu,arm"。
--enable_fp16设置是否使用 opt 中的 Float16 低精度量化功能,Float16 量化会提高速度提高、降低内存占用,但预测精度会有降低
--quant_model设置是否使用 opt 中的动态离线量化功能。
--quant_type指定 opt 中动态离线量化功能的量化类型,可以设置为 QUANT_INT8 和 QUANT_INT16,即分别量化为8比特和16比特。 量化为 int8 对模型精度有一点影响,模型体积大概减小4倍。量化为 int16 对模型精度基本没有影,模型体积大概减小2倍。
  • 如果待优化的 fluid 模型是非 combined 形式,请设置--model_dir,忽略--model_file--param_file

  • 如果待优化的 fluid 模型是 combined 形式,请设置--model_file--param_file,忽略--model_dir

  • naive_buffer的优化后模型为以.nb名称结尾的单个文件。

  • protobuf的优化后模型为文件夹下的modelparams两个文件。将model重命名为__model__Netron打开,即可查看优化后的模型结构。

  • 删除prefer_int8_kernel的输入参数,opt自动判别是否是量化模型,进行相应的优化操作。

  • opt中的动态离线量化功能和PaddleSlim中动态离线量化功能相同,opt提供该功能是为了用户方便使用。

INT8精度优化

paddle_lite_opt --model_file=./ch_PP-OCRv3_rec_slim_infer/inference.pdmodel \
                --param_file=./ch_PP-OCRv3_rec_slim_infer/inference.pdiparams \
                --optimize_out=./ch_PP-OCRv3_rec_slim_INT8_opt \
                --valid_targets=arm \
                --optimize_out_type=naive_buffer \
                --quant_model true \
                --quant_type=QUANT_INT8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值