[平台测评]当OpenVINO遇上速8

1693浏览
查看: 1693|回复: 0

[平台测评] 当OpenVINO遇上速8

[复制链接]

一、OpenVINO简介

OpenVINO工具套件是英特尔于2018年发布的,开源、商用免费、主要应用于计算机视觉、实现神经网络模型优化和推理计算加速软件工具套件。OpenVINO工具套件主要包括用于优化神经网络模型的工具Model Optimizer(模型优化器)和用于加速推理计算的软件包Inference Engine(推理引擎)。

当OpenVINO遇上速8图1

模型训练完毕后,可以导出模型文件(如*.pb文件),使用OpenVINO工具套件中的Model Optimizer工具优化模型,获得模型的中间表示(IR),中间表示包括两个文件,一个是描述神经网络拓扑结构的xml文件,另一个是存储模型权重参数的bin文件。得到IR文件后,可以在用户应用程序中调用Inference Engine来完成推理计算,Inference Engine是一组C++/C/Python API函数,完成初始化AI推理计算硬件,组装模型及执行推理计算,并返回推理计算结果。

二、Model Optimizer 模型优化器

Model Optimizer是一个跨平台的命令行深度神经网络模型优化工具,可以将多种流行的深度学习框架(如Caffe、MXNet、TensorFlow、ONNX等)模型转换为统一的能够被Inference Engine读取、加载、并执行推理计算的中间表达(Intermediate Representaion)-IR文件。

Model Optimizer在转换深度学习模型的时候,主要做三件事情:

1、将深度学习框架格式的模型转换为IR格式模型。

2、优化模型,提升计算速度。

3、转换模型的精度到FP32、FP16、INT8。

三、Inference Engine 推理计算

Inference Engine是OpenVINO工具套件的推理引擎,让开发者方便读入IR文件、设置模型的输入输出、读入数据、在指定的AI计算硬件上执行推理计算并获得结果。

四、Python实现OpenVINO推理计算

这里分享如何通过OpenVINO官网提供demo——行人与车辆检测模型。

先看效果,视频为《速度与***8》中开场托雷托赛车的场景。在视频中可以看出,经过OpenVINO推理计算后的行人与车辆检测模型FPS平均可以达到50左右,并且在不损失精度的条件下,分别用蓝色框和绿色框检测出了视频中的车辆和行人。

当OpenVINO遇上速8图2

1、查看硬件列表

安装配置好环境后,导入OpenCV、openvino.inference_engine模块,使用ie.availabel_device属性可以查看当前硬件列表。

当OpenVINO遇上速8图3

2、推理计算过程

(1)初始化

[mw_shl_code=python,false]ie = IECore()[/mw_shl_code]

(2)读取IR文件

[mw_shl_code=python,false]net = IENetwork(model=model_xml, weights=model_bin)[/mw_shl_code]

(3)准备输入输出张量

[mw_shl_code=python,false]    for blob_name in net.inputs:
    if len(net.inputs[blob_name].shape) == 4:
        input_blob = blob_name
    out_blob = next(iter(net.outputs))[/mw_shl_code]

(4)载入模型

[mw_shl_code=python,false]exec_net = ie.load_network(network=net, num_requests=2, device_name=args.device)[/mw_shl_code]

(5)执行推理计算

[mw_shl_code=python,false]exec_net.infer(inputs=feed_dict)[/mw_shl_code]

3、异步模式

在行人与车辆检测模型中,为了提高前向推理的速度,代码中采用了异步模式提高推理计算的性能。在模型执行第一帧的推理计算后,无需等待推理计算结束,直接读取下一帧,检查上一帧推理计算是否完毕,若完毕,处理输出结果。这样并行执行了上一帧和下一帧的图像采集和前向计算,减少了等待时间,提高了硬件利用率,也提高了吞吐量。exec_net.start_async为对应异步处理函数。

[mw_shl_code=python,false]cur_request_id = 0
next_request_id = 1
in_frame = cv2.resize(next_frame, (w, h))
in_frame = in_frame.transpose((2, 0, 1))  # Change data layout from HWC to CHW
in_frame = in_frame.reshape((n, c, h, w))
feed_dict[input_blob] = in_frame
exec_net.start_async(request_id=next_request_id, inputs=feed_dict)
res = exec_net.requests[cur_request_id].outputs[out_blob]
[/mw_shl_code]

附官网提供代码(有部分输出调整):

object_detection_demo_ssd_async.py

10.73 KB, 下载次数: 1596

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail