Intel OpenVINO介紹與安裝教學

李謦伊
謦伊的閱讀筆記
13 min readJul 10, 2020

近幾年來,Edge AI 越來越熱門,而什麼是 Edge AI 呢? 就是指將人工智慧佈署在邊緣設備中,相較於 Cloud AI,他可以提升執行效率以及避免隱私洩露的問題,因此 AIoT 也從 Cloud AI延伸到了 Edge AI。

邊緣運算可使用的架構有很多種,本文將介紹 Intel OpenVINO Toolkit。OpenVINO 是Intel開發的電腦視覺與深度學習應用的開發套件,具有模型優化器和推理引擎,可支援 Windows、Linux (Ubuntu、CentOS)等作業系統,以及常見的深度學習框架 Caffe、TensorFlow、Mxnet、ONNX 等所訓練好的模型與參數,結合自家硬體加速晶片,在邊緣運算上可以達到不錯的效果。

OpenVINO 提供的重要功能就是 Model Optimizer 以及 Inference Engine,將訓練好的模型經由 Model Optimizer 生成IR文件( xml 與 bin檔案) ,若是要使用 Pytorch framework 訓練出來的模型,要先將其轉換為 ONNX 格式,再交給 Model Optimizer 去生成 IR 文件,接著由 OpenVINO 的 Inference Engine讀取 IR model 進行推論,使用者就可以透過 OpenVINO Toolkit和Inference Engine API 整合至開發應用程式。

Inference Engine 有提供 API 給 Python 跟 C++

以下是 Python 的用法

官方 API 參考: https://docs.openvinotoolkit.org/2021.1/ie_python_api/annotated.html

from openvino.inference_engine import IENetwork, IECoreie = IECore()# 這邊模型是用 human pose estimation 的 modelmodel_hp = "D:/model/Transportation/human_pose_estimation/mobilenet-v1/dldt/FP16/human-pose-estimation-0001"network= IENetwork(model=model_hp+".xml", weights=model_hp+".bin")executable_network= ie.load_network(network, "CPU")infer_request= executable_network.infer(inputs={input_name_hp: inblob})res = executable_network.requests[cur_request_id].outputs[out_blob]

以下是 C++的用法

官方 API 參考: https://docs.openvinotoolkit.org/2021.1/annotated.html

#include <inference_engine.hpp>using namespace InferenceEngine;Core ie;CNNNetReader networkReader;// 這邊模型是用 human pose estimation 的 modelnetworkReader.ReadNetwork("D:/model/Transportation/human_pose_estimation/mobilenet-v1/dldt/FP16/human-pose-estimation-0001.xml");networkReader.ReadWeights("D:/model/Transportation/human_pose_estimation/mobilenet-v1/dldt/FP16/human-pose-estimation-0001.bin");CNNNetwork network = networkReader.getNetwork();ExecutableNetwork executable_network = ie.LoadNetwork(network, targetDeviceName);InferRequest infer_request = executable_network.CreateInferRequest();infer_request.Infer();

OpenVINO Windows安裝

接下來就來講安裝教學吧~~

在安裝 OpenVINO 前要先安裝

  1. Visual Studio 2019, 2017或是2015。
  2. CMake 版本要高於3.4 (64 bit),但如果是安裝Visual Studio 2019的話,需要安裝3.14版本。
  3. Python 高於3.6.5,需安裝 : pip install PyYAML, requests, numpy, opencv-python

我安裝過 Visual Studio 2019, 2017 跟 CMake 3.18, Python 3.6.8 或 3.7.4,都可以安裝成功~

Windows OpenVINO 我安裝的是 2019R2 的版本,預設會安裝在 C:\Program Files (x86)\IntelSWTools

官方下載網址: https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit/download.html

接下來要加上環境變數

  1. 在個人環境變數中加上 Python 安裝路徑資料夾及其 scripts 資料夾
  2. 在系統變數分別加上:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE

Cmake\bin 的安裝路徑

C:\Program Files (x86)\IntelSWTools\openvino_2019.2.242\deployment_tools\inference_engine\bin

C:\Program Files (x86)\IntelSWTools\openvino_2019.2.242\opencv\bin

C:\Program Files (x86)\IntelSWTools\openvino_2019.2.242\python\python3.7\openvino

建立 demo 環境

# 先進入至以下資料夾
cd C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\inference_engine\demos
# 執行以下指令
build_demos_msvc.bat

都建立好之後就可以來設定OpenVINO環境~

首先,以系統管理員身份執行 cmd ,進入至 C:\Program Files (x86)\IntelSWTools\openvino\bin,然後執行 setupvars.bat

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

☆ 之後每一次要執行 OpenVINO demo 都要先設定 OpenVINO 環境!!!

在執行 demo 前要先下載 model ,先進入至 C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\tools\model_downloader

然後執行以下指令,<model>是要下載的模型,<dir_path>是模型下載後存放的文件夾 (不要放在 C:\Program Files (x86) 會有管理權限而無法下載的問題 )

python downloader.py --name <model> --output_dir <dir_path>

Python demo

這邊我先示範 Python demo 以及下載所要使用的模型

# 下載 googlenet-v1 至我的資料夾
$python downloader.py --name googlenet-v1 -o C:\Users\joyle\Documents\Intel\model
  • 轉換 model 至 IR 格式
# 先進入至以下資料夾
$cd C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\model_optimizer
$python mo.py --input_model C:\Users\joyle\Documents\Intel\model\classification\googlenet\v1\caffe\googlenet-v1.caffemodel --data_type FP32 --output_dir C:\Users\joyle\Documents\Intel\model
  • demo測試
# 進入至以下資料夾
$cd C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\inference_engine\samples\python_samples\benchmark_app

接著要先將C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\demo\car.png 放入別的資料夾 (因為放在 C:\Program Files (x86) 會有管理權限的問題 )

# -m 存放 model 的位置 , -d 使用 cpu or gpu, -i input資料(圖片)
$python benchmark_app.py -m C:\Users\joyle\Documents\Intel\model\googlenet-v1.xml -d CPU -api async -i C:\Users\joyle\Documents\Intel\car.png -progress true -b 1

呈現以下樣子就表示安裝成功了~~

若有錯誤訊息可以 python benchmark_app.py -h 看參數運用是否正確

C++ demo

接下來示範C++ demo以及下載所要使用的模型

一樣要先進入至 C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\tools\model_downloader

# 下載 human-pose-estimation-0001 至我的資料夾
$python downloader.py --name human-pose-estimation-0001 --output_dir C:\Users\joyle\Documents\Intel\model

因為 human-pose-estimation-0001本身就是 IR 格式,因此不用再做轉換,如果需要轉換模型格式,一樣可以使用以下指令

python mo.py --input_model <model> --output_dir <dir_path>
  • demo測試

-Human pose estimation

# 到編譯好的目錄下
$cd C:\Users\<username>\Documents\Intel\OpenVINO\omz_demos_build\intel64\Release
# 執行以下指令
$human_pose_estimation_demo -i <影片> -m C:\Users\joyle\Documents\Intel\model\human-pose-estimation-0001.xml
# 若要使用自己的鏡頭 則執行以下指令
$human_pose_estimation_demo -i cam -m C:\Users\joyle\Documents\Intel\model\human-pose-estimation-0001.xml

-Face detection

要先下載人臉偵測模型 face-detection-adas-0001.xml 和人臉關鍵點模型 facial-landmarks-35-adas-0002.xml 兩個模型,接著執行以下指令

# 到編譯好的目錄下
$cd C:\Users\<username>\Documents\Intel\OpenVINO\omz_demos_build_build\intel64\Release
# 只需要人臉偵測 執行以下指令
$interactive_face_detection_demo -i <影片> -m C:\Users\joyle\Documents\Intel\model\face-detection-adas-0001.xml
# 要做人臉偵測及關鍵點 則執行以下指令
$interactive_face_detection_demo -i <影片> -m C:\Users\joyle\Documents\Intel\model\face-detection-adas-0001.xml -m_lm C:\Users\joyle\Documents\Intel\model\facial-landmarks-35-adas-0002.xml
# 若要使用自己的鏡頭 則執行以下指令
$interactive_face_detection_demo -i cam -m C:\Users\joyle\Documents\Intel\model\face-detection-adas-0001.xml

當然也可以對圖片做人臉偵測~

照片出自楊洋粉絲團 IG:xiaonai_yangyang

這樣就完成 OpenVINO 的安裝啦 ! !

  • 測試用影片 Test_video

OpenVINO 文章:

Intel OpenVINO with NCS2

Intel OpenVINO — synchronous, asynchronous

Intel OpenVINO 模型轉換 — TensorFlow, Darknet YOLO, ONNX

--

--