内 容 来 源 | 刘金龙
内 容 排 版 | 晏 杨
2、根据自己的训练模型需要配置 Mode Optimizer。
3、根据设置的模型参数运行 Model Optimizer, 生成相对应的 IR
(主要是 xml 和 bin)
。
xml 主要用来描述网络拓扑结构, bin 包括生成的 weights and biases 二进制数据
4、在实际应用场景种使用 Inference Engine 测试生成的 IR。
此步非常重要,自行生成的 IR 模型,一定要测试是否转换完全及是否成功
5、在应用程序种调用 Inference Engine 相应接口,将生成的模型IR部署到实际环境中。
Model Optimizer
是一个
跨平台命令行工具
,用于促进训练与具体实施平台中的过渡,主要是进行静态模型分析 以及根据配置参照自动调整深度模型。
Model Optimizer 被用来设计成支持常用的框架
( Caffe, TensorFlow, MXNet, Kaldi, ONNX 等)
,相当于封装了一层,便于进行开发。
1、根据需要所用到的框架,配置 Model Optimizer。
3、运行 Model Optimizer
(根据选择的网络拓扑进行训练)
。
4、IR 作为 Model Optimizer 输出。
-模型优化器对各种深度学习框架模型的支持并非100%的,需要慎重选择。-
mo_tf.py
是支持把 tensorflow 模型转换为 IR,脚本运行命令行如下:
--
input_model
// TensorFlow模型(.pb)的路径;
--
tensorflow_use_custom_operations_config
//
用来替换来自对象检测框架模型网络结构的子图配置与匹配文件
(描述转换关系)
,必须跟模型一一对应。
--
tensorflow_object_detection_api_pipeline_config
/
/ 来自对象检测框架导出模型时候 config 文件,描述模型的结构与训练相关信息。
--
data_type
//
表示数据类型, 支持 FP16、 FP32、 half、 float 四种格式
--
output_dir
//
生成 IR 文件的保存路径
--
model_name
//
生成 IR 文件的名称
Intel 公开了大量的预训练模型,模型涵盖了
人脸检测、年龄检测、文字识别、行人识别、道路分割、表情识别等
许多方面,且这些模型是通过优化的,
可以直接拿来用于加速产品开发和部署。
Model Zoo
下载链接为 ——
https://github.com/opencv/open_model_zoo
除了从上述链接下载自己需要的模型,OpenVINO 提供了一个模型下载工具
downloader.py
,可以直接下载这些预训练模型
1、以管理员身份运行 Windows 命令终端,进入
“C:\Intel\openvino_2019.1.148\deployment_tools\tools\model_downloader”
路径。
2、使用命令:
python downloader.py
--name “想要下载的模型名称” 。
注意:--name 参数最好不要使用默认值(--all),使用默认值会下载所有的模型,有点多余。故:我们最好设置成我们想要下载的模型名称。
在本文中选用了
Model Zoo
中的
“vehicle-license-plate-detection-barrier-0106”
模型进行车辆及车牌检测。模型介绍如图:
简单的讲,使用 OpenVINO 工具开发 AI 推理计算应用只需两步:
第一步:使用
Model Optimizer 工具
优化模型。
第二步:调用
Inference Engine API 函数
进行推理计算。
下面详细介绍一下调用
Inference Engine API 函数
进行推理计算的流程和相关 API。
针对不同的网络、不同的应用场合可以使用不同的插件作计算后台。
在此以 CPU 为例(
CPU 需要加载扩展库
)
InferenceEngine::CNNNetReader
将整个网络的拓扑结构(xml 文件)和相关权重(bin 文件)读取到内存中。有多个 API 可以获得网络的各种信息。
InferenceEngine::CNNNetwork
对整个网络进行管理,获取网络的信息 输入、输出信息。设置和图像转换。 将模型载入内存后,使用如下 API 指定模型的输入和输出张量的精度和布局。
CNNNetwork::getInputInfo()
获得输入信息
CNNNetwork::getOutputInfo()
获得输出信息
plugin.LoadNetwork
:将模型载入 AI 计算硬件中,此处需要指定所使用的
devicename 参数
所指定的计算硬件。
exec_network.CreateInferRequest()
通常我们是通过 OpenCV 读入图像数据到 Mat 对象,需要使用 frameToBlob() 函数将 OpenCV Mat 对象中的图像数据传给 InferenceEngine Blob 对象,AI 模型从 InferenceEngine Blob 中获得图像数据。
使用
InferenceEngine::InferRequest::Infer()
方法进行同步推理计算。同步推断常用于对单张图像或少量图像处理不太注重处理效率时使用。
异步推断常用于图像的批量处理和视频处理当中,用到的方法有:
InferenceEngine::InferRequest::StartAsync()
和
InferenceEngine::InferRequest::wait()
处理预测结果
[11N*7] [image_id label conf x_min y_min x_max y_max]
需要注意的是:
x_min y_min x_max y_max
为占比系数,需要乘以图像的宽和高转换为实际尺寸。
InferenceEngine::InferRequest::GetBlob()
获得推理计算结果。
欢迎在留言区与我们互动哦~
留言区
---------------------------------------
*OpenVINO and the OpenVINO logo are trademarks of Intel Corporation or its subsidiaries.
-----------------------------
本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4629711/blog/4533022