keras保存模型_onnx+tensorrt部署keras模型

本文介绍了如何将使用Keras训练的模型通过ONNX转换为TensorRT模型,以实现更快的推理速度。首先,将Keras的HDF5模型转换为ONNX模型,然后将ONNX模型转换为TensorRT模型。在转换过程中,解决了自定义层和损失函数的识别问题,并分享了转换过程中的关键代码和注意事项。转换完成后,预计能带来约50%的速度提升。
摘要由CSDN通过智能技术生成

由于项目需要,最近捣鼓了一波如何让用tensorrt部署训练好的模型来达到更快的推理速度,期间花费了大量的时间在知乎和各种网页上去搜索别人的方案,但始终没有找到我想要的条理相对清晰的记录贴(也许只是我没找到),因此作为记录,也希望能帮到别人,弯路嘛,少走一条是一条。

由于之前项目一直是用tensorflow和keras,因此本文所讲述的是如何将模型从keras上迁移到tensorrt中,采用的方案是keras保存的hdf5模型先转为onnx模型,再将onnx模型转为tensorrt模型。采取这种方案主要有两点考虑,一方面是在tensorrt的官网只看到tensorflow转为tensorrt的教程,没有将keras模型直接部署的教程。另一方面是考虑到以后可能转去pytorch阵营(嘴上说着转已经说了半年,tf的api实在看的我眼花缭乱),到时候只需要再熟悉一下pytorch转onnx即可。废话不多说,下面是我的部署记录。

首先tensorrt是老黄为自家英伟达GPU所专门打造的推理引擎,TPU、CPU、FPGA等等请去看看TVM,本文是基于tensorrt已经安装好的基础上进行模型部署,没有安装的小伙伴请去百度,官网上的英文教程很详细,配合网友的中文安装记录很快就能配好。

Keras To Onnx

这一步主要是将keras保存的hdf5模型转为onnx后缀的模型,主要代码如下:

import keras2onnx
import onnx
from keras.models import load_model
model = load_model('testonnx.hdf5')  
onnx_model = keras2onnx.convert_keras(model, model.name)
temp_model_file = 'result.onnx'
onnx.save_model(onnx_model, temp_model_file)

代码很简单,分为三步,分别是加载keras模型,keras模型中转为onnx模型,保存onnx模型。需要注意的是加载的hdf5文件中需要包含网络结构和参数,仅仅包含参数是不行的。

此外,在我部署过程中,报了一些错误,主要是一些自定义的layer和自定义的loss无法被识别,如何转换自定义的函数我暂时还没有深入研究,后续会补上,采取了一些“曲线救国”的法子,把自定义的layer尽量用keras自带的代替,效果差点就差点吧。在训练时采用自定义的loss,最后用keras自带的loss重新编译加载再保存就不会再报错了。

如果不出错的话,生成onnx结尾的文件表示转换完成,接下来是如何将onnx模型转换为tensorrt模型。

Onnx To Tensorrt

在安装tensorrt时

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值