概念 

ONNX 为深度学习和传统 ML 的 AI 模型提供开源格式。它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。目前,专注于推理(评分)所需的能力。 

ONNX 是一个中间机器学习框架,用于在不同的机器学习框架之间进行转换。因此,假设您的模型在 TensorFlow 中,但想要在TensorRT中使用,或者模型在PyTorch中,想要在TFLite中使用。ONNX 是一个很好的中介,用于在您通过这些不同的机器学习框架时转换您的模型。

ONNX 已经非常努力地在这些机器学习模型中基本实现了各种不同的神经网络功能和不同的功能,因此可以支持这种cross功能实现对基线、通用框架的转换。

ONNX has worked really hard to basically implement all kinds of different neural network functions and different functionalities in these machine learning models, so we can support this cross functionality to have baseline, common framework to convert into.

问题和坑

ONNX只是一个格式,就和json一样。只要你满足一定的规则,都算是合法的,因此单纯从Pytorch转成一个ONNX文件很简单。但是不同后端设备接受的onnx是不一样的,因此这才是坑的来源。Pytorch自带的torch.onnx.export转换得到的ONNX,ONNXRuntime需要的ONNX,TensorRT需要的ONNX都是不同的。

一件事是,随着 ONNX(一种开源工具)的构建,他们正在向其中构建新功能。他们试图跟踪机器学习中正在进行的所有新研究,但这些版本可能会落后,你知道,你可以拥有一个版本的 TensorFlow,它与一个版本的 ONNX 不兼容,而你有升级和降级这些版本以尝试找到通过它们的途径,甚至可能编辑您的模型。 

 

实战应用