keras 导出onnx并使用

 

将keras的h5模型转化为onnx
先安装

pip install keras2onnx
 

import keras
import keras2onnx
import onnx
from keras.models import load_model
model = load_model('/root/notebook/model/river_model5.h5')  
onnx_model = keras2onnx.convert_keras(model, model.name)
temp_model_file = '/root/notebook/model/model.onnx'
onnx.save_model(onnx_model, temp_model_file)



参考官方文档
https://pypi.org/project/keras2onnx/
官方文档是个好东西
 

备注:
1 protobuf和numpy的版本可能会导致环境出错,需要重点关注。卸载后重新下载、编译可解决问题。
2 keras2onnx要求模型转换的python环境与模型训练的python环境保持一致,否则会报错:System Error: unknown opcode。故转换模型前需确认模型训练的python版本。
 

安装onnxruntime需要注意cpu和版本

cpu版本:

     pip install onnxruntime

gpu版本:

     pip install onnxruntime-gpu

        这个版本是1.0,要求cuda是10.0,cudnn是7.6

  4, 进行测试

        a,首先将h5文件转换为onnx文件

        b,   获取ONNX的输入和输出

        c,使用onnx和onnxruntime进行前向加速运算

import onnxmltools
from keras.models import load_model
import cv2
import numpy as np
import onnxruntime
import argparse
 
parser = argparse.ArgumentParser()
parser.add_argument("--keras_model", type=str, default='./Inception_v3_classification_dataset08_c_c_201982845.h5')
parser.add_argument("--onnx_model", type=str, default='onnx_classification.model')
args = parser.parse_args()
 
 
input_model = args.keras_model
output_model = args.onnx_model
 
# 得到网络模型结构和参数
keras_net = load_model(input_model)
 
# 将keras模型转换为onnx模型
onnx_net = onnxmltools.convert_keras(keras_net)
# 将onnx模型文件保存下来
onnxmltools.utils.save_model(onnx_net, output_model)
content = onnx_net.SerializeToString()
# 创建session
sess = onnxruntime.InferenceSession(content)
 
# 获得模型的输入或输出名
for i in sess.get_inputs():
    print(i.name)
    print(i.shape)
 
for i in sess.get_outputs():
    print(i.name)
    print(i.shape)
 
# 构造输入图像
img = np.zeros((1,139,139,3),dtype=np.float32)
 
# 使用模型默认输出作为输出结果,input_6是通过打印sess.get_inputs()的name得到
pred_onnx = sess.run(None,{'input_6':img})
print(pred_onnx)


得到的打印内容如下:

input_6
['N', 139, 139, 3]
dense_3/Softmax:0
['N', 2]
[array([[0.9215646 , 0.07843538]], dtype=float32)]

原文链接:https://blog.csdn.net/chandanyan8568/article/details/102860089

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值