PP-OCRv5_mobile_rec 模型转 TFLite 完整教程

PP-OCRv5_mobile_rec 模型转 TFLite 完整教程

一、环境准备

1. 创建虚拟环境

cmd

# 创建虚拟环境(命名为 ocr_convert_env)
python -m venv ocr_convert_env
# 激活虚拟环境(Windows CMD)
ocr_convert_env\Scripts\activate.bat
# 激活虚拟环境(Windows PowerShell)
ocr_convert_env\Scripts\Activate.ps1

2. 安装核心依赖

cmd

# 安装 TensorFlow 2.13.0(稳定版)
pip install tensorflow==2.13.0

# 安装 ONNX 相关工具

pip install onnx==1.14.0 onnxruntime==1.15.0 onnxsim==0.4.33
# 安装 onnx2tf(用于 ONNX → TensorFlow 转换)
pip install onnx2tf==1.15.1 psutil

二、模型转换流程

1. 准备 Paddle 静态图模型

确保已获取 PP-OCRv5_mobile_rec 的 Paddle 静态图模型,目录结构如下:

plaintext

PP-OCRv5_mobile_rec_infer/

├── inference.pdiparams

├── inference.pdiparams.info

└── inference.pdmodel

2. Paddle 静态图 → ONNX

使用 paddle2onnx 将 Paddle 静态图模型转换为 ONNX 模型:

cmd

paddle2onnx \
    --model_dir ./PP-OCRv5_mobile_rec_infer \
    --model_filename inference.pdmodel \
    --params_filename inference.pdiparams \
    --save_file ./PP-OCRv5_mobile_rec_infer.onnx \
    --opset_version 11 \
    --input_shape_dict="{'x':[1,3,48,320]}"

3. 简化 ONNX 模型

使用 onnxsim 简化 ONNX 模型,固定输入形状:

cmd

onnxsim ./PP-OCRv5_mobile_rec_infer.onnx ./PP-OCRv5_mobile_rec_infer_simplified.onnx --overwrite-input-shape "x:1,3,48,320"

4. ONNX → TFLite(使用 onnx2tf)

使用 onnx2tf 直接将 ONNX 模型转换为 TFLite 模型:

cmd

onnx2tf -i ./PP-OCRv5_mobile_rec_infer_simplified.onnx -o ./rec_v5_savedmodel -ois "x:1,3,48,320"

5. 检查转换结果

转换成功后,在 ./rec_v5_savedmodel 目录下会生成两个 TFLite 模型:

model_float32.tflite(单精度浮点型)

model_float16.tflite(半精度浮点型)

三、常见问题及解决方案

1. 依赖冲突

问题:安装依赖时出现版本冲突。解决方案:使用虚拟环境,严格控制版本,推荐使用本文指定的版本组合。

2. onnxruntime 版本找不到

问题:ERROR: Could not find a version that satisfies the requirement onnxruntime==1.14.1解决方案:使用镜像中可用的版本,如 onnxruntime==1.15.0。

3. onnx2tf 转换卡住

问题:转换过程中卡在 "Model convertion started"。解决方案:

等待一段时间,模型转换可能耗时较长。

使用 -n 参数启用详细日志,查看转换进度。

尝试降低 onnx2tf 版本,如 onnx2tf==1.15.1。

4. SavedModel 文件不存在

问题:OSError: SavedModel file does not exist at: ./rec_v5_savedmodel\{saved_model.pbtxt|saved_model.pb}解决方案:

检查 onnx2tf 转换是否成功,是否生成了 TFLite 模型。

模型包含 GroupConvolution 时,onnx2tf 可能只生成 TFLite 模型,不生成 SavedModel。

5. Docker 拉取镜像失败

问题:网络连接问题导致 Docker 拉取镜像失败。解决方案:

配置国内 Docker 镜像源。

使用本地环境进行转换。

四、输出结果说明

1. TFLite 模型

Float32 模型:精度较高,适合对精度要求高的场景。

Float16 模型:模型体积更小,推理速度更快,适合资源受限的设备。

2. SavedModel(可选)

如果需要 SavedModel,可以使用以下命令:

cmd

onnx2tf -i ./PP-OCRv5_mobile_rec_infer_simplified.onnx -o ./rec_v5_savedmodel -ois "x:1,3,48,320" --disable_group_convolution

五、使用 TFLite 模型

1. Android 平台

将 TFLite 模型放入 Android 项目的 assets 目录,使用 TensorFlow Lite Android 支持库加载和推理。

2. iOS 平台

将 TFLite 模型放入 iOS 项目,使用 TensorFlow Lite iOS 支持库加载和推理。

3. Python 平台

使用 TensorFlow Lite Python 支持库加载和推理:

python运行

import tensorflow as tf
# 加载 TFLite 模型
interpreter = tf.lite.Interpreter(model_path="./rec_v5_savedmodel/model_float32.tflite")
interpreter.allocate_tensors()
# 获取输入输出张量
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# 准备输入数据(示例)
input_data = np.random.rand(1, 3, 48, 320).astype(np.float32)
# 设置输入数据
interpreter.set_tensor(input_details[0]['index'], input_data)
# 执行推理
interpreter.invoke()
# 获取输出结果
output_data = interpreter.get_tensor(output_details[0]['index'])

六、总结

本教程详细介绍了从 Paddle 静态图模型到 TFLite 模型的完整转换流程,包括环境准备、模型转换、常见问题解决方案和 TFLite 模型使用方法。通过本教程,可以快速将 PP-OCRv5_mobile_rec 模型转换为 TFLite 模型,用于移动设备和边缘设备的 OCR 应用。

关键步骤:

创建虚拟环境,安装核心依赖。

使用 paddle2onnx 将 Paddle 模型转换为 ONNX 模型。

使用 onnxsim 简化 ONNX 模型,固定输入形状。

使用 onnx2tf 将 ONNX 模型转换为 TFLite 模型。

检查转换结果,使用生成的 TFLite 模型进行推理。

通过严格按照本教程操作,可以避免大多数转换过程中的问题,顺利获得可用的 TFLite 模型。