【推理技巧】OpenVINO2024 C++ 模型部署技巧合集
内容提要
《OpenCV应用开发:入门、进阶与工程化实践》介绍了OpenVINO的使用方法,包括创建推理请求、导出IR格式模型、图像预处理和推理预测。推荐使用OpenVINO2022及以上版本的C++ SDK,支持动态输入和输出层的模型。同时,还介绍了使用OpenCV函数进行图像预处理和推理预测的方法。
延伸解读
版本选择与动态输入支持
文章推荐使用OpenVINO 2022及以上版本的C++ SDK,因为该版本对动态输入和输出层的模型支持更好。对于动态输入的模型,需要先设置输入维度(如将宽高设为-1)再创建推理请求,这为处理可变尺寸输入提供了灵活性。
预处理方式的灵活选择
OpenVINO提供了内置的预处理方式,可以通过PrePostProcessor设置均值、缩放和布局。同时也可以使用OpenCV的blobFromImage函数进行预处理,两种方式各有适用场景,开发者可根据习惯和需求选择。
同步与异步推理模式
OpenVINO C++ SDK支持同步和异步两种推理模式。异步模式还支持Callback回调,便于实现推理流水线,提高吞吐量。文章给出了异步+Callback的代码示例,展示了如何连续推理。
与OpenCV Mat的高效对接
从Mat创建Tensor对象时,如果模型输入格式为NHWC,只需一行代码即可完成数据设置。推理结果Tensor转换为OpenCV Mat也很简单,根据输出维度(NHWC或1xHW)选择对应的Mat构造方式,方便后续处理。
Q&A
如何导入OpenVINO的C++ SDK头文件?
只需一行代码:# include <openvino/openvino.hpp>
创建推理请求的基本步骤是什么?
针对固定输入输出层的模型,只需三行代码即可创建推理请求。
OpenVINO支持哪些推理模式?
OpenVINO C++ SDK支持同步和异步两种推理模式,异步模式还支持Callback。
如何导出IR格式模型?
可以使用脚本方式导出XML的IR格式文件,代码示例如下:ov_model = ov.convert_model(...)
如何进行图像预处理?
可以使用OpenVINO的预处理方式或OpenCV的blobFromImage函数进行图像预处理。
从Mat创建Tensor对象时有什么简化方法?
如果输入格式为NHWC,可以简化代码,只需一行代码即可创建Tensor对象。