OpenVINO部署加速Keras训练生成的模型

2021-04-21 15:45:15 浏览数 (1)

基本思路

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

选择一:

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

选择二:

把预训练权重文件h5转为ONNX格式文件,然后OpenVINO就可以直接读取跟使用了。

很显然,第一条技术路线中间步骤比第二条要多,这个就意味着翻车的可能性更大,所以我选择把Keras转换为ONNX格式文件路线。

从Keras到ONNX

先说一下我的版本信息

代码语言:javascript复制
- Tensorflow2.2.0
- Keras2.4.3
- OpenVINO2021.02
- Python3.6.5
- CUDA10.1

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

代码语言:javascript复制
https://github.com/onnx/keras-onnx

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

代码语言:javascript复制
pip install keras2onnx

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

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

代码语言:javascript复制
pip install -U git https://github.com/microsoft/onnxconverter-common
pip install -U git https://github.com/onnx/keras-onnx

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

代码语言:javascript复制
# Load model and weights
 input_shape = (224, 224, 3)
 number_classes = 32  # CamVid data consist of 32 classes

 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_keras(model, model.name)
 keras2onnx.save_model(onnx_model, "D:/my_seg.onnx")

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

推理演示部分

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

为了让大家更好得理解与使用OpenVINO框架,我特别整理了OpenVINO计算机视觉加速的学习路径,图示如下:

0 人点赞