文章作者:武卓 博士/ River Li/ Peter Chen
你是否准备好在新的一年体验 OpenVINO 工具套件分发版的最新长期支持 (LTS) 版本?
OpenVINO 2022.3 LTS 版本现已发布,可帮助你快速轻松地开发卓越的人工智能应用,并跨边缘和云端部署深度学习推理工作负载,无论你处于人工智能编程的什么阶段。
作为人工智能开发人员,无论你希望将 OpenVINO 用于 C 应用内,还是希望将其用于无法兼容 OpenVINO 软件包的应用二进制接口 (ABI) 的 C++ 应用,或用于需要运行时加载 OpenVINO 库的应用,C API 均可助您一臂之力!
C API 2.0 现已随 OpenVINO 2022.3 LTS 版本一起发布,包含以下主要功能:
01C API 2.0 支持 OpenVINO 2.0 C++API
如果开发人员以前仅知道如何应用 OpenVINO C++API 2.0,该特性可帮助他们更轻松地应用 C API 2.0,反之亦然。
02新的 C API 使用张量名称
和索引处理模型输入/输出
借助新的 C API 2.0 命名规则,开发人员可以更方便地编写代码和调用函数,因为它遵循了流行的深度学习命名规则和用途。
03支持动态输入和动态模型
一些深度学习模型涉及动态输入,即在某些输入维度上,输入尺寸可能会不时变化。例如,对于一些自然语言处理 (NLP) 用例,输入至模型的内容(例如所提问题问题的长度)取决于特定的问题。现在,C API 2.0 支持动态输入和动态模型,您可以轻松将其应用于动态输入和模型。上面列举了一些代码片段。
04为模型前期/后期处理提供大量 C API
C API 2.0 中提供了大量前期和后期处理 C API,以进一步加快 OpenVINO 实施深度学习模型推理的速度。例如,我们可以使用这样的预处理 API 将 NV12 输入数据转换为与实际模型输入相同的 BGR 格式,而无需使用 OpenCV 对 OpenVINO 执行数据格式转换,从而节省预处理时间。
05属性(键、数值、数字)的统一界面
对开发人员来说,为不同的用例设置/提供属性更为方便,而且这也可以提高可扩展性,便于未来支持更多新属性。
01如何使用 C API 2.0?
如要开始使用 C API 2.0 构建自己的应用,您需要创建一个管道将 OpenVINO 集成到您的应用中(如图 1 所示)。
图 1.OpenVINO 推理管道的步骤
步骤1:创建 OpenVINO 运行时内核
添加标头文件以支持 OpenVINO 运行时:
#include
使用以下代码创建 OpenVINO 内核,以管理可用设备和读取模型对象:
ov_core_t* core = NULL; ov_core_create(&core);
步骤2:编译模型
以下代码展示了以 OpenVINO 中间代码 (IR) 文件的格式编译深度学习模型的示例。您还可将其替换为其他框架的模型格式,如 TensorFlow、ONNX 等。
ov_compiled_model_t* compiled_model = NULL; ov_core_compile_model_from_file(core, "model.xml", "AUTO", 0, &compiled_model);
向右滑动查看完整代码
步骤3:创建推理请求
使用以下代码创建推理请求:
ov_infer_request_t* infer_request = NULL; ov_compiled_model_create_infer_request(compiled_model, &infer_request);
向右滑动查看完整代码
步骤4:设置输入
// Get input port for model with one input ov_output_const_port_t* input_port = NULL; ov_model_const_input(model, &input_port); // Get the input shape from input port ov_shape_t input_shape; ov_const_port_get_shape(input_port, &input_shape); // Get the the type of input ov_element_type_e input_type; ov_port_get_element_type(input_port, &input_type); // Create tensor from external memory ov_tensor_t* tensor = NULL; ov_tensor_create_from_host_ptr(input_type, input_shape, memory_ptr, &tensor); // Set input tensor for model with one input ov_infer_request_set_input_tensor(infer_request, tensor);
向右滑动查看完整代码
步骤5:开始推理
OpenVINO 运行时支持同步或异步模式的推理。使用异步 API 可提高应用的整体帧速率:当加速器运行繁忙时,应用可在主机上正常工作,无需等待推理完成。以下代码展示了在异步模式下设置推理的示例。
ov_infer_request_start_async(infer_request); ov_infer_request_wait(infer_request);
向右滑动查看完整代码
步骤6:处理推理结果
检查输出张量,并使用以下代码处理推理结果。
ov_tensor_t* output_tensor = NULL; // Get output tensor by tensor index ov_infer_request_get_output_tensor_by_index(infer_request, 0, &output_tensor);
向右滑动查看完整代码
步骤7:释放分配的对象
为避免内存泄漏,使用 C API 开发的应用需要按顺序释放分配的对象。
ov_shape_free(&input_shape); ov_tensor_free(output_tensor); ov_output_const_port_free(input_port); ov_tensor_free(tensor); ov_infer_request_free(infer_request); ov_compiled_model_free(compiled_model); ov_model_free(model); ov_core_free(core);
向右滑动查看完整代码
02在哪里找到 C API 2.0?
您可以通过“runtime/lib/libopenvino_c.so”(如图 2 所示)轻松找到 C API 库和标头文件。
图 2 在哪里找到 C API 2.0
03总结
总之,在 OpenVINO 2022.3 LTS 版本中,C API 更新为 C API 2.0。借助 C API 2.0,开发人员可以获得多种新特性,能够更轻松地在 C 应用中集成 OpenVINO。
审核编辑:汤梓红
-
API
+关注
关注
2文章
1485浏览量
61817 -
编程
+关注
关注
88文章
3592浏览量
93596 -
人工智能
+关注
关注
1791文章
46859浏览量
237582 -
函数
+关注
关注
3文章
4306浏览量
62431 -
深度学习
+关注
关注
73文章
5492浏览量
120978
原文标题:OpenVINO™ 的 C API 2.0 有何新特性?| 开发者实战
文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论