【技术分享】RoboGo PaddleOCR 全链路镜像:X5 与 S 系列训练、量化和在线推理 v1.0

我们在 RoboGo 上整理了两套面向 RDK 的 PaddleOCR 全链路开发镜像,把原本分散的训练、ONNX 导出、OpenExplorer 量化编译、x86 仿真和在线推理集中到同一台开发机中:

  • rdk-x5-paddleocr-v3-fullchain-oe128-cu128-v1.0:PP-OCRv3,面向 RDK X5,输出 .bin
  • rdk-s-paddleocr-v6-fullchain-oe370-cu128-v1.0:PP-OCRv6,面向 S100/S100P/S600,输出 .hbm

镜像直达链接:

两个镜像都提供端口 7860 的中文 Web 工作台,不需要先进入 Jupyter 或手写大量命令。用户可以在页面中完成:

  1. 文本检测或文字识别训练;
  2. 浮点 Model Zoo ONNX 导出;
  3. 检测、识别双模型一键量化;
  4. OE x86 仿真和精度门禁;
  5. det→透视裁图→rec 的完整 OCR 在线推理。

为什么要分成两个镜像

X5 和 S 系列并不是只换一个目标芯片参数。两条路线使用不同版本的 PaddleOCR、Paddle2ONNX、Model Zoo 分支、OpenExplorer runtime、ONNX opset 和校准协议:

项目 RDK X5 镜像 RDK S 系列镜像
OCR 模型 PP-OCRv3 Det/Rec PP-OCRv6 Tiny Det/Rec
ONNX opset ≤11 opset 19
BPU 架构 bayes-e nash-e / nash-m / nash-p
板端模型 .bin .hbm
本机仿真 X5 OE x86 S100/S100P OE x86;S600 仅编译

分开封装能够避免依赖冲突,也能阻止最危险的一类误操作:拿另一平台的 ONNX 或校准预处理直接量化。

创建开发机

推荐使用 1×RTX 4090、系统盘至少 120 GB,并把 RoboGo 数据管理目录以读写方式挂载到 /personal。Web 应用填写端口 7860、路径 /。开机后点击“Web应用”即可;首次出现 502 时等待 30–60 秒再刷新。

数据集、训练日志和模型产物都建议放在 /personal,这样任务结果会直接回写到 RoboGo 数据管理,不需要从开发机下载再上传。

从训练到量化

检测数据采用 PaddleOCR 标注,每行是“图片相对路径 + Tab + JSON 文本框数组”;识别数据每行是“图片相对路径 + Tab + 文字内容”。目录中均需提供 train_list.txtval_list.txt

在“训练与转换”中分别训练 det 或 rec。第一次跑自定义数据时,建议先选择“等待确认再量化”:先看训练指标和浮点 ONNX 串联推理,确认检测框、识别文本和字符字典正确,再启动 BPU 量化。流程稳定后再使用自动继续量化。

如果已经有 det/rec 两个浮点 ONNX,可以直接使用“OCR 一键量化”,只需选择两个模型和原始训练图片目录。工作台会从原图中均匀选取 100 张作为检测校准集,再用浮点 det 做 DB 后处理和透视裁图,自动生成 250 个真实文字框作为识别校准集。用户不需要手工制作一套识别校准图片。

原始图片 ─┬─→ det 校准 ─→ det 量化/编译
          └─→ 浮点 det ─→ DB 文本框 ─→ 透视裁图 ─→ rec 校准 ─→ rec 量化/编译

两个平台的校准处理不同

X5 PP-OCRv3 检测图直接缩放为 640×640,生成 RGB、CHW、float32、[0,255] 校准数据,再由 mapper YAML 执行 mean/scale。S 系列 PP-OCRv6 检测图保持比例缩放,在右侧和底部黑边填充,使用 BGR 和 ImageNet mean/std 归一化。两边的识别模型输入都固定为 320×48,但仍应使用镜像内与配方绑定的处理流程。

不是“能编译就算成功”

工作台为 det 和 rec 设置了多层质量闸门:

  • 输入、输出数量和固定形状必须符合 Model Zoo 配方;
  • 浮点—量化输出最低余弦相似度为 0.98
  • BPU 对外输出必须为 FLOAT,末端 Dequantize 必须保留;
  • X5、S100、S100P 的 BPU 模型必须通过 OE x86 仿真与定点 ONNX 严格一致性检查;
  • S600 只标记“编译完成、待板端验证”,不会用未执行的 x86 结果冒充通过。

v1.0 的正式校准与验收结果如下:

  • X5:det/rec 浮点—量化余弦相似度 0.986034 / 0.999919,两套 .bin 严格仿真与完整 OCR 推理通过;
  • S100:det/rec 编译余弦 0.996447 / 0.997547,HBM x86 仿真相似度 0.994965 / 0.997228

在线推理与边界

页面支持用同一套 det/rec 的浮点 ONNX、X5 .bin 或 S 系列 .hbm 做完整 OCR 串联推理,输出检测框、识别文字、置信度、坐标、结果图、JSON 和耗时。

下面是同一张场景图在 X5 浮点 ONNX 与 BPU .bin 下的实测结果。主招牌和下方小字的检测框基本一致,可用于快速检查量化前后是否出现明显漏检、框漂移或排序变化。

图 1 X5 浮点 ONNX 串联推理效果。

图 2 同一测试图的 X5 BPU .bin 串联推理效果。绿色框为文本检测结果,橙色数字为文本框序号。

S100 使用复杂票据样例验证密集文字、中英文、数字和低对比度区域。浮点 ONNX 与 .hbm 的主要文本框保持一致;边缘小框的差异应结合识别文本、置信度和量化报告判断。

图 3 S100 浮点 ONNX 串联推理效果。

图 4 同一测试图的 S100 BPU .hbm 串联推理效果。可视化结果用于快速验收,最终仍以文字列表、余弦相似度和 OE 严格检查为准。

需要特别说明:OE x86 仿真耗时不是板端性能。S 系列识别 HBM 在 x86 仿真器中单框约需 2 分钟,因此页面的 HBM 完整 OCR 默认只对一个高置信文字框真实执行 rec HBM,其余框使用配套浮点 rec 生成预览。真实性能和逐框效果仍要到对应 RDK 板卡验证;S600 模型尤其必须进行板端验证。

常用恢复命令

bash /home/robogo/START_TRAINING_WEB.sh
training-web status
training-web restart
training-web logs 100

两个镜像的默认输出均为 /personal/output/时间-模型/。请完整保留同一次任务生成的浮点 ONNX、定点 ONNX、.bin/.hbmocr-quantization-report.json 和 OE 日志,不要只拿走一个 BPU 文件后丢失配套信息。

欢迎在 RoboGo 中搜索上述 v1.0 镜像体验。如果遇到训练数据格式、字符字典、量化精度门禁或板端部署问题,可以在评论区附上所用平台、任务目录中的报告文件和错误日志,我们会继续完善这套流程。