PaddleOCR的Pytorch推理模块

概述

在项目中,遇到文字识别OCR的使用场景。

然而,目前效果最好的PaddleOCR只能用百度的PaddlePaddle框架运行。

常见项目中,往往使用更普遍的Pytorch框架,单独安装PaddlePaddle不仅会让项目过于臃肿,而且可能存在冲突问题。

在前文拆解MinerU结构时,发现其用了基于PaddleOCR2Pytorch项目转换的PaddleOCR-v4的torch版本。

于是将此部分单独提取出来,做了一些解耦优化,单独构建了一个仓库,方便和其它项目进行集成。

仓库地址:https://github.com/zstar1003/PaddleOCR-Torch-Infer

所用模型

  • 检测模型:ch_PP-OCRv4_det_infer.pth

  • 识别模型:ch_PP-OCRv4_rec_infer.pth

  • 字典文件:ppocr_keys_v1.txt

使用方法

安装依赖

  1. 安装uv包管理器

建议使用uv来管理依赖环境,若未安装uv,可通过pip进行安装:

pip install uv
  1. 创建虚拟环境
uv venv --python 3.10
  1. 激活虚拟环境
.\.venv\Scripts\activate
  1. 根据uv.lock安装依赖
uv sync

命令行参数

  • --data_path必需参数,指定输入图片路径或目录路径
  • --save_path可选参数,指定保存结果的路径或目录
  • --show_confidence可选参数,是否在结果图像中显示置信度(默认不显示)

单图片处理

python infer.py --data_path test_img/general_ocr_rec_001.png --save_path output/result.png

目录批量处理

python infer.py --data_path test_img --save_path output

识别效果展示

中文识别

英文识别

中文繁体

PP-OCRv5前瞻

PP-OCRv5简介

有意思的是,当我昨天写完准备发这篇文章时,突然看见PP-OCRv5发布(上一次发布v4在2024.02.20)。

根据官方介绍[11,PP-OCRv5的主要有以下优势:

  • 1.单模型支持5种文字类型(简体中文、繁体中文、中文拼音、英文和日文)

  • 2.支持复杂手写体识别

  • 3.比上一版本PP-OCRv4,识别精度提升13个百分点

在业务多场景高难度文字识别评估集上的评估结果

不同场景的模型准确率

PP-OCRv5模型结构

根据模型的结构配置文件,可以看出,v5和v4的算法和Head部分没有显著差异,核心是修改了Backbone的网络结构。

v4-v5架构对比图

新的PPHGNetV2_B4结构在
ppocr\modeling\backbones\rec_pphgnetv2.py

理论上,用pytorch将该backbone重新实现,就可以进行模型转换。

于是Fork了PaddleOCR2Pytorch这个仓库,尝试用Agent帮我转换了一下。

仓库地址:https://github.com/zstar1003/PaddleOCR2Pytorch

结果发现,能够转换成pth文件,但存在不少参数对齐的问题。

捣鼓了一晚上,发觉还需要投入很多精力去深入了解、精调对其参数结构,遂放弃,等高人解决。

参考

1.PP-OCRv5官方文档:https://github.com/PaddlePaddle/PaddleOCR/blob/main/docs/version3.x/algorithm/PP-OCRv5/PP-OCRv5.md

2.PaddleOCR: https://github.com/PaddlePaddle/PaddleOCR)

3.PaddleOCR2Pytorch: https://github.com/frotms/PaddleOCR2Pytorch

4.MinerU: https://github.com/opendatalab/MinerU

### PaddleOCR与TensorRT集成及优化指南 #### 集成背景 PaddleOCR 是百度飞桨开源的一个高性能 OCR(光学字符识别)工具包,支持多种文字检测和识别算法。TensorRT 则是由 NVIDIA 提供的一款用于加速深度学习推理的 SDK,特别适合 GPU 上的大规模矩阵运算[^4]。 为了实现 PaddleOCR 和 TensorRT 的高效集成,可以按照以下方法进行操作: --- #### 1. 环境准备 在开始之前,需确保已安装 CUDA 和 cuDNN,并配置好 TensorRT 开发环境。具体可参考《TensorRT全流程部署指南》中的 cap1 文章,该部分详细描述了 CUDA 环境的搭建过程[^3]。 此外,还需要安装 PaddleOCR 所依赖的相关库以及 PyTorch 或 TensorFlow 版本的 TensorRT 绑定库。如果计划使用 Python API,则需要额外导入 `tensorrt` 库及其绑定模块[^2]。 --- #### 2. 模型转换 PaddleOCR 默认提供的是 PaddlePaddle 格式的模型文件 (.pdparams, .pdmodel)。要将其迁移到 TensorRT 中运行,通常需要先将模型导出为 ONNX (Open Neural Network Exchange) 格式,再通过 TensorRT 加载并解析。 以下是具体的转换步骤: ```python import paddle from paddleocr import PPStructure # 初始化 PaddleOCR 模型实例 structure = PPStructure() # 导出模型至 ONNX 文件 paddle.onnx.export(structure.model, path="paddle_ocr_model", input_spec=[paddle.static.InputSpec(shape=[None, 3, None, None], dtype='float32')]) ``` 完成上述代码后会生成名为 `paddle_ocr_model.onnx` 的中间表示文件[^1]。 --- #### 3. 使用 TensorRT 构建引擎 加载 ONNX 文件并通过 TensorRT 创建序列化后的执行引擎是一个重要环节。下面展示了一个简单的构建脚本示例: ```python import tensorrt as trt TRT_LOGGER = trt.Logger(trt.Logger.WARNING) def build_engine(onnx_file_path): builder = trt.Builder(TRT_LOGGER) network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) parser = trt.OnnxParser(network, TRT_LOGGER) with open(onnx_file_path, 'rb') as model: if not parser.parse(model.read()): for error in range(parser.num_errors): print(parser.get_error(error)) return None config = builder.create_builder_config() config.max_workspace_size = 1 << 30 # 设置最大显存占用大小为 1GB engine = builder.build_serialized_network(network, config) return engine engine = build_engine("paddle_ocr_model.onnx") with open("paddle_ocr_tensorrt.engine", "wb") as f: f.write(engine) ``` 这段程序实现了从 ONNX 至 TensorRT 引擎的转化逻辑。 --- #### 4. 性能优化建议 由于 TensorRT 更倾向于处理大规模连续计算任务,在实际应用过程中应尽可能减少小型算子的数量,比如 reshape、transpose 等操作。针对 PaddleOCR 这类复杂网络结构,推荐采取如下措施来提升性能表现: - **融合层节点**:尝试利用框架自带的功能自动合并相邻的小型 op; - **调整输入尺寸**:固定图片分辨率有助于降低动态形状带来的开销; - **量化策略**:考虑引入 INT8/FP16 数据精度模式进一步压缩资源消耗。 --- #### 结论 综上所述,借助 TensorRT 能够显著改善 PaddleOCR 推理阶段的速度指标。不过需要注意的是,整个迁移流程涉及较多技术细节,开发者应当充分理解各个组件的工作原理才能更好地解决问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zstar-_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值