OpenVINO開發必備知識點——環境剖析

OpenVINO是Intel推出的計算機視覺深度學習推理加速庫,支持Intel CPU, 核心顯卡,VPU和FPGA。OpenVINO的開發環境安裝可參考上一期介紹: OpenVINO開發必備知識點——環境搭建, 本文的所有操作的系統環境為Ubuntu16.04。


OpenVINO是CNN推理加速庫,而不支持模型訓練,因此在使用OpenVINO之前必須已經有訓練好的模型。
本文將以人臉特徵提取模型Insightface作為示例進行實操。
InsightFace提供的預訓練模型LResNet100E-IR,ArcFace@ms1m-refine-v2在各種人臉數據集上的評測效果較好,在非特殊場合無需finetune即可使用。

OpenVINO開發必備知識點——環境剖析

LResNet100E-IR模型提供百度網盤的下載方式,下載下來是名為model-r100-ii.zip的壓縮包。通過unzip命令解壓後的mxnet模型文件如下所示:

OpenVINO開發必備知識點——環境剖析

OpenVINO環境變量

OpenVINO的默認安裝路徑為/opt/intel/openvino, 因為該路徑並不在系統環境中,為防止在執行過程中出現命令找不到、動態庫找不到等問題,在使用OpenVINO之前必須執行以下操作將OpenVINO加入系統環境變量中。

<code>

source

/opt/intel/openvino/setupvars.sh/<code>

可以通過執行命令:export | grep -i openvino來查看OpenVINO為系統環境增加了哪些變量。下圖是我的執行結果。

OpenVINO開發必備知識點——環境剖析

  • InferenceEngine_DIR

可以查看一下InferenceEngine_DIR路徑下的文件,如下圖所示,可見InferenceEngine_DIR下存放了OpenVINO相關的cmake文件。因此,環境變量InferenceEngine_DIR是用cmake構建C++工程時使用的環境變量。有了InferenceEngine_DIR環境變量,CMakeLists.txt中加入find_package(InferenceEngine),可以使cmake自動找到OpenVINO相關的頭文件和動態庫。


OpenVINO開發必備知識點——環境剖析


  • LD_LIBRARY_PATH
    LD_LIBRARY_PATH是Linux系統的庫文件(靜態庫和動態庫)搜索路徑。可執行程序所依賴的動態庫必須放置在該目錄下,程序才能執行。
  • OpenCV_DIR
    OpenCV_DIR與InferenceEngine_DIR類似,是為cmake提供的OpenCV環境變量
  • PATH
    PATH是Linux系統搜索的可執行文件的存放路徑, 比如ls, echo, cat等命令就是存放在該環境變量所對應的目錄下。對於不在該目錄下的可執行程序如果需要執行,必須輸入程序的完整路徑才可以。
  • PYTHONPATH
    PYTHONPATH是為python提供的系統環境

模型優化工具

模型優化工具存放在
/opt/intel/openvino/deployment_tools/model_optimizer目錄下,工具以python腳本的形式提供。
其中mo_xxx.py是為相應模型提供的優化轉換工具, requirements_xxx.txt是使用mo_xxx.py所需安裝的依賴環境。

因為本文使用的insightface模型是mxnet格式的,因此須安裝requirements_mxnet.txt來使用mo_mxnet.py。安裝命令如下:

<code>

sudo

pip3

install

-r

requirements_mxnet

.txt

/<code>

下面將LResNet100E-IR模型轉換為OpenVINO可使用的網絡結構。

<code>

cd

model-r100-ii

python3

/opt/intel/openvino/deployment_tools/model_optimizer/mo_mxnet.py --input_model model-0000.params --input_shape [1,3,112,112] --data_type FP32

/<code>

可通過python3 mo_mxnet.py --help查看輸入參數,其中

  • --input_model指定要進行轉換的模型文件名,在mxnet中是指.params文件。
  • --input_shape指定模型輸入的圖片尺寸,格式為[batch_size,channels,height,width]。注意逗號之間不能有空格。model-r100-ii模型的輸入是112x112的BGR圖片。
  • --data_type 指定量化後的模型的數據類型, FP32表示32bit float, FP16表示16bit float。

執行的結果如下圖所示全部是SUCCESS則代表執行成功,當前目錄下會看到生成的OpenVINO模型文件。其中:

  • model-0000.bin為模型參數文件
  • model-0000.xml為網絡結構文件
OpenVINO開發必備知識點——環境剖析

OpenVINO開發必備知識點——環境剖析


Benchmark工具

OpenVINO Samples中提供benchmark工具,可以通過benchmark提前對比一下網絡執行的速度。benchmark提供python和c++兩種版本,本文采用C++版本-benchmark_cpp,因此需要先編譯出可執行程序。

<code>mkdir build  

cd

build cmake /opt/intel/openvino/inference_engine/samples/cpp/ make/<code>

編譯出的所有可執行程序位於build/intel64/Release

OpenVINO開發必備知識點——環境剖析


可通過./benchmark_app --help查看benchmark使用參數。最簡單的使用方式是通過-m指定模型文件即可。benchmark_app會根據模型所需的輸入格式自動生成輸入數據執行測試。

<code>./build/intel64/

Release

/benchmark_app -m

model

-r100-ii/

model

-0000.

xml

-d CPU/<code>

精度FP32的模型的benchmark結果為

OpenVINO開發必備知識點——環境剖析


其中Latency為單個推理耗時,Throughput為平均一秒可以完成的推理次數。
為了比較不同量化對推理速度的影響,我們可以按照以上步驟生成FP16模型,並做benchmark:

OpenVINO開發必備知識點——環境剖析


可見,在CPU上FP16和FP32在性能上幾乎沒有差別。若同學們手上有VPU的話,可以指定-d HDDL測試在VPU上FP16上的執行速度。因為VPU不支持FP32,所以無法在VPU上測試FP32。

To be continued…

  • 基於OpenVINO實現人臉特徵提取程序開發全流程(模型轉換、C++編碼、CMake工程構建等)


分享到:


相關文章: