RTX 5070 Ti 部署 PaddleOCR 踩坑实录:GPU 推理乱码的根因与 ONNX 解决方案

RTX 5070 Ti 部署 PaddleOCR 踩坑实录

背景

百度飞桨 PaddleOCR 是国内最流行的开源 OCR 系统,2026年6月刚发布 PP-OCRv6,号称用千万级参数超越千亿级多模态大模型的 OCR 能力。

我在本地双 5070 Ti 机器上部署 PaddleOCR,目标是提供 REST API + 前端 Demo。结果遇到了一个非常隐蔽的坑——GPU 推理正常运行,但输出全是乱码

问题现象

安装 paddlepaddle-gpu 2.6.2 + paddleocr 2.9.1 后,OCR 服务启动正常,GPU 识别正常,检测框也能正确找到文字区域。但识别结果却是这样的:

输入: 百度飞桨OCR文字识别 输出: 岑博振腺扭唤爸²扭の腺² 输入: Hello World 2026 输出: leuoworia 207

完全乱码,但置信度全是 1.00。

根因分析

经过大量排查,终于找到了根因:

RTX 5070 Ti 的 CUDA Compute Capability = 12.0(Blackwell 架构),PaddlePaddle 2.6.2 只支持到 CC 9.0(Ada Lovelace)。

关键日志:

W: The GPU compute capability in your current machine is 120, which is not supported by Paddle, it is recommended to install the corresponding wheel package according to the installation information on the official Paddle website.

推理引擎使用了不兼容的 CUDA kernel,不报错但输出错误。 这是最危险的——程序正常运行,结果完全错误,没有任何异常提示。

为什么不用 PaddlePaddle 3.x?

PaddlePaddle 3.3.1 已经支持 CUDA 12.9,但问题是:

  • PyPI 上只有 CPU 版本(paddlepaddle

  • GPU 版本(paddlepaddle-gpu)最高只有 2.6.2

  • 百度官方 wheel 源也没有提供 3.x 的 GPU 包

所以通过 pip install 无法获得支持 RTX 5070 Ti 的 PaddlePaddle。

解决方案:ONNX Runtime

既然 PaddlePaddle 的推理引擎不行,那就换一个。ONNX Runtime 是微软开源的推理引擎,支持所有主流 GPU 架构。

步骤 1:获取 ONNX 模型

从 HuggingFace 下载 PP-OCRv4 的 ONNX 格式模型:

from huggingface_hub import hf_hub_download # 检测模型 hf_hub_download("OleehyO/paddleocrv4.onnx", "ch_PP-OCRv4_det.onnx") # 识别模型 hf_hub_download("OleehyO/paddleocrv4.onnx", "ch_PP-OCRv4_rec.onnx")

步骤 2:安装 ONNX Runtime

pip install onnxruntime # CPU 版 # 或 pip install onnxruntime-gpu # GPU 版(支持 CUDA 12.x)

步骤 3:构建 OCR 流水线

import onnxruntime as ort import numpy as np # 加载模型 det = ort.InferenceSession("ch_PP-OCRv4_det.onnx") rec = ort.InferenceSession("ch_PP-OCRv4_rec.onnx") # 检测 → 裁剪 → 识别 # 完整代码见项目仓库

踩坑总结

坑 1:GPU 推理”能跑”≠”跑对”

RTX 5070 Ti 是 Blackwell 架构,老版本框架可能静默出错。升级 GPU 后一定要验证推理结果的正确性,不能只看程序是否正常运行。

坑 2:字典必须匹配

PaddleOCR 的识别模型输出维度 = 字典大小 + blank + space。不同模型使用不同字典,混用会导致乱码。

# 正确: 6625 维模型 + 6625 字字典 dict_path = "ppocr_keys_v1.txt" # 6623字 + blank + space = 6625

坑 3:DB 检测需要 padding

PaddleOCR 的 DB 检测算法只激活文字笔画的核心区域(约文字高度的 1/3),不是完整文字框。裁剪时必须加 padding:

# 裁剪区域上下各加 30px padding pts[0][1] = pts[1][1] = cy - half_h - 30 # top pts[2][1] = pts[3][1] = cy + half_h + 30 # bottom

最终效果

场景 耗时
4行中英文(800×400) 179ms
真实图片上传 280ms

识别准确率:中文、英文、数字均正确识别。

结论

  1. RTX 5070 Ti 用户:不要用 paddlepaddle-gpu 2.x,用 ONNX Runtime 绕过

  2. ONNX 是最佳兼容层:模型可从 HuggingFace 获取,推理不依赖 PaddlePaddle

  3. 字典匹配很重要:模型输出维度必须等于字典大小

  4. DB 检测需要 padding:裁剪区域加 30px padding 可大幅提升识别准确率


项目地址: /data/research/pp-ocr-v6 外网 Demo: http://219.152.238.231:36510/ocr/[1]

引用链接

[1]http://219.152.238.231:36510/ocr/


RTX 5070 Ti 部署 PaddleOCR 踩坑实录:GPU 推理乱码的根因与 ONNX 解决方案
https://maoyu92.github.io/2026/06/13/07 AI笔记/AI工具与模型/a078_RTX 5070 Ti 部署 PaddleOCR 踩坑实录:GPU 推理乱码的根因与 ONNX 解决方案/
作者
陈文茂
发布于
2026年6月13日
许可协议