当OpenVINO遇上速8
一、OpenVINO简介OpenVINO工具套件是英特尔于2018年发布的,开源、商用免费、主要应用于计算机视觉、实现神经网络模型优化和推理计算加速软件工具套件。OpenVINO工具套件主要包括用于优化神经网络模型的工具Model Optimizer(模型优化器)和用于加速推理计算的软件包Inference Engine(推理引擎)。模型训练完毕后,可以导出模型文件(如*.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左右,并且在不损失精度的条件下,分别用蓝色框和绿色框检测出了视频中的车辆和行人。1、查看硬件列表安装配置好环境后,导入OpenCV、openvino.inference_engine模块,使用ie.availabel_device属性可以查看当前硬件列表。2、推理计算过程(1)初始化ie = IECore()(2)读取IR文件net = IENetwork(model=model_xml, weights=model_bin)(3)准备输入输出张量 for blob_name in net.inputs:if len(net.inputs.shape) == 4:
input_blob = blob_name
out_blob = next(iter(net.outputs))(4)载入模型exec_net = ie.load_network(network=net, num_requests=2, device_name=args.device)(5)执行推理计算exec_net.infer(inputs=feed_dict)3、异步模式在行人与车辆检测模型中,为了提高前向推理的速度,代码中采用了异步模式提高推理计算的性能。在模型执行第一帧的推理计算后,无需等待推理计算结束,直接读取下一帧,检查上一帧推理计算是否完毕,若完毕,处理输出结果。这样并行执行了上一帧和下一帧的图像采集和前向计算,减少了等待时间,提高了硬件利用率,也提高了吞吐量。exec_net.start_async为对应异步处理函数。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 = in_frame
exec_net.start_async(request_id=next_request_id, inputs=feed_dict)
res = exec_net.requests.outputs
附官网提供代码(有部分输出调整):
页:
[1]