程序员开发实例大全宝库

网站首页 > 编程文章 正文

OpenVINO开发必备知识点——环境剖析

zazugpt 2024-08-21 04:28:04 编程文章 18 ℃ 0 评论

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加入系统环境变量中。

source /opt/intel/openvino/setupvars.sh

可以通过执行命令: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。安装命令如下:

sudo pip3 install -r requirements_mxnet.txt

下面将LResNet100E-IR模型转换为OpenVINO可使用的网络结构。

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

可通过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,因此需要先编译出可执行程序。

mkdir build #创建build目录,用于存放编译过程中产生的临时文件
cd build
cmake /opt/intel/openvino/inference_engine/samples/cpp/ #C++工程是通过cmake构建的,因此需要确保系统中已经安装cmake, 若未安装执行sudo apt install cmake
make

编译出的所有可执行程序位于build/intel64/Release


可通过./benchmark_app --help查看benchmark使用参数。最简单的使用方式是通过-m指定模型文件即可。benchmark_app会根据模型所需的输入格式自动生成输入数据执行测试。

./build/intel64/Release/benchmark_app -m model-r100-ii/model-0000.xml -d CPU

精度FP32的模型的benchmark结果为


其中Latency为单个推理耗时,Throughput为平均一秒可以完成的推理次数。
为了比较不同量化对推理速度的影响,我们可以按照以上步骤生成FP16模型,并做benchmark:


可见,在CPU上FP16和FP32在性能上几乎没有差别。若同学们手上有VPU的话,可以指定-d HDDL测试在VPU上FP16上的执行速度。因为VPU不支持FP32,所以无法在VPU上测试FP32。


To be continued…

  • 基于OpenVINO实现人脸特征提取程序开发全流程(模型转换、C++编码、CMake工程构建等)

?

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表