前言

最近看到了一个深度学习库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,IENetworkC:\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——配置与道路分割案例相关推荐

  1. OpenVINO + OpenCV实现车辆检测与道路分割

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 模型介绍 OpenVINO支持道路分割 ...

  2. OpenVINO开发教程之八 – 道路分割

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 模型介绍 基于OpenVINO预训练模 ...

  3. TGRS2021:Road Segmentation for Remote Sensing ImagesUsing Adversarial Spatial Pyrami对抗性空间金字塔网络的道路分割

    TGRS2022:Road Segmentation for Remote Sensing ImagesUsing Adversarial Spatial Pyramid Networks基于对抗性空 ...

  4. AidLux“实时头发分割”案例源码详解

    "实时头发分割"案例源码详解 1. 构建APP框架和添加主要控件 2. 头发分割的方法 打开实时头发分割案例 1.在VScode中进入代码编辑状态. 2.代码存在路径在/examp ...

  5. 基于UNet和camvid数据集的道路分割

    基于UNet和camvid数据集的道路分割h(1.3.0+): 背景 语义分割是深度学习中的一个非常重要的研究方向,并且UNet是语义分割中一个非常经典的模型.在本次博客中,我尝试用UNet对camv ...

  6. 详解ENet | CPU可以实时的道路分割网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 OpenCV DNN模块支持的图像语义分割网络FCN是基于V ...

  7. CAS+SSO配置单点登录完整案例

    CAS+SSO配置单点登录完整案例 目录 CAS+SSO配置单点登录完整案例 部署环境 环境说明 安全证书配置 1.打开cmd命令窗口(管理员身份打开) 2.生成证书,在cmd窗口输入以下命令: 3. ...

  8. OpenVINO部署Mask-RCNN实例分割网络

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 极市导读 OpenVINO是英特尔推出的一款全面的工具套件,用于快速部署应用和解决方案,支持计算机视觉 ...

  9. 使用U-Net进行肺结节分割案例分析:DSB3Tutorial

    使用U-Net进行肺结节分割案例分析:DSB3Tutorial 本文要分析的代码作者是jonrmulholland,这里是其链接地址 数据集:LUNA 2016,这里是LUNA2016数据集详细说明链 ...

最新文章

  1. boost::pointer_traits的用法实例
  2. 封装JDBC—非框架开发必备的封装类
  3. android studio 创建项目失败原因Failed to create
  4. 单词语音音标正则式查询分析JavaScript应用
  5. python3将网页保存为pdf
  6. 中国医科大学2021年12月《医学遗传学》作业考核试题
  7. 实践“鱼塘养鱼论”,不断养鱼和捕鱼
  8. NTFS - 系统解析
  9. 客户端设置超时,max_fails失效----问题分析
  10. 全球时间与北京时间、UTC时间关系表
  11. 京东JD App签名/加密算法研究
  12. 删除桌面上出现无文件名图标的方法
  13. 「UG/NX」BlockUI 枚举Enum
  14. ubuntu如何设置默认程序打开方式
  15. vue 禁用滚动条 锁定屏幕
  16. windows 10 输入法切换设置
  17. 华为新款上市手机鸿蒙,华为新款手机2021款(华为P50发布上市时间)
  18. 手机远程控制电脑的方法
  19. Python 学习目标
  20. Linux下快速删除大量文件/文件夹方法--rsync

热门文章

  1. 南京工程学院计算机组成原理第二版答案,南大__计算机组成原理第二次作业
  2. oracle视图失效,ORACLE 11Gr2 V$ARCHIVED_LOG视图过期信息
  3. [蓝桥杯][算法提高VIP]种树(dfs)
  4. Mike and distribution(思维)
  5. php存密码,php 登录验证的代码(基于文件保存的密码)
  6. linux用户登录实验,实验三 Linux系统登录及用户管理
  7. Java学习_强制类型转换
  8. Ubuntu14.04系统下安装配置OpenCV 4.0.0开发环境全过程
  9. 【自动驾驶-Autonomous】自动驾驶定义
  10. 纯c语言实现动态分配多维数组的方法