🚩注意:基于目前openvino==2022.2.0
版,在推理批量图像时,存在申请内存不释放的问题,详情可参见issue11939
# Windows端
pip install openvino==2022.2.0
# 里面含有mo
pip install openvino-dev==2022.2.0
- 因为OpenVINO可以直接推理ONNX模型,故这里暂时不作转换,直接推理之前ONNX模型即可
- 这里仍然给出转换的代码,用作参考:
mo --input_model models/ch_PP-OCRv2_det_infer.onnx --output_dir models/IR/ mo --input_model models/ch_PP-OCRv2_det_infer.onnx \ --output_dir models/IR/static \ --input_shape "[1,3,12128,800]"
-
OpenVINO可以直接推理IR、ONNX和PaddlePaddle模型,具体如下(图来源:link):
-
和ONNXRuntime同时推理同一个ONNX模型,OpenVINO推理速度更快
-
但是从对比来看,OpenVINO占用内存更大,其原因是拿空间换的时间
- 当指定
input_shape
在一个区间范围时,推理时内存占用会减少一些 - 示例命令:
mo --input_model models/ch_PP-OCRv2_det_infer.onnx \ --output_dir models/IR/static \ --input_shape "[1,3,960:1200,800]"
- 当指定
- 推理设备:
Windows 64位 Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz 2.59 GHz
- 测试图像宽高:
12119x810
测试模型 | 推理框架 | 占用内存(3次平均) | 推理时间(3次平均) |
---|---|---|---|
ch_PP-OCRv2_det_infer.onnx |
ONNXRuntime=1.10.0 |
0.8G | 5.354s |
ch_PP-OCRv2_det_infer.onnx |
openvino=2022.1.0 |
3.225G | 2.53s |
ch_PP-OCRv2_det_infer.xml FP32 动态图 |
openvino=2022.1.0 |
3.175G | 2.0455s |
NOTE: 以ch_ppocr_mobile_v2_det
中推理代码为例子
-
ONNXRuntime
import onnxruntime # 声明 sess_opt = onnxruntime.SessionOptions() sess_opt.log_severity_level = 4 sess_opt.enable_cpu_mem_arena = False session = onnxruntime.InferenceSession(det_model_path, sess_opt) input_name = session.get_inputs()[0].name output_name = session.get_outputs()[0].name # 推理 preds = session.run([output_name], {input_name: img})
-
OpenVINO
from openvino.runtime import Core # 初始化 ie = Core() model_onnx = ie.read_model(det_model_path) compile_model = ie.compile_model(model=model_onnx, device_name='CPU') vino_session = compile_model.create_infer_request() # 推理 vino_session.infer(inputs=[img]) vino_preds = vino_session.get_output_tensor().data