MxNet与Caffe模型之间转换的桥梁-Onnx

简介: Open Neural Network Exchange (ONNX)为AI模型提供了一种开源的数据模型格式。它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。它可以作为各种AI模型之间进行转换的媒介,例如,市面上没有现成的Caffe模型到MxNet模型的转换工具,我们可以借助于ONNX,首先将Caffe转换为Onnx,然后再将Onnx转换为MxNet,更为神奇的是,这之间的转换过程不过丢失原有模型的精度。

MxNet模型导出ONNX模型


Open Neural Network Exchange (ONNX)为AI模型提供了一种开源的数据模型格式。它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。它可以作为各种AI模型之间进行转换的媒介,例如,市面上没有现成的Caffe模型到MxNet模型的转换工具,我们可以借助于ONNX,首先将Caffe转换为Onnx,然后再将Onnx转换为MxNet,更为神奇的是,这之间的转换过程不过丢失原有模型的精度。


在本教程中,我们将展示如何将MXNet模型保存为ONNX格式。MXNet-ONNX操作符的覆盖范围和特性定期更新。请访问 ONNX operator coverage以获取最新信息。在本教程中,我们将学习如何使用MXNet到ONNX的模型导出工具对预先训练的模型进行导出。


预备知识


要运行本教程,你需要安装以下python模块:


  • MXNet >= 1.3.0注意,经测试使用下面的命令进行安装MXNET可用:PIP INSTALL MXNET==1.4.0 --USER


  • onnx注意,经测试使用如下命令进行安装onnx可用:pip install onnx==1.2.1 --user


**注意:**MXNet-ONNX导入、导出工具遵循ONNX操作符集的第7版,该操作符集附带ONNX v1.2.1。


import mxnet as mx
import numpy as np
from mxnet.contrib import onnx as onnx_mxnet
import logging
logging.basicConfig(level=logging.INFO)


从MXNet Model Zoo下载一个模型


我们从MXNet Model Zoo.下载预训练的ResNet-18 ImageNet 模型。我们还将下载synset文件来匹配标签


# Download pre-trained resnet model - json and params by running following code.
path='http://data.mxnet.io/models/imagenet/'
[mx.test_utils.download(path+'resnet/18-layers/resnet-18-0000.params'),
 mx.test_utils.download(path+'resnet/18-layers/resnet-18-symbol.json'),
 mx.test_utils.download(path+'synset.txt')]


现在,我们已经在磁盘上下载了ResNet-18、params和synset文件。


MXNet到ONNX导出器API


让我们来描述MXNet的' export_model ' API。


help(onnx_mxnet.export_model)
Help on function export_model in module mxnet.contrib.onnx.mx2onnx.export_model:
export_model(sym, params, input_shape, input_type=<type 'numpy.float32'>, onnx_file_path=u'model.onnx', verbose=False)
    Exports the MXNet model file, passed as a parameter, into ONNX model.
    Accepts both symbol,parameter objects as well as json and params filepaths as input.
    Operator support and coverage - https://cwiki.apache.org/confluence/display/MXNET/MXNet-ONNX+Integration
    Parameters
    ----------
    sym : str or symbol object
        Path to the json file or Symbol object
    params : str or symbol object
        Path to the params file or params dictionary. (Including both arg_params and aux_params)
    input_shape : List of tuple
        Input shape of the model e.g [(1,3,224,224)]
    input_type : data type
        Input data type e.g. np.float32
    onnx_file_path : str
        Path where to save the generated onnx file
    verbose : Boolean
        If true will print logs of the model conversion
    Returns
    -------
    onnx_file_path : str
        Onnx file path


' export_model ' API可以通过以下两种方式之一接受MXNet模型。


  1. MXNet sym, params对象:


  • 如果我们正在训练一个模型,这是有用的。在训练结束时,我们只需要调用' export_model '函数,并提供sym和params对象作为输入和其他属性,以将模型保存为ONNX格式。


  1. MXNet导出的json和params文件:


  • 如果我们有预先训练过的模型,并且希望将它们转换为ONNX格式,那么这是非常有用的。


由于我们已经下载了预训练的模型文件,我们将通过传递符号和params文件的路径来使用' export_model ' API。


如何使用MXNet到ONNXA导入、导出工具PI


我们将使用下载的预训练的模型文件(sym、params)并定义输入变量。


# 下载的输入符号和参数文件
sym = './resnet-18-symbol.json'
params = './resnet-18-0000.params'
# 标准Imagenet输入- 3通道,224*224
input_shape = (1,3,224,224)
# 输出文件的路径
onnx_file = './mxnet_exported_resnet50.onnx'


我们已经定义了' export_model ' API所需的输入参数。现在,我们准备将MXNet模型转换为ONNX格式


# 调用导出模型API。它返回转换后的onnx模型的路径
converted_model_path = onnx_mxnet.export_model(sym, params, [input_shape], np.float32, onnx_file)


这个API返回转换后的模型的路径,您稍后可以使用该路径将模型导入其他框架。


检验ONNX模型的有效性


现在我们可以使用ONNX检查工具来检查转换后的ONNX模型的有效性。该工具将通过检查内容是否包含有效的protobuf来验证模型:


from onnx import checker
import onnx
# Load onnx model
model_proto = onnx.load_model(converted_model_path)
# Check if converted ONNX protobuf is valid
checker.check_graph(model_proto.graph)


如果转换后的protobuf格式不符合ONNX proto规范,检查器将抛出错误,但在本例中成功通过。


该方法验证了导出模型原buf的有效性。现在,模型可以导入到其他框架中进行推理了!


相关文章
|
5月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
591 27
|
4月前
|
机器学习/深度学习 数据可视化 算法
深度学习模型结构复杂、参数众多,如何更直观地深入理解你的模型?
深度学习模型虽应用广泛,但其“黑箱”特性导致可解释性不足,尤其在金融、医疗等敏感领域,模型决策逻辑的透明性至关重要。本文聚焦深度学习可解释性中的可视化分析,介绍模型结构、特征、参数及输入激活的可视化方法,帮助理解模型行为、提升透明度,并推动其在关键领域的安全应用。
408 0
|
3月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
190 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
2月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
5月前
|
机器学习/深度学习 人工智能 PyTorch
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
本文以 MNIST 手写数字识别为切入点,介绍了深度学习的基本原理与实现流程,帮助读者建立起对神经网络建模过程的系统性理解。
634 15
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
|
3月前
|
机器学习/深度学习 数据采集 传感器
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
236 0
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 基础知识从 0.3 到 0.4——如何选对深度学习模型?
本系列文章从机器学习基础出发,逐步深入至深度学习与Transformer模型,探讨AI关键技术原理及应用。内容涵盖模型架构解析、典型模型对比、预训练与微调策略,并结合Hugging Face平台进行实战演示,适合初学者与开发者系统学习AI核心知识。
482 15
|
10月前
|
机器学习/深度学习 数据采集 自然语言处理
深度学习实践技巧:提升模型性能的详尽指南
深度学习模型在图像分类、自然语言处理、时间序列分析等多个领域都表现出了卓越的性能,但在实际应用中,为了使模型达到最佳效果,常规的标准流程往往不足。本文提供了多种深度学习实践技巧,包括数据预处理、模型设计优化、训练策略和评价与调参等方面的详细操作和代码示例,希望能够为应用实战提供有效的指导和支持。
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习模型、算法与应用的全方位解析
深度学习,作为人工智能(AI)的一个重要分支,已经在多个领域产生了革命性的影响。从图像识别到自然语言处理,从语音识别到自动驾驶,深度学习无处不在。本篇博客将深入探讨深度学习的模型、算法及其在各个领域的应用。
1012 3
|
6月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
285 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统

热门文章

最新文章