如何在OpenVINO中部署加速Keras训练生成的模型

小o 更新于 3年前

基本思路分析

大家好,今天给大家分享一下如何把Keras框架训练生成模型部署到OpenVINO平台上实现推理加速。要把Keras框架训练生成的h5模型部署到OpenVINO上,有两条技术路线:

选择一:

把预训练权重文件h5转换pb文件,然后再转为OpenVINO可以解析的IR文件

选择二:

把预训练权重文件h5转为ONNX格式文件,然后OpenVINO就可以直接读取跟使用了。
很显然,第一条技术路线中间步骤比第二条要多,这个就意味着翻车的可能性更大,所以我选择把Keras转换为ONNX格式文件路线。

从Keras到ONNX
先说一下我的版本信息

Tensorflow2.2.0
Keras2.4.3
OpenVINO2021.02
Python3.6.5
CUDA10.1

怎么从Keras的h5权重文件到ONNX格式文件,我还是很**的存在,但是我相信ONNX格式生态已经是很完善了,支持各种转ONNX格式,所以我搜索一波发现,github上有个很好用的工具Keras2ONNX,该项目的github地址如下:https://github.com/onnx/keras-onnx

然后根据它的安装指导,直接执行这句话:

pip install keras2onnx

毫无意外的翻车了,压根无法安装,好像是网络的问题

然后它说还可以从源码安装的方式,于是我执行下面的两个命令行

pip install -U git+https://github.com/microsoft/onnxconverter-common
pip install -U git+https://github.com/onnx/keras-onnx

真的可以了,完成了安装。然后我从github上找了个Keras全卷积语义分割网络的源码库,下载了预训练模型,通过下面的几行代码完成了从h5权重模型文件到ONNX格式文件的转换

# Load model and weight***r>input_shape = (224, 224, 3)
number_classes = 32 # CamVid data consist of 32 classe***r>img_input = Input(shape=input_shape, batch_size=1)
x = create_tiramisu(number_classes, img_input)
model = Model(img_input, x)
model.load_weights("D:/zhigang/my_seg.h5")
onnx_model = keras2onnx.convert_kera***odel, model.name)
keras2onnx.save_model(onnx_model, "D:/my_seg.onnx")

运行上面的代码就会生成ONNX格式的模型文件。

OpenVINO加载ONNX格式的模型加速推理

OpenVINO从2020版本开始支持ONNX格式,而且在OpenVINO2021.2版本中ONNX格式的操作支持与OP支持都得到了很大的加强,可以直接调用ONNX格式文件完成推理与输出。这里唯一需要注意的是,Keras转换为ONNX格式模型的输入数据格式是NHWC而不是OpenVINO预训练库中模型的常见的输入格式NCHW。

0个评论