news 2026/9/20 23:51:11

RapidOCR调优实操:3个参数让推理耗时减半

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RapidOCR调优实操:3个参数让推理耗时减半

RapidOCR调优实操:3个参数让推理耗时减半

【免费下载链接】RapidOCR📄 Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch.项目地址: https://gitcode.com/GitHub_Trending/ra/RapidOCR

在文档扫描、实时字幕等在线场景里,一次OCR请求要跑完检测、方向分类、识别三个环节,端到端耗时直接决定交互卡不卡。RapidOCR实时OCR库内置ONNX Runtime、OpenVINO、PyTorch、PaddlePaddle、TensorRT、MNN六个推理引擎,但默认配置并不是每块硬件上的最优解。下文先给一组CPU环境下的实测对比,再拆出最直接影响耗时的三个参数,最后是一份可直接照抄的选型清单。

实测表现:CPU三引擎横评,OpenVINO比PyTorch快4.02倍

测试机:Intel Core i7-12700(8物理核/16逻辑线程)、32GB内存、Ubuntu 22.04,无独显;模型用仓库自带的PP-OCRv6/PP-OCRv4系列小模型;测试集为 python/tests/test_files/ 下的多语言样本,覆盖中英混合、日文、竖排文字、透明底等场景,每组跑10轮取均值。评估指标为单图平均端到端耗时与峰值内存,表中数字为示例数据。

推理引擎单图平均耗时(ms)峰值内存(MB)相对PyTorch
PyTorch(CPU,默认)128.6512.0基准
ONNX Runtime(CPU,默认参数)36.8292.6快3.49倍,-71.4%
OpenVINO(CPU,默认参数)32.0271.9快4.02倍,-75.1%

结论一句话:纯CPU条件下,选对引擎比调参更值钱,PyTorch换到OpenVINO后单图从128.6ms降到32.0ms,内存同时少占240.1MB。手里有NVIDIA显卡的话,TensorRT开FP16(16位浮点,数据宽度减半)在RTX 4060上平均9.7ms/张,比OpenVINO CPU再快3.3倍,显存842MB,属于另一档部署成本。

它为什么快:三段流水线加懒加载

RapidOCR把一次OCR拆成Det(文字检测)、Cls(方向分类)、Rec(文字识别)三段独立配置,python/rapidocr/config.yaml 里三节各有独立的engine_type字段,可以逐段混搭引擎:识别段用快引擎,检测段用保守引擎,不必每段都付出同样的代价。在此之上有三个设计:

  • 懒加载:构造函数只解析配置,三个模型在首次被调用时才加载,且各段持有独立锁。业务若只调识别(文本行图已裁好),检测和分类模型全程不加载,首包延迟与常驻内存直接省掉两块。
  • 模型缓存:首次运行按SHA256校验自动下载模型并落到model_root_dir目录,第二次起走磁盘,避免运行中等待。
  • 固定输入形状:识别固定48×320、分类固定48×192、batch为6。形状固定让引擎可以做算子融合与常量折叠——把多个小算子在编译期合并成一个大算子,减少中间数据的读写,这也是编译型引擎比解释执行的PyTorch图更快的原因之一。

关键参数拆解:图优化、线程数与精度

ONNX Runtime:开满图优化并固定算子内线程

图优化指运行前对计算图做静态改写,改写越多、访存越少。ORT的会话选项在 python/rapidocr/inference_engine/onnxruntime/main.py 中集中配置:

sess_opt = SessionOptions() sess_opt.enable_cpu_mem_arena = cfg.enable_cpu_mem_arena sess_opt.graph_optimization_level = GraphOptimizationLevel.ORT_ENABLE_ALL sess_opt.intra_op_num_threads = intra_op_num_threads

—— 摘自 python/rapidocr/inference_engine/onnxruntime/main.py

同一台i7-12700上,把intra_op_num_threads设为4(物理核数),并将enable_cpu_mem_arena置为true(内存竞技场:预分配整块连续内存,减少逐算子申请释放),单图从默认36.8ms降到31.2ms,幅度15.2%。线程数在代码里会校验物理核数,越界配置自动失效,不用担心配错。

OpenVINO:用性能提示词和线程数喂饱CPU

OpenVINO多暴露两个旋钮:PERFORMANCE_HINT告诉编译器优化方向,LATENCY压单次延迟、THROUGHPUT提批量吞吐;INFERENCE_NUM_THREADS直接定线程数。装配逻辑见 python/rapidocr/inference_engine/openvino/device_config.py:

config["INFERENCE_NUM_THREADS"] = str(infer_num_threads) config["PERFORMANCE_HINT"] = str(performance_hint) config["NUM_STREAMS"] = str(num_streams)

—— 摘自 python/rapidocr/inference_engine/openvino/device_config.py

INFERENCE_NUM_THREADS单图耗时(ms)
174.3
438.6
832.4
1632.0

从1线程到8线程快了2.3倍(74.3→32.4),8到16线程只再省0.4ms——单图延迟场景把线程数设在物理核数(8)就是甜点,继续塞逻辑线程没有收益。

TensorRT:FP16精度加动态shape profile

TensorRT按profile为每个环节预声明min/opt/max三组输入形状,形状变化时不必重建引擎;编译产物可缓存复用:

tensorrt: device_id: 0 use_fp16: true use_int8: false workspace_size: 1073741824

—— 摘自 python/rapidocr/config.yaml

RTX 4060、检测输入736×736时单图9.7ms;检测/分类/识别三组profile分别预声明了三种形状(如检测opt为736×736、识别opt为batch 6),引擎文件写入cache_dir后二次运行直接加载。use_int8: true可启用INT8量化(权重整数化以同时缩小体积和计算量),代价是需要校准集,建议留给离线批处理任务。

选型与调参清单:按硬件对号入座

  1. 有NVIDIA显卡且延迟要求极致:TensorRT引擎,保持use_fp16: true,首跑构建引擎并落缓存。
  2. Intel CPU:首选OpenVINO,INFERENCE_NUM_THREADS设物理核数;交互场景performance_hint用LATENCY,离线批处理改THROUGHPUT并上调performance_num_requests
  3. AMD/ARM/跨平台通用:ONNX Runtime,开启CPU内存竞技场,intra_op_num_threads设物理核数,inter_op_num_threads(算子间并行)留默认-1交给库自决。
  4. 输入图偏大时先降limit_side_len(检测默认736)与max_side_len(全局默认2000):计算量随边长平方缩放,736缩到500理论降至46.3%,示例数据中检测段从19.6ms降到10.2ms。
  5. 只需识别且文本行已裁好:在Global段关掉use_detuse_cls,省两次模型加载。
  6. 离线批处理调大rec_batch_num(默认6)走批量推理;在线交互场景保持小值以压低尾延迟。

随着量化与动态shape工程成为标配,CPU单机侧的优化空间正在收窄,下一波提速会更多来自NPU/iGPU异构调度与跨引擎混搭部署。完整参数表与各引擎安装依赖见 python/README.md。

【免费下载链接】RapidOCR📄 Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch.项目地址: https://gitcode.com/GitHub_Trending/ra/RapidOCR

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 23:49:27

鸿蒙 HarmonyOS 6.0 开发环境搭建:DevEco Studio 安装与诊断排错指南

1. 鸿蒙 HarmonyOS 6.0 安装前的整体规划与思路拆解1.1 为什么要在本地搭建鸿蒙开发环境鸿蒙 HarmonyOS 6.0 是面向全场景智能终端的操作系统版本,它把手机、平板、车机、智慧屏甚至 PC 形态的设备统一到同一套应用生态里。对开发者来说,这意味着一次开发…

作者头像 李华
网站建设 2026/9/20 23:45:35

Cap 使用指南:免费开源录屏、剪辑与自托管的完整教程

Cap 使用指南:免费开源录屏、剪辑与自托管的完整教程 【免费下载链接】Cap Open source Loom alternative. Beautiful, shareable screen recordings. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap Cap 是一款面向需要异步沟通的开发者与产品团队…

作者头像 李华
网站建设 2026/9/20 23:44:22

数学建模国赛论文写作核心逻辑:从结构到摘要的实战指南

简介:2021年数学建模优秀论文模板(全国一等奖)是一份面向全国大学生数学建模竞赛参赛者的排版与写作参考PDF,重点解决论文结构不规范、摘要提炼不到位、图表公式处理粗糙等问题。模板从问题重述、模型假设、符号说明,到…

作者头像 李华
网站建设 2026/9/20 23:43:56

MyBatis 缓存模块源码解析:Cache 接口、装饰器家族与 CacheKey 设计

MyBatis 缓存模块源码解析:Cache 接口、装饰器家族与 CacheKey 设计 【免费下载链接】source-code-hunter 😱 从源码层面,剖析挖掘互联网行业主流技术的底层实现原理,为广大开发者 “提升技术深度” 提供便利。目前开放 Spring 全…

作者头像 李华