OpenVINO——配置与道路分割案例

前言

最近看到了一个深度学习库OpenVINO,专门用于Intel硬件上部署深度学习模型,其内置了非常非常多使用的预训练模型,比如道路分割、人脸提取、3D姿态估计等等。但是配置和调用有点小恶心,这里以道路分割为例,展示如何配置OpenVINO的环境,以及模型下载和调用

国际惯例,参考博客:

OpenVINO提供的所有预训练模型列表

OpenVINO的物体分割文档

OpenVino (二) Win10 python配置

配置

需要注册一个账号下载OpenVINO,按照官网给出的win10安装方法 一直各种下一步。因为我的python是用Anaconda安装的3.7.6版本,不知道为什么在最后一步的时候检测不到python,这里就是坑的开始。

各种下一步顺利,运行测试案例能成功,但是直接在jupyter中运行

from openvino.inference_engine import IECore,IENetwork

会报错:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-3-cebd727a66b4> in <module>
----> 1 from openvino.inference_engine import IECore,IENetwork

C:\ProgramData\Anaconda3\lib\site-packages\openvino\inference_engine\__init__.py in <module>
----> 1 from .ie_api import *
      2 __all__ = ['IENetwork', "TensorDesc", "IECore", "Blob", "get_version"]
      3 __version__ = get_version()
      4 

ImportError: DLL load failed: 找不到指定的模块。

但是如果你在终端,先执行官方文档说的:

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

再在这个终端启动python执行import就可以

python
from openvino.inference_engine import IECore,IENetwork

每次都要这样操作一遍,这明显就是环境变量只对当前终端生效了,整个电脑的环境并未改变,所以有两种方案解决:一是找到所有缺失的dll添加到PATH中,二是利用python在执行脚本之前加入环境变量,所幸第二个方案在github中有人提到过,issue在此,所以只需要在脚本最开头,加入

import os
os.environ['Path']+= 'C:\\Program Files (x86)\\IntelSWTools\\openvino_2020.4.287\\deployment_tools\\ngraph\\lib;' \
                    'C:\\Program Files (x86)\\IntelSWTools\\openvino_2020.4.287\\deployment_tools\\inference_engine\\external\\tbb\\bin;'\
                    'C:\\Program Files (x86)\\IntelSWTools\\openvino_2020.4.287\\deployment_tools\\inference_engine\\bin\\intel64\\Debug;'\
                    'C:\\Program Files (x86)\\IntelSWTools\\openvino_2020.4.287\\deployment_tools\\inference_engine\\bin\\intel64\\Release;'\
                    'C:\\Program Files (x86)\\IntelSWTools\\openvino_2020.4.287\\deployment_tools\\inference_engine\\external\\hddl\\bin;' \
                    'C:\\Program Files (x86)\\IntelSWTools\\openvino_2020.4.287\\deployment_tools\\model_optimizer;'

然后

from openvino.inference_engine import IECore,IENetwork

就成功啦。

道路分割案例执行

模型获取

首先从官方文档上:

net = IENetwork(model=path_to_xml_file, weights=path_to_bin_file)

或者官方提供的案例,在安装路径

\IntelSWTools\openvino\deployment_tools\open_model_zoo\demos\python_demos\3d_segmentation_demo

中可以看到,OpenVINO的模型推断需要一个xmlbin,分别定义模型和权重,获取方法也在文档中写出来了:

You can download the pre-trained models using the OpenVINO Model Downloader or from https://download.01.org/opencv/.

这个Model Downloader的位置在安装路径

\IntelSWTools\openvino_2020.4.287\deployment_tools\tools\model_downloader

下可以找到,调用方法是

python downloader.py --name road-segmentation-adas-0001

后面这个模型名字可以从这个路径找到

\IntelSWTools\openvino_2020.4.287\deployment_tools\open_model_zoo\intel_models

其实就是OpenVINO官方modelzoo提供的预训练模型名字,直接把名字copy过来就会自动下载,下载目录就是downloader.py的所在目录。因为案例是道路分割的,所以取下载road-segmentation-adas-0001模型

模型调用

这一步就简单了,直接仿照官方例子去执行。

\IntelSWTools\openvino\deployment_tools\open_model_zoo\demos\python_demos\3d_segmentation_demo

这里就不写官方那么复杂了,就写一下必要步骤,首先是初始化模型:

model_xml = './OpenVINO_model/road-segmentation-adas-0001.xml'
model_bin = './OpenVINO_model/road-segmentation-adas-0001.bin'

ie=IECore()
net = ie.read_network(model=model_xml,weights=model_bin)
exec_net = ie.load_network(network=net, device_name='CPU')

然后使用opencv读取图片做推断,但是要注意先获取一下输入输出

input_blob = next(iter(net.input_info))
out_blob = next(iter(net.outputs))
n,c,h,w = net.input_info[input_blob].input_data.shape

然后把图片resize一下,丢到网络推断

image = cv2.imread('./OpenVINO_model/img1.jpg')
image = cv2.resize(image,(w,h))
image = image.transpose((2,0,1)) # HWC to CHW
image = image[np.newaxis,...]
image.shape
#(1, 3, 512, 896)
res = exec_net.infer(inputs={input_blob:image})

最后获取输出以及可视化

res = res[out_blob]

从官方文档可以发现输出的维度分别代表什么意思

The output is a blob with the shape [B, C=4, H=512, W=896]. It can be treated as a four-channel feature map, where each channel is a probability of one of the classes: BG, road, curb, mark.

那么获取道路就是维度1。

import matplotlib.pyplot as plt
plt.imshow(image[0].transpose(1,2,0)/255.0)
plt.imshow(res[0,1,...], 'jet', interpolation='none', alpha=0.7)
plt.figure(figsize=(16,16))
plt.subplot(121)
plt.imshow(image[0].transpose(1,2,0)/255.0)
plt.axis('off')
plt.subplot(122)
plt.imshow(image[0].transpose(1,2,0)/255.0)
plt.imshow(res[0,1,...], 'jet', interpolation='none', alpha=0.7)
plt.axis('off')

在这里插入图片描述

后记

这里核心点就是:环境配置、模型下载、模型载入推断

官方有很多模型,建议多看文档就能玩很多有意思的demo。

完整的python脚本实现放在微信公众号的简介中描述的github中,有兴趣可以去找找,同时文章也同步到微信公众号中,有疑问或者兴趣欢迎公众号私信。

在这里插入图片描述

手把手讲授如何搭建成功OpenVINO框架,并且使用预训练模型快速开发超分辨率、道路分割、汽车识别、人脸识别、人体姿态和行人车辆分析。得益于OpenVINO框架的强大能力,这些例子都能够基于CPU达到实时帧率。课程的亮点在于在调通Demo的基础上更进一步:一是在讲Demo的时候,对相关领域问题进行分析(比如介绍什么是超分辨率,有什么作用)、预训练模型的来龙去脉(来自那篇论文,用什么训练的)、如何去查看不同模型的输入输出参数、如何编写对应的接口参数进行详细讲解;二是基本上对所有的代码进行重构,也就是能够让例子独立出来,并且给出了带有较详细注释的代码;三是注重实际运用,将Demo进一步和实时视频处理框架融合,形成能够独立运行的程序,方便模型落地部署;四是重难点突出、注重总结归纳,对OpenVINO基本框架,特别是能够提高视频处理速度的异步机制和能够直接部署解决实际问题的骨骼模型着重讲解,帮助学习理解;五是整个课程准备精细,每一课都避免千篇一律,前一课有对后一课的预告,后一课有对前一课的难点回顾,避免学习过程中出现突兀;六是在适当的时候拓展衍生,不仅讲OpenVINO解决图像处理问题,而且还补充图像处理的软硬选择、如何在手机上开发图像处理程序等内容,帮助拓展视野,增强对行业现状的了解。基本提纲:1、课程综述、环境配置2、OpenVINO范例-超分辨率(super_resolution_demo)3、OpenVINO范例-道路分割(segmentation_demo)4、OpenVINO范例-汽车识别(security_barrier_camera_demo)5、OpenVINO范例-人脸识别(interactive_face_detection_demo)6、OpenVINO范例-人体姿态分析(human_pose_estimation_demo)7、OpenVINO范例-行人车辆分析(pedestrian_tracker_demo)8、NCS和GOMFCTEMPLATE9、课程小结,资源分享
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风翼冰舟

额~~~CSDN还能打赏了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值