要使用OpenVINO转换模型,首先,我们需要下载需要的模型,可以网上自己找,也可以使用OpenVINO里面自带的下载脚本。

一、自动下载转化模型

进入到opt/intel/openvino_2019.3.334/deployment_tools/open_model_zoo/tools/downloader文件夹,发现有三个脚本文件:downloader.py,converter.p,info_dumper.py,其分别的用处如下:

  • downloader.py – 从在线源下载模型
  • converter.py – 把模型转化为IR格式
  • info_dumper.py 打印模型的信息

使用之前我们需要安装一些软件依赖,主要是pyyaml和requests。

python3 -m pip install --user -r ./requirements.in

然后就可以下载模型了,注意下面是下载全部的模型,所以时间可能有点长

./downloader.py --all

当然,你可以指定模型的名字和精度下载自己想要的特定的模型:

./downloader.py --name face-detection-retail-0004 --precisions FP16,INT8

比如上面的就是下载权重精度为16位浮点数和8位整数的face-detection-retail-0004模型。下载好模型之后我们就可以转化了,通用的也是把所有的模型转成IR格式:

./converter.py --all

同样的,你可以指定转换特定精度的模型:

./converter.py --name=caffenet --precisions=FP16

最后的脚本可以输出模型信息的脚本,用法是:

./info_dumper.py --all

前面说过树莓派上的示例相对较少,其实它也有对应的下载脚本,不过如果你想自己下载,可以在树莓派的~/Downloads目录下新建openvino文件夹:

mkdir openvino
cd openvino
source /opt/intel/openvino/bin/setupvars.sh
git clone https://github.com/opencv/open_model_zoo.git

等待一段时间,就会下载好所有的模型了,如果网络不好的话建议在台式机上下载再传到树莓派上,解决的方法很灵活。
首先让我们在树莓派上编译一下自带的示例测试一下,就是前面所说的Security Barrier Camera Demo,注意这里的编译选项要设置好:

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a" ../.
make -j2 security_barrier_camera_demo

编译成功后,运行:

./armv7l/Release/security_barrier_camera_demo

操作正确的话会显示和之前一样带有标注框的图片。

因为这些示例都是预先配置好的,所以不需要什么操作,接下来让我们尝试一下自己把预训练模型转化为OpenVINO需要的IR文件,注意这需要在台式机上操作。
首先我们进入目录/opt/intel/openvino/deployment_tools/open_model_zoo/models,发现里面有两个目录,一个是intel,另一个是public。也就是一个是因特尔自家的模型,一个是公开的模型库,我们先来尝试一下SSD MobileNet V2 COCO。这个模型在公开的模型库里有,表示因特尔的硬件支持这个模型。如果你之前因为网络不好而没有下载好这个模型,可以在这里下载ssd_mobilenet_v2_coco_2018_03_29.tar.gz。为了便于操作,我们可以把这个模型的压缩文件复制到桌面的SSD_mobilenet文件夹里,在Ubuntu18.04里,你可以用鼠标复制粘贴也可以用命令操作,然后我们解压得到对应的文件夹。接着进入文件夹ssd_mobilenet_v2_coco_2018_03_29,可以看到这些文件:

如果你想了解这些文件分别是用来干什么的,你需要了解Tensorflow。简单地说,xxx.ckpt.meta保存了计算图结构,xxx.ckpt.data保存了模型变量的取值,xxx.ckpt.index保存了模型变量名,xxx.pb文件保存了完整的计算图结构,也就是计算图的定义和模型权重合并之后的文件。
在开始之前,我们需要配置一下Linux上的模型优化器,这一步之前我们已经做过了,这里就省了,如果没做过,进入安装目录
/opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites,可以发现里边有安装各个框架依赖的脚本,我们可以运行Tensorflow对应的那个。

./install_prerequisites_tf.sh

或者手动配置,进入/opt/intel/openvino/deployment_tools/model_optimizer目录,运行以下命令:

pip3 install -r requirements_tf.txt

接着返回到我们之前桌面的目录,根据以下命令将冻结的Tensorflow模型转换为IR格式的文件。

python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py \
--input_model frozen_inference_graph.pb \
--data_type FP16 \
--reverse_input_channels \
--batch 1 \
--tensorflow_use_custom_operations_config /opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf/ssd_v2_support.json \
--tensorflow_object_detection_api_pipeline_config pipeline.config

这里各个参数的意思是:

  • mo_tf.py:tensorflow模型优化器启动脚本
  • –input_model:冻结的Tensorflow模型文件,以.pb结尾
  • –data_type:中间张量和权重的数据类型,上面是将模型中的参数量化到16位浮点数
  • –reverse_input_channels:切换输入信道从RGB到BGR,OpenVINO一般需要BGR格式
  • –batch:每次输入数据个数为1
  • –tensorflow_use_custom_operations_config:自定义操作描述的配置文件
  • –tensorflow_object_detection_api_pipeline_config:管道配置文件的路径,生成目标检测模型

成功运行程序后,终端会打印出转换成功的信息,我们会发现之前的文件夹中多出了三个文件。

其中frozen_inference_graph.bin和frozen_inference_graph.xml就是我们需要的IR格式文件。然后可以用之前的那个脚本来测试运行,只需要简单的替换一下文件路径就好了。

最后修改日期: 2021年1月14日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。