OpenVINO——配置与道路分割案例
前言
最近看到了一個(gè)深度學(xué)習(xí)庫OpenVINO,專門用于Intel硬件上部署深度學(xué)習(xí)模型,其內(nèi)置了非常非常多使用的預(yù)訓(xùn)練模型,比如道路分割、人臉提取、3D姿態(tài)估計(jì)等等。但是配置和調(diào)用有點(diǎn)小惡心,這里以道路分割為例,展示如何配置OpenVINO的環(huán)境,以及模型下載和調(diào)用
國際慣例,參考博客:
OpenVINO提供的所有預(yù)訓(xùn)練模型列表
OpenVINO的物體分割文檔
OpenVino (二) Win10 python配置
配置
需要注冊(cè)一個(gè)賬號(hào)下載OpenVINO,按照官網(wǎng)給出的win10安裝方法 一直各種下一步。因?yàn)槲业膒ython是用Anaconda安裝的3.7.6版本,不知道為什么在最后一步的時(shí)候檢測(cè)不到python,這里就是坑的開始。
各種下一步順利,運(yùn)行測(cè)試案例能成功,但是直接在jupyter中運(yùn)行
from openvino.inference_engine import IECore,IENetwork會(huì)報(bào)錯(cuò):
--------------------------------------------------------------------------- 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: 找不到指定的模塊。但是如果你在終端,先執(zhí)行官方文檔說的:
cd C:\Program Files (x86)\IntelSWTools\openvino\bin\ setupvars.bat再在這個(gè)終端啟動(dòng)python執(zhí)行import就可以
python from openvino.inference_engine import IECore,IENetwork每次都要這樣操作一遍,這明顯就是環(huán)境變量只對(duì)當(dāng)前終端生效了,整個(gè)電腦的環(huán)境并未改變,所以有兩種方案解決:一是找到所有缺失的dll添加到PATH中,二是利用python在執(zhí)行腳本之前加入環(huán)境變量,所幸第二個(gè)方案在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就成功啦。
道路分割案例執(zhí)行
模型獲取
首先從官方文檔上:
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的模型推斷需要一個(gè)xml和bin,分別定義模型和權(quán)重,獲取方法也在文檔中寫出來了:
You can download the pre-trained models using the OpenVINO Model Downloader or from https://download.01.org/opencv/.這個(gè)Model Downloader的位置在安裝路徑
\IntelSWTools\openvino_2020.4.287\deployment_tools\tools\model_downloader下可以找到,調(diào)用方法是
python downloader.py --name road-segmentation-adas-0001后面這個(gè)模型名字可以從這個(gè)路徑找到
\IntelSWTools\openvino_2020.4.287\deployment_tools\open_model_zoo\intel_models其實(shí)就是OpenVINO官方modelzoo提供的預(yù)訓(xùn)練模型名字,直接把名字copy過來就會(huì)自動(dòng)下載,下載目錄就是downloader.py的所在目錄。因?yàn)榘咐堑缆贩指畹?#xff0c;所以取下載road-segmentation-adas-0001模型
模型調(diào)用
這一步就簡單了,直接仿照官方例子去執(zhí)行。
\IntelSWTools\openvino\deployment_tools\open_model_zoo\demos\python_demos\3d_segmentation_demo這里就不寫官方那么復(fù)雜了,就寫一下必要步驟,首先是初始化模型:
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一下,丟到網(wǎng)絡(luò)推斷
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]從官方文檔可以發(fā)現(xiàn)輸出的維度分別代表什么意思
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')后記
這里核心點(diǎn)就是:環(huán)境配置、模型下載、模型載入推斷
官方有很多模型,建議多看文檔就能玩很多有意思的demo。
完整的python腳本實(shí)現(xiàn)放在微信公眾號(hào)的簡介中描述的github中,有興趣可以去找找,同時(shí)文章也同步到微信公眾號(hào)中,有疑問或者興趣歡迎公眾號(hào)私信。
總結(jié)
以上是生活随笔為你收集整理的OpenVINO——配置与道路分割案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sshpass用法介绍
- 下一篇: 聊聊 webpack 打包如何压缩包文件