仁兄,可曾听闻OpenVINO

初识 OpenVINO

一、 功能预览

1: YOLO与Darknet网络通过OpenVINO 加速工具包实现影像分类
在这里插入图片描述

2:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gC80s6cz-1587278059852)(D:\CSDN\pic\1587264158354.png)]

A. 影像分类:一张影像原则上只能被分到一个类别,所以影像中最好只有一个主要物件。若影像中出现多个物件,那分类时则可能出现多个分类结果,同时会给出每个分类的不同机率,此时误分类的可能性就会大大提升。

B. 物件定位:一张影像中可同时出现多个相同或不同物件,大小不据,辨识后会对每个物件产生一个边界框(Bounding Box),如此即可获得较为准确的物件位置(座标)及尺寸(边界框长宽)。

C. 语义分割:是一种像素级分类,意思就是每个像素都只会被归到某一分类,如此就可取得接近物件真实边界(Edge)。但缺点是多个相同物件类型的像素都会被分到同一类,当物件太靠近或部份重叠时就不易分清楚共有多少物件。

D. 实例分割:这也是一种像素级的分类,和语义分割的差别是相同类型的不同物件所属像素就会被区分成不同分类(颜色),包括物件有部份重叠时,如此就能更正确判别影像中的内容。

3: 随机收集一些道路影像,包括白天、晚上、郊区、市区、远近镜头等,并用二种模型使用OpenVINO进行测试影像语义分割,其结果如下图所示,左为原始影像,中为20分类,右为4 分类。从结果来看,大致还分得还不错
在这里插入图片描述

二、简介

OpenVINO是英特尔基于自身现有的硬件平台开发的一种可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,支持各种英特尔平台的硬件加速器上进行深度学习,并且允许直接异构执行。 支持在Windows与Linux系统,Python/C++语言。优化工具包 OpenVINO 让不懂电脑视觉和深度学习原理的小白可以在很短的时间上手,不必担心如何建置开发平台、选择深度学习框架、训练及优化模型和硬体加速等问题,只需利用预先训练及优化过的语义分割模型,很快就可以做出一组看起来很专业的自驾车视觉分析系统。

主要特点:

**1:**在Intel平台上提升计算机视觉相关深度学习性能达19倍以上
2: 解除CNN-based的网络在边缘设备的性能瓶颈
3: 对OpenCV,OpenXV*视觉库的传统API实现加速与优化
4: 基于通用API接口在CPU、GPU、FPGA等设备上运行加上

OpenVINO 有2个大模块,第一个是 OR 他是用于把深度学习训练好的模型转换成engine可识别的文件(xml和bin) ,另一个是inference engine 是OpenVINO具体实施单元,利用一个智能引擎完成相应的应用 。

一般流程

1:根据自己的训练模型需要配置Mode Optimizer.

2: 根据设置的模型参数运行Model Optimizer,生成相对应的IR(主要是xml和bin)

xml-主要用来描述网络拓扑结构

bin-包括生成的weights and biases 二进制数据

3: 在实际应用场景种使用Inference Engine测试生成的IR

4: 在应用程序种调用Inference Engine相应接口,将生成的模型IR部署到实际环境中。

Model Optimizer

Model Optimizer 是一个跨平台命令行工具,用于促进训练与具体实施平台中的过渡,主要是进行静态模型分析 以及根据配置参照自动调整深度模型

Model Optimizer 被用来设计成支持常用的框架(Caffe, TensofFlow, MXNet, Kaldi, ONNX等),相当于封装了一层,便于进行开发。

Model Optimizer主要工作流程:

**1:**根据需要所用到的框架,配置Model Optimizer

2: 提供训练模型作为输入,包括网络拓扑以及参数

**3:**运行Model Optimizer(根据选择的网络拓扑进行训练)

**4:**IR作为Model Optimizer输出

Inference Engine:

Inference Engine是主要运行单元,并提供相应API

将IR作为输入

在目标硬件优化执行

提供嵌入式平台最佳执行性能方案

三、初识OpenVINO与使用

1:安装与搭配环境

下载与配置参见OpenVINO官网:https://software.intel.com/zh-cn/openvino-toolkit

其中:

**1:**安装英特尔分布式OpenVINO工具包核心组件

**2:**安装带有C++和MSBuild的Microsoft Visual Studio

**3:**安装CMake 3.4或更高版本

设置环境变量

在编译和运行OpenVINO™应用程序之前,必须更新多个环境变量。打开命令提示符并运行以下批处理文件以临时设置环境变量:

C:\Program Files(x86)\IntelSWTools\openvino\bin\setupvars.bat

2OpenVINO自带demo测试

这是OpenVINO文件夹下的自带车辆识别与车牌检测模型

在这里插入图片描述

打开demo_security_barrier_camera.bat会使用OpenVINO训练好的模型进行对该图片进行检测

调用模型及其实现过程:

在这里插入图片描述

识别结束,显示结果:

在这里插入图片描述
由此可知,可以检测出车子和车牌名字和编号,识别时间也很迅速
甚至可以看到fps是比较低的。这也是OpenVINO的优势之一

3OpenVINO的其他实例演示:

通过OpenVINO提供的行人检测与行人属性识别模型实现一个实时的视频行人检测与属性识别的演示程序 模型来自OpenVINO官方提供的预训练模型库

程序基于OpenVINO的异步推断实现了视频实时的行人检测,在行人检测得到行人ROI的基础上,调用行人属性识别模型实现行人属性识别,输出结果显示。首先需要的是加载模型与读取模型的输入与输出层,这部分的代码实现如下:

# 加载MKLDNN - CPU Target
log.basicConfig( format= "[ %(levelname)s ] %(message)s", level= log.INFO, stream=sys. stdout)
plugin = IEPlugin(device= "CPU", plugin_dirs=plugin_dir)
plugin.add_cpu_extension(cpu_extension)
lut = [];
lut.append(( 0, 0, 255))
lut.append(( 255, 0, 0))
lut.append(( 0, 255, 0))
lut.append(( 0, 255, 255))
lut.append(( 255, 0, 255)) 
# 加载IR
log.info( "Reading IR...")
net = IENetwork(model=model_xml, weights=model_bin)
pedestrian_attr_net = IENetwork(model=attribute_xml, weights=attribute_bin)
ifplugin.device == "CPU":
supported_layers = plugin.get_supported_layers(net)
not_supported_layers = [l forl innet.layers.keys ifl notinsupported_layers]
iflen(not_supported_layers) != 0:
log. error( "Following layers are not supported by the plugin for specified device {}:n {}".
format(plugin.device, ', '.join(not_supported_layers)))
log. error( "Please try to specify cpu extensions library path in demo's command line parameters using -l "
"or --cpu_extension command line argument")
sys. exit( 1)
assertlen(net.inputs.keys) == 1, "Demo supports only single input topologies"
assertlen(net.outputs) == 1, "Demo supports only single output topologies"
# 获取输入输出层
input_blob = next(iter(net.inputs))
out_blob = next(iter(net.outputs))
lm_input_blob = next(iter(pedestrian_attr_net.inputs))
lm_output_blob = next(iter(pedestrian_attr_net.outputs))
log.info( "Loading IR to the plugin...") 

其余代码略,下面是效果演示:
在这里插入图片描述
在这里插入图片描述

四、总结

在我初步了解了一会openvino后,有一些小结,因为关注于infer部分, 对于TF转换过来的网络进行极致的简化, 建立执行网络过程提供给用户, 对于固定的网络, 省略这个过程, 比同样tensorflow的CPU版本节省不少时间.简化网络后,运行开销只有原来的1/3,在使用因特尔的计算棒后可以与cpu计算速度相当,但还是较慢,不如GPU,文章部分内容参考自: gloomyfish与 许哲豪Jack 。

OpenVINO对初学者比较友好,但是在其方便使用的同时,也有人称: 接口文档却及其难找,也没有工程样例,新手看三天都不一定知道该怎么用,号称面向中国市场,结果太多东西被墙住下载不了。一句话总结,使用体验很差。inter的openvino就像它的管理层一样,杂乱又效率低下。

它是一个很强大的工具,其他强大的功能,还有待我进一步了解与学习!最后,初学深度学习,和机器视觉,希望点个关注另外可以大家一起进python,算法,机器学习,深度学习交流群~~~,联系我的WeChat 吧:
在这里插入图片描述

初学,自己也整理了很多学习资料,大家一起进步!
上海第二工业大学18智能A1 周小夏(CV调包侠)

发布了5 篇原创文章 · 获赞 45 · 访问量 6459

猜你喜欢

转载自blog.csdn.net/qq_46098574/article/details/105615297