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,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
的模型推断需要一个xml
和bin
,分别定义模型和权重,获取方法也在文档中写出来了:
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 + OpenCV实现车辆检测与道路分割
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 模型介绍 OpenVINO支持道路分割 ...
- OpenVINO开发教程之八 – 道路分割
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 模型介绍 基于OpenVINO预训练模 ...
- TGRS2021:Road Segmentation for Remote Sensing ImagesUsing Adversarial Spatial Pyrami对抗性空间金字塔网络的道路分割
TGRS2022:Road Segmentation for Remote Sensing ImagesUsing Adversarial Spatial Pyramid Networks基于对抗性空 ...
- AidLux“实时头发分割”案例源码详解
"实时头发分割"案例源码详解 1. 构建APP框架和添加主要控件 2. 头发分割的方法 打开实时头发分割案例 1.在VScode中进入代码编辑状态. 2.代码存在路径在/examp ...
- 基于UNet和camvid数据集的道路分割
基于UNet和camvid数据集的道路分割h(1.3.0+): 背景 语义分割是深度学习中的一个非常重要的研究方向,并且UNet是语义分割中一个非常经典的模型.在本次博客中,我尝试用UNet对camv ...
- 详解ENet | CPU可以实时的道路分割网络
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 OpenCV DNN模块支持的图像语义分割网络FCN是基于V ...
- CAS+SSO配置单点登录完整案例
CAS+SSO配置单点登录完整案例 目录 CAS+SSO配置单点登录完整案例 部署环境 环境说明 安全证书配置 1.打开cmd命令窗口(管理员身份打开) 2.生成证书,在cmd窗口输入以下命令: 3. ...
- OpenVINO部署Mask-RCNN实例分割网络
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 极市导读 OpenVINO是英特尔推出的一款全面的工具套件,用于快速部署应用和解决方案,支持计算机视觉 ...
- 使用U-Net进行肺结节分割案例分析:DSB3Tutorial
使用U-Net进行肺结节分割案例分析:DSB3Tutorial 本文要分析的代码作者是jonrmulholland,这里是其链接地址 数据集:LUNA 2016,这里是LUNA2016数据集详细说明链 ...
最新文章
- boost::pointer_traits的用法实例
- 封装JDBC—非框架开发必备的封装类
- android studio 创建项目失败原因Failed to create
- 单词语音音标正则式查询分析JavaScript应用
- python3将网页保存为pdf
- 中国医科大学2021年12月《医学遗传学》作业考核试题
- 实践“鱼塘养鱼论”,不断养鱼和捕鱼
- NTFS - 系统解析
- 客户端设置超时,max_fails失效----问题分析
- 全球时间与北京时间、UTC时间关系表
- 京东JD App签名/加密算法研究
- 删除桌面上出现无文件名图标的方法
- 「UG/NX」BlockUI 枚举Enum
- ubuntu如何设置默认程序打开方式
- vue 禁用滚动条 锁定屏幕
- windows 10 输入法切换设置
- 华为新款上市手机鸿蒙,华为新款手机2021款(华为P50发布上市时间)
- 手机远程控制电脑的方法
- Python 学习目标
- Linux下快速删除大量文件/文件夹方法--rsync
热门文章
- 南京工程学院计算机组成原理第二版答案,南大__计算机组成原理第二次作业
- oracle视图失效,ORACLE 11Gr2 V$ARCHIVED_LOG视图过期信息
- [蓝桥杯][算法提高VIP]种树(dfs)
- Mike and distribution(思维)
- php存密码,php 登录验证的代码(基于文件保存的密码)
- linux用户登录实验,实验三 Linux系统登录及用户管理
- Java学习_强制类型转换
- Ubuntu14.04系统下安装配置OpenCV 4.0.0开发环境全过程
- 【自动驾驶-Autonomous】自动驾驶定义
- 纯c语言实现动态分配多维数组的方法