写点什么

仁兄,可曾听闻 OpenVINO

用户头像
cv君
关注
发布于: 刚刚
仁兄,可曾听闻OpenVINO

初识 OpenVINO

一、 功能预览

1: YOLO 与 Darknet 网络通过 OpenVINO 加速工具包实现影像分类

2:

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

2:OpenVINO 自带 demo 测试

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

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

调用模型及其实现过程:

识别结束,显示结果:

由此可知,可以检测出车子和车牌名字和编号,识别时间也很迅速

甚至可以看到 fps 是比较低的。这也是 OpenVINO 的优势之一

3: OpenVINO 的其他实例演示:

通过 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 就像它的管理层一样,杂乱又效率低下。

它是一个很强大的工具,其他强大的功能,还有待我进一步了解与学习!最后,初学深度学习,和机器视觉,希望点个关注


用户头像

cv君

关注

还未添加个人签名 2021.03.22 加入

还未添加个人简介

评论

发布
暂无评论
仁兄,可曾听闻OpenVINO