ONNX-keras模型使用

mac2025-09-27  20

 

 

一、 ONNXRUNTIME加速效果

https://github.com/onnx/keras-onnx

  1,创建虚拟环境

             conda create -n keras-onnx python=3.6

   2,激活环境

             conda activate keras-onnx

  3,安装需要的依赖包

      pip install tensorflow-gpu

      pip install keras

      pip install onnxmltools

安装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)]

 

最新回复(0)