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.ps12. 安装核心依赖
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 模型。