OpenVINO是Intel推出的計算機視覺深度學習推理加速庫,支持Intel CPU, 核心顯卡,VPU和FPGA。OpenVINO的開發環境安裝可參考上一期介紹: OpenVINO開發必備知識點——環境搭建, 本文的所有操作的系統環境為Ubuntu16.04。
OpenVINO是CNN推理加速庫,而不支持模型訓練,因此在使用OpenVINO之前必須已經有訓練好的模型。
本文將以人臉特徵提取模型Insightface作為示例進行實操。
InsightFace提供的預訓練模型LResNet100E-IR,ArcFace@ms1m-refine-v2在各種人臉數據集上的評測效果較好,在非特殊場合無需finetune即可使用。
LResNet100E-IR模型提供百度網盤的下載方式,下載下來是名為model-r100-ii.zip的壓縮包。通過unzip命令解壓後的mxnet模型文件如下所示:
OpenVINO環境變量
OpenVINO的默認安裝路徑為/opt/intel/openvino, 因為該路徑並不在系統環境中,為防止在執行過程中出現命令找不到、動態庫找不到等問題,在使用OpenVINO之前必須執行以下操作將OpenVINO加入系統環境變量中。
<code>source
/opt/intel/openvino/setupvars.sh/<code>
可以通過執行命令:export | grep -i openvino來查看OpenVINO為系統環境增加了哪些變量。下圖是我的執行結果。
- InferenceEngine_DIR
可以查看一下InferenceEngine_DIR路徑下的文件,如下圖所示,可見InferenceEngine_DIR下存放了OpenVINO相關的cmake文件。因此,環境變量InferenceEngine_DIR是用cmake構建C++工程時使用的環境變量。有了InferenceEngine_DIR環境變量,CMakeLists.txt中加入find_package(InferenceEngine),可以使cmake自動找到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為網絡結構文件
Benchmark工具
OpenVINO Samples中提供benchmark工具,可以通過benchmark提前對比一下網絡執行的速度。benchmark提供python和c++兩種版本,本文采用C++版本-benchmark_cpp,因此需要先編譯出可執行程序。
<code>mkdir buildcd
build cmake /opt/intel/openvino/inference_engine/samples/cpp/ make/<code>
編譯出的所有可執行程序位於build/intel64/Release下
可通過./benchmark_app --help查看benchmark使用參數。最簡單的使用方式是通過-m指定模型文件即可。benchmark_app會根據模型所需的輸入格式自動生成輸入數據執行測試。
<code>./build/intel64/Release
/benchmark_app -mmodel
-r100-ii/model
-0000.
xml
-d CPU/<code>
精度FP32的模型的benchmark結果為
其中Latency為單個推理耗時,Throughput為平均一秒可以完成的推理次數。
為了比較不同量化對推理速度的影響,我們可以按照以上步驟生成FP16模型,並做benchmark:
可見,在CPU上FP16和FP32在性能上幾乎沒有差別。若同學們手上有VPU的話,可以指定-d HDDL測試在VPU上FP16上的執行速度。因為VPU不支持FP32,所以無法在VPU上測試FP32。
To be continued…
- 基於OpenVINO實現人臉特徵提取程序開發全流程(模型轉換、C++編碼、CMake工程構建等)
關鍵字: InferenceEngine -- benchmark