目录
安装和导入ONNX运行时
载入ONNX模型
使用ONNX运行时进行预测
摘要和后续步骤
参考文献
- 下载源547.1 KB
系列文章列表如下:
ONNX系列一 --- 带有ONNX的便携式神经网络
ONNX系列二 --- 使用ONNX使Keras模型可移植
ONNX系列三 --- 使用ONNX使PyTorch AI模型可移植
ONNX系列四 --- 使用ONNX使TensorFlow模型可移植
ONNX系列五 --- 在C#中使用可移植的ONNX AI模型
ONNX系列六 --- 在Java中使用可移植的ONNX AI模型
ONNX系列七 --- 在Python中使用可移植的ONNX AI模型
在关于2020年使用便携式神经网络的系列文章中,您将学习如何在x64架构上安装ONNX并在Python中使用它。
微软与Facebook和AWS共同开发了ONNX。ONNX格式和ONNX运行时都具有行业支持,以确保所有重要框架都能够将其图形导出到ONNX,并且这些模型可以在任何硬件配置上运行。
ONNX Runtime是用于运行已转换为ONNX格式的机器学习模型的引擎。传统机器学习模型和深度学习模型(神经网络)都可以导出为ONNX格式。运行时可以在Linux,Windows和Mac上运行,并且可以在各种芯片体系结构上运行。它还可以利用诸如GPU和TPU之类的硬件加速器。但是,没有针对操作系统,芯片体系结构和加速器的每种组合的安装包,因此,如果不使用任何一种常见组合,则可能需要从源代码构建运行时。检查ONNX运行时网站以获得所需组合的安装说明。本文将展示如何在具有默认CPU的x64体系结构和具有GPU的x64体系结构上安装ONNX Runtime。
除了可以在许多硬件配置上运行之外,还可以从大多数流行的编程语言中调用运行时。本文的目的是展示如何在Python中使用ONNX Runtime。我将展示如何安装onnxruntime软件包。安装ONNX Runtime后,我会将先前导出的MNIST模型加载到ONNX Runtime中,并使用它进行预测。
安装和导入ONNX运行时在使用ONNX Runtime之前,您需要安装onnxruntime软件包。以下命令将在具有默认CPU的x64体系结构上安装运行时:
pip install onnxruntime
要将运行时安装在带有GPU的x64架构上,请使用以下命令:
pip install onnxruntime-gpu
安装后,可以使用以下import语句将其导入您的模块中:
import onnxruntime
载入ONNX模型
将ONNX模型加载到ONNX Runtime中与转换一样简单,实际上只是一行代码。以下功能说明了如何将ONNX模型加载到ONNX运行时。ONNX模型的实际加载只是一个命令。
def load_onnx_model(onnx_model_file):
try:
session = onnxruntime.InferenceSession(onnx_model_file)
except (InvalidGraph, TypeError, RuntimeError) as e:
# It is possible for there to be a mismatch between the onnxruntime and the
# version of the onnx model format.
print(e)
raise e
return session
使用ONNX运行时进行预测
以下函数显示了如何使用在加载ONNX模型时创建的ONNX会话。这里有几件事值得注意。首先,您需要查询会话以获取其输入。这是使用会话的get_inputs()方法完成的。此输入的名称用于创建输入字典,该字典将传递到会话的run命令。我们的MNIST模型只有一个输入参数,即图像列表。(在image_samples参数中。)如果模型具有多个输入参数,则get_inputs()的每个参数都有一个条目。
def onnx_infer(onnx_session, image_samples):
input_name = onnx_session.get_inputs()[0].name
result = onnx_session.run(None, {input_name: image_samples})
probabilities = np.array(result[0])
print(type(probabilities))
print(probabilities)
# Generate arg maxes for predictions
predictions = np.argmax(probabilities, axis=1)
return predictions
大多数神经网络不会直接返回预测。它们返回每个输出类的概率列表。对于我们的MNIST模型,每个图像的返回值将是10个概率的列表。可能性最高的条目是预测。您可以做的一个有趣的测试是,将ONNX模型在创建模型的框架中运行时返回的概率与从原始模型返回的概率进行比较。理想情况下,模型格式和运行时的更改不应更改所产生的任何概率。这将使每当模型发生更改时都可以运行良好的单元测试。
在本文中,我简要介绍了ONNX运行时和ONNX格式。然后,我展示了如何在ONNX运行时中使用Python加载和运行ONNX模型。
本文的代码示例包含一个工作的Console应用程序,该应用程序演示了此处显示的所有技术。此代码示例是Github存储库的一部分,该存储库探讨了使用神经网络预测MNIST数据集中发现的数字的方法。具体来说,有一些示例显示了如何在Keras,PyTorch,TensorFlow 1.0和TensorFlow 2.0中创建神经网络。
如果您想了解有关导出为ONNX格式和使用ONNX运行时的更多信息,请查阅本系列的其他文章。
参考文献- https://microsoft.github.io/onnxruntime/
- https://microsoft.github.io/onnxruntime/python/api_summary.html
- https://github.com/keithpij/onnx-lab