Pytorch分类模型转onnx以及onnx模型推理 将MobileNetV2的pytorch模型转换为ONNX模型,并用onnxruntime进行测试_cumtchw-程序员秘密 Onnx模型推理(Python),onnx,python
基本概念
onnx
Open Neural Network Exchange (ONNX)是微软和Facebook携手开发的开放式神经网络交换工具。为人工智能模型(包括深度学习和传统ML)提供了一种开源格式。它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型。目前主要关注推断所需的功能。
ONNX之于机器学习模型就像JPEG之于图像或MPEG之于视频。你可以使用pytorch,tensorflow或者其他深度学习的框架来训练你的模型,最后都可以转成onnx模型. ONNX就想是不同模型之间的桥梁
ONNX Runtime
ONNX Runtime 是将 ONNX 模型部署到生产环境的跨平台高性能运行引擎,主要对模型图应用了大量的图优化,然后基于可用的特定于硬件的加速器将其划分为子图(并行处理)。
通过其可扩展的Execution Providers (EP) 框架与不同的硬件加速库协同工作,以在硬件平台上以最佳方式执行 ONNX 模型。
该接口使 AP 应用程序开发人员能够灵活地在云和边缘的不同环境中部署他们的 ONNX 模型,并通过利用平台的计算能力来优化执行
- onnx runtime支持CPU和GPU,而tensorRT仅仅支持NVIDIAGPU。
- onnx runtime在CPU上的加速效果很明显,而在GPU上的加速表现一般,不如tensorRT。(具体在CPU和GPU上的加速情况参见:https://blog.csdn.net/ltochange/article/details/120432092)
pytorch模型转ONNX模型(支持批处理)
pytorch模型转ONNX模型(支持批处理)
pytorch转onnx部署+一些小坑坑
torch.onnx.export的时候输入的data是个tensor! 诡异的是,使用onnxruntime.run的时候,如果输入的input是torch格式,就会报错RuntimeError: Input must be a list of dictionaries or a single numpy array for input ‘input.1’. 大概意思就是让你输入个numpy或者dictionary的格式。 输入的图像经过letterbox后构造成[1, 3, 640, 640]后在转个numpy就妥了。
MODNet:实时人像抠图模型-onnx python部署
在部署onnx时,将要推理的图像做简单的前处理,如果采用pytorch的transform则还需要安装pytorch,导致软件过大。此时,应该自己实现图像预处理程序。如normalize和resize:
- def normalize(self, im, mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]):
im = im.astype(np.float32, copy=False) / 255.0 im -= mean im /= std return im - def resize(self, im, target_size=608, interp=cv2.INTER_LINEAR):
if isinstance(target_size, list) or isinstance(target_size, tuple): w = target_size[0] h = target_size[1] else: w = target_size h = target_size im = cv2.resize(im, (w, h), interpolation=interp)
|