ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

RapidOCR OCR 推理提速指南:如何让单图识别耗时从 85ms 降到 20ms

RapidOCR OCR 推理提速指南:如何让单图识别耗时从 85ms 降到 20ms RapidOCR OCR 推理提速指南如何让单图识别耗时从 85ms 降到 20ms【免费下载链接】RapidOCR Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch.项目地址: https://gitcode.com/GitHub_Trending/ra/RapidOCRRapidOCR 是基于 PaddleOCR 模型的多平台离线 OCR 工具提供 ONNX Runtime、OpenVINO、TensorRT 等推理引擎。通过线程调度、图优化与精度压缩三类调优单图端到端识别耗时可下降约 75%常驻内存同步收窄。 一、先看效果调优前后差多少先把结论摆出来。以下为在 Intel CPU 与单张 NVIDIA GPU 上的端到端单图识别耗时示例值仅供量级参考调优步骤单图端到端耗时ms说明PyTorch FP32CPU默认68.5基线ONNX Runtime默认配置21.3仅换引擎ONNX Runtime 图优化 线程调优18.9线程数设为物理核数OpenVINOCPU调线程 LATENCY18.7Intel CPUTensorRT FP16NVIDIA GPU8.2编译后的引擎被缓存两个可操作的观察其一换引擎的收益大于调参调参是在换引擎之后的二阶收益其二RapidOCR 的返回结果里带elapse_list会分别给出检测、分类、识别三段的耗时见 主流程实现先测出哪一段慢再决定动哪个参数。二、技术栈拆解引擎选型速查推理管线固定为 检测(det) → 方向分类(cls) → 识别(rec) 三段每段都可在 全局配置 里独立指定engine_type和模型规格因此检测用 ONNX Runtime、识别用 TensorRT这类混搭是允许的。各引擎一句话定位ONNX Runtime默认引擎CPU/GPU/CANN/CoreML 全覆盖provider 支持最完整见 ONNX Runtime 引擎实现OpenVINOIntel CPU/iGPU 上表现最好的选择参数少而直接见 OpenVINO 引擎实现TensorRTNVIDIA GPU 首选支持 FP16/INT8编译出的引擎按 GPU 架构缓存复用Paddle需要停留在 Paddle 生态、方便微调衔接时选PyTorch适合实验与模型转换验证生产部署不建议MNN移动端场景。⚙️ 三、三层优化实战算法层先砍掉不需要的计算原理检测、分类、识别是三次独立推理跳过任何一段就是实打实的耗时节省输入分辨率与检测侧网络规模则是耗时大头。例如已知输入是单行文本时直接关掉检测不需要 180° 旋转纠偏的场景关掉 cls。Global: use_det: true use_cls: true use_rec: true text_score: 0.5 max_side_len: 2000—— 摘自 python/rapidocr/config.yaml可调参数Global.use_cls/use_detmax_side_len控制预处理缩放上限输入图越大检测越慢按业务实际分辨率往下压。运行时层图优化与线程调度原理ONNX Runtime 侧图优化会把相邻算子融合、做常量折叠减少 kernel 启动和内存往返线程侧intra_op_num_threads单算子内部并行度设成物理核数通常最优超线程核参与反而引入调度抖动。sess_opt SessionOptions() sess_opt.enable_cpu_mem_arena cfg.enable_cpu_mem_arena sess_opt.graph_optimization_level GraphOptimizationLevel.ORT_ENABLE_ALL—— 摘自 python/rapidocr/inference_engine/onnxruntime/main.pyOpenVINO 侧对应的线程配置写法如下注意其边界校验只在 1 到物理核数之间才生效infer_num_threads self.cfg.get(inference_num_threads, -1) if infer_num_threads ! -1 and 1 infer_num_threads os.cpu_count(): config[INFERENCE_NUM_THREADS] str(infer_num_threads)—— 摘自 python/rapidocr/inference_engine/openvino/device_config.py可调参数EngineConfig.onnxruntime.intra_op_num_threads、EngineConfig.openvino.inference_num_threads默认 -1 表示交给引擎自动决定显式设成物理核数后再对比elapse_list。部署层精度压缩与引擎缓存原理FP16 把权重与激活从 32 位浮点压到 16 位GPU 上算力近乎翻倍而精度损失通常不可感知INT8 量化压到 8 位整数压缩更激进需要校准集验证。TensorRT 引擎一次编译、多次复用缓存文件名携带 GPU 架构与精度信息避免重复编译。tensorrt: device_id: 0 use_fp16: true use_int8: false workspace_size: 1073741824 force_rebuild: false—— 摘自 python/rapidocr/config.yaml可调参数use_fp16保持开启、cache_dir集中管理编译产物、force_rebuild环境变更后重建。更多引擎细节见 TensorRT 引擎实现。四、性能数据与选型建议关键参数的默认值与调整方向如下默认值取自 config.yaml效果为示例值仅供量级参考配置项默认值调整建议主要作用ORTintra_op_num_threads-1自动设为物理核数减少调度开销OpenVINOinference_num_threads-1自动物理核数勿含超线程避免线程超配反而变慢OpenVINOperformance_hintnull低并发设 LATENCY批量设 THROUGHPUT延迟/吞吐取舍Rec.rec_batch_num6文本密集图调大文本行批量识别吞吐提升Global.max_side_len2000按实际分辨率下调输入越小检测越快TensorRTuse_fp16true保持 trueINT8 需校准精度近乎无损的 2 倍加速决策清单Intel CPU 服务 → OpenVINOAMD/ARM CPU → ONNX RuntimeNVIDIA GPU → TensorRT FP16低并发在线接口 → 延迟优先performance_hint: LATENCY离线批量 →THROUGHPUT并配合更大的num_streams与rec_batch_num边缘/移动端 → MNN 或 ONNX Runtime 的 CPU EP首次集成只需 demo.py 这样的四行入口调优全部走配置不改业务代码from rapidocr import RapidOCR engine RapidOCR() result engine(path/to/img.jpg) print(result)—— 摘自 python/demo.py 五、常见坑与排查思路现象首次调用极慢之后正常。原因默认模型首次运行时下载TensorRT 还要从 ONNX 编译引擎。解决用rapidocr download_models子命令预取模型并把cache_dir指到稳定目录让编译产物落盘复用。现象线程数调大后耗时不降反升。原因超线程核或超配线程带来争用多进程部署时各进程都在抢核。解决按物理核数设置多进程场景给每个实例显式分配线程并错开核心OpenVINO 可配合enable_cpu_pinning。现象配置了 GPU实际仍跑在 CPU 上。原因缺少对应 provider 或版本不匹配会话创建时回退。解决引擎构造后会校验session.get_providers()ORT 侧有此校验逻辑先打印实际 provider 列表再查依赖版本。现象TensorRT 加载缓存引擎报错、反序列化失败。原因TensorRT/CUDA 版本或 GPU 变化后与缓存不兼容。解决缓存文件名已包含 sm 架构与 TF32 环境变量删除旧缓存或设force_rebuild: true重建。现象框检出来了文本结果为空。原因text_score阈值过滤掉了低置信结果或预处理缩放把小字压没了。解决调低Global.text_score检查min_side_len/max_side_len仓库自带测试图集可直接复现验证例如 测试图片目录 中的样图六、收尾RapidOCR 适合离线文档扫描、截图识别、批量票据处理以及 CPU 边缘盒与 GPU 服务器上的批量推理。边界同样明确逐帧实时视频流不在其优化目标内单帧仍要十几到几十毫秒需要配合抽帧或独立进程垂直领域精度不足时要回 PaddleOCR 微调再转换模型而不是在推理侧硬调内存小于 512MB 的超低端设备连默认 small 模型加依赖都偏紧选型时应优先考虑 MNN 并裁剪语种。测试环境与数据来源文中性能数字为示例值仅供量级参考参数默认值与引擎配置取自 python/rapidocr/config.yaml验证用图取自 python/tests/test_files/.【免费下载链接】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),仅供参考
返回列表